summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShawn O. Pearce <sop@google.com>2009-04-10 17:04:08 -0700
committerShawn O. Pearce <sop@google.com>2009-04-10 17:08:02 -0700
commitb1562faee09fe9eb84ea2d1eaf52bf841e2fe811 (patch)
treef52d37132ea35e1c3d69341e6f2ea547964c3c6e
parent3e768c9dc7f77cb2960f990f6e2d15890e96abdb (diff)
downloadgit-repo-b1562faee09fe9eb84ea2d1eaf52bf841e2fe811.tar.gz
Add 'repo sync -l' to only do local operations
This permits usage of 'repo sync' while offline, as we bypass the network based portions of the code and do only the local sync. An example use case might be: repo sync -n ; # while we have network ... some time later ... repo sync -l ; # while without network, come up to date Signed-off-by: Shawn O. Pearce <sop@google.com>
-rw-r--r--subcmds/sync.py58
1 files changed, 33 insertions, 25 deletions
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.
52""" 52"""
53 53
54 def _Options(self, p): 54 def _Options(self, p):
55 p.add_option('-l','--local-only',
56 dest='local_only', action='store_true',
57 help="only update working tree, don't fetch")
55 p.add_option('-n','--network-only', 58 p.add_option('-n','--network-only',
56 dest='network_only', action='store_true', 59 dest='network_only', action='store_true',
57 help="fetch only, don't update working tree") 60 help="fetch only, don't update working tree")
@@ -80,6 +83,9 @@ revision is temporarily needed.
80 if opt.network_only and opt.detach_head: 83 if opt.network_only and opt.detach_head:
81 print >>sys.stderr, 'error: cannot combine -n and -d' 84 print >>sys.stderr, 'error: cannot combine -n and -d'
82 sys.exit(1) 85 sys.exit(1)
86 if opt.network_only and opt.local_only:
87 print >>sys.stderr, 'error: cannot combine -n and -l'
88 sys.exit(1)
83 89
84 rp = self.manifest.repoProject 90 rp = self.manifest.repoProject
85 rp.PreSync() 91 rp.PreSync()
@@ -93,34 +99,36 @@ revision is temporarily needed.
93 project.PostRepoUpgrade() 99 project.PostRepoUpgrade()
94 100
95 all = self.GetProjects(args, missing_ok=True) 101 all = self.GetProjects(args, missing_ok=True)
96 fetched = self._Fetch(rp, mp, *all)
97 102
98 if rp.HasChanges: 103 if not opt.local_only:
99 print >>sys.stderr, 'info: A new version of repo is available' 104 fetched = self._Fetch(rp, mp, *all)
100 print >>sys.stderr, '' 105
101 if opt.no_repo_verify or _VerifyTag(rp): 106 if rp.HasChanges:
102 if not rp.Sync_LocalHalf(): 107 print >>sys.stderr, 'info: A new version of repo is available'
108 print >>sys.stderr, ''
109 if opt.no_repo_verify or _VerifyTag(rp):
110 if not rp.Sync_LocalHalf():
111 sys.exit(1)
112 print >>sys.stderr, 'info: Restarting repo with latest version'
113 raise RepoChangedException(['--repo-upgraded'])
114 else:
115 print >>sys.stderr, 'warning: Skipped upgrade to unverified version'
116
117 if opt.network_only:
118 # bail out now; the rest touches the working tree
119 return
120
121 if mp.HasChanges:
122 if not mp.Sync_LocalHalf():
103 sys.exit(1) 123 sys.exit(1)
104 print >>sys.stderr, 'info: Restarting repo with latest version'
105 raise RepoChangedException(['--repo-upgraded'])
106 else:
107 print >>sys.stderr, 'warning: Skipped upgrade to unverified version'
108
109 if opt.network_only:
110 # bail out now; the rest touches the working tree
111 return
112
113 if mp.HasChanges:
114 if not mp.Sync_LocalHalf():
115 sys.exit(1)
116 124
117 self.manifest._Unload() 125 self.manifest._Unload()
118 all = self.GetProjects(args, missing_ok=True) 126 all = self.GetProjects(args, missing_ok=True)
119 missing = [] 127 missing = []
120 for project in all: 128 for project in all:
121 if project.gitdir not in fetched: 129 if project.gitdir not in fetched:
122 missing.append(project) 130 missing.append(project)
123 self._Fetch(*missing) 131 self._Fetch(*missing)
124 132
125 for project in all: 133 for project in all:
126 if project.worktree: 134 if project.worktree: