diff --git a/subcmds/sync.py b/subcmds/sync.py index 542b4c20..21e0899a 100644 --- a/subcmds/sync.py +++ b/subcmds/sync.py @@ -52,6 +52,9 @@ revision is temporarily needed. """ def _Options(self, p): + p.add_option('-l','--local-only', + dest='local_only', action='store_true', + help="only update working tree, don't fetch") p.add_option('-n','--network-only', dest='network_only', action='store_true', help="fetch only, don't update working tree") @@ -80,6 +83,9 @@ revision is temporarily needed. if opt.network_only and opt.detach_head: print >>sys.stderr, 'error: cannot combine -n and -d' sys.exit(1) + if opt.network_only and opt.local_only: + print >>sys.stderr, 'error: cannot combine -n and -l' + sys.exit(1) rp = self.manifest.repoProject rp.PreSync() @@ -93,34 +99,36 @@ revision is temporarily needed. project.PostRepoUpgrade() all = self.GetProjects(args, missing_ok=True) - fetched = self._Fetch(rp, mp, *all) - if rp.HasChanges: - print >>sys.stderr, 'info: A new version of repo is available' - print >>sys.stderr, '' - if opt.no_repo_verify or _VerifyTag(rp): - if not rp.Sync_LocalHalf(): + if not opt.local_only: + fetched = self._Fetch(rp, mp, *all) + + if rp.HasChanges: + print >>sys.stderr, 'info: A new version of repo is available' + print >>sys.stderr, '' + if opt.no_repo_verify or _VerifyTag(rp): + if not rp.Sync_LocalHalf(): + sys.exit(1) + print >>sys.stderr, 'info: Restarting repo with latest version' + raise RepoChangedException(['--repo-upgraded']) + else: + print >>sys.stderr, 'warning: Skipped upgrade to unverified version' + + if opt.network_only: + # bail out now; the rest touches the working tree + return + + if mp.HasChanges: + if not mp.Sync_LocalHalf(): sys.exit(1) - print >>sys.stderr, 'info: Restarting repo with latest version' - raise RepoChangedException(['--repo-upgraded']) - else: - print >>sys.stderr, 'warning: Skipped upgrade to unverified version' - if opt.network_only: - # bail out now; the rest touches the working tree - return - - if mp.HasChanges: - if not mp.Sync_LocalHalf(): - sys.exit(1) - - self.manifest._Unload() - all = self.GetProjects(args, missing_ok=True) - missing = [] - for project in all: - if project.gitdir not in fetched: - missing.append(project) - self._Fetch(*missing) + self.manifest._Unload() + all = self.GetProjects(args, missing_ok=True) + missing = [] + for project in all: + if project.gitdir not in fetched: + missing.append(project) + self._Fetch(*missing) for project in all: if project.worktree: