From f6906876719a665819c603604603570363389d0d Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Sat, 18 Apr 2009 10:49:00 -0700 Subject: [PATCH] Only fetch repo once-per-day under normal 'repo sync' usage Its unlikely that a new version of repo will be delivered in any given day, so we now check only once every 24 hours to see if repo has been updated. This reduces the sync cost, as we no longer need to contact the repo distribution servers every time we do a sync. repo selfupdate can still be used to force a check. Signed-off-by: Shawn O. Pearce --- project.py | 8 ++++++++ subcmds/sync.py | 14 +++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) 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)