diff options
Diffstat (limited to 'subcmds/sync.py')
| -rw-r--r-- | subcmds/sync.py | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/subcmds/sync.py b/subcmds/sync.py index a8022d9d..b83f2d4a 100644 --- a/subcmds/sync.py +++ b/subcmds/sync.py | |||
| @@ -510,7 +510,6 @@ uncommitted changes are present' % project.relpath | |||
| 510 | to_fetch.append(rp) | 510 | to_fetch.append(rp) |
| 511 | to_fetch.extend(all_projects) | 511 | to_fetch.extend(all_projects) |
| 512 | to_fetch.sort(key=self._fetch_times.Get, reverse=True) | 512 | to_fetch.sort(key=self._fetch_times.Get, reverse=True) |
| 513 | self._fetch_times.Clear() | ||
| 514 | 513 | ||
| 515 | self._Fetch(to_fetch, opt) | 514 | self._Fetch(to_fetch, opt) |
| 516 | _PostRepoFetch(rp, opt.no_repo_verify) | 515 | _PostRepoFetch(rp, opt.no_repo_verify) |
| @@ -613,19 +612,24 @@ warning: Cannot automatically authenticate repo.""" | |||
| 613 | return True | 612 | return True |
| 614 | 613 | ||
| 615 | class _FetchTimes(object): | 614 | class _FetchTimes(object): |
| 615 | _ALPHA = 0.5 | ||
| 616 | |||
| 616 | def __init__(self, manifest): | 617 | def __init__(self, manifest): |
| 617 | self._path = os.path.join(manifest.repodir, '.repopickle_fetchtimes') | 618 | self._path = os.path.join(manifest.repodir, '.repopickle_fetchtimes') |
| 618 | self._times = None | 619 | self._times = None |
| 619 | 620 | self._seen = set() | |
| 620 | def Clear(self): | ||
| 621 | self._times = {} | ||
| 622 | 621 | ||
| 623 | def Get(self, project): | 622 | def Get(self, project): |
| 624 | self._Load() | 623 | self._Load() |
| 625 | return self._times.get(project.name, _ONE_DAY_S) | 624 | return self._times.get(project.name, _ONE_DAY_S) |
| 626 | 625 | ||
| 627 | def Set(self, project, t): | 626 | def Set(self, project, t): |
| 628 | self._times[project.name] = t | 627 | self._Load() |
| 628 | name = project.name | ||
| 629 | old = self._times.get(name, t) | ||
| 630 | self._seen.add(name) | ||
| 631 | a = self._ALPHA | ||
| 632 | self._times[name] = (a*t) + ((1-a) * old) | ||
| 629 | 633 | ||
| 630 | def _Load(self): | 634 | def _Load(self): |
| 631 | if self._times is None: | 635 | if self._times is None: |
| @@ -650,6 +654,14 @@ class _FetchTimes(object): | |||
| 650 | def Save(self): | 654 | def Save(self): |
| 651 | if self._times is None: | 655 | if self._times is None: |
| 652 | return | 656 | return |
| 657 | |||
| 658 | to_delete = [] | ||
| 659 | for name in self._times: | ||
| 660 | if name not in self._seen: | ||
| 661 | to_delete.append(name) | ||
| 662 | for name in to_delete: | ||
| 663 | del self._times[name] | ||
| 664 | |||
| 653 | try: | 665 | try: |
| 654 | f = open(self._path, 'wb') | 666 | f = open(self._path, 'wb') |
| 655 | try: | 667 | try: |
