diff --git a/project.py b/project.py index 9f4512f6..f2825028 100644 --- a/project.py +++ b/project.py @@ -1349,6 +1349,14 @@ class MetaProject(Project): if base: self.revision = base + @property + def LastFetch(self): + try: + fh = os.path.join(self.gitdir, 'FETCH_HEAD') + return os.path.getmtime(fh) + except OSError: + return 0 + @property def HasChanges(self): """Has the remote received new commits not yet checked out? diff --git a/subcmds/sync.py b/subcmds/sync.py index ec5ada21..55ffca3e 100644 --- a/subcmds/sync.py +++ b/subcmds/sync.py @@ -18,6 +18,7 @@ import os import re import subprocess import sys +import time from git_command import GIT from project import HEAD @@ -72,7 +73,7 @@ revision is temporarily needed. dest='repo_upgraded', action='store_true', help=SUPPRESS_HELP) - def _Fetch(self, *projects): + def _Fetch(self, projects): fetched = set() pm = Progress('Fetching projects', len(projects)) for project in projects: @@ -106,7 +107,14 @@ revision is temporarily needed. all = self.GetProjects(args, missing_ok=True) if not opt.local_only: - fetched = self._Fetch(rp, mp, *all) + to_fetch = [] + now = time.time() + if (24 * 60 * 60) <= (now - rp.LastFetch): + to_fetch.append(rp) + to_fetch.append(mp) + to_fetch.extend(all) + + fetched = self._Fetch(to_fetch) _PostRepoFetch(rp, opt.no_repo_verify) if opt.network_only: # bail out now; the rest touches the working tree @@ -124,7 +132,7 @@ revision is temporarily needed. for project in all: if project.gitdir not in fetched: missing.append(project) - self._Fetch(*missing) + self._Fetch(missing) syncbuf = SyncBuffer(mp.config, detach_head = opt.detach_head)