summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--project.py17
-rw-r--r--subcmds/sync.py24
2 files changed, 27 insertions, 14 deletions
diff --git a/project.py b/project.py
index 8ffed842..ce85b863 100644
--- a/project.py
+++ b/project.py
@@ -618,18 +618,19 @@ class Project(object):
618 618
619## Sync ## 619## Sync ##
620 620
621 def Sync_NetworkHalf(self): 621 def Sync_NetworkHalf(self, quiet=False):
622 """Perform only the network IO portion of the sync process. 622 """Perform only the network IO portion of the sync process.
623 Local working directory/branch state is not affected. 623 Local working directory/branch state is not affected.
624 """ 624 """
625 is_new = not self.Exists 625 is_new = not self.Exists
626 if is_new: 626 if is_new:
627 print >>sys.stderr 627 if not quiet:
628 print >>sys.stderr, 'Initializing project %s ...' % self.name 628 print >>sys.stderr
629 print >>sys.stderr, 'Initializing project %s ...' % self.name
629 self._InitGitDir() 630 self._InitGitDir()
630 631
631 self._InitRemote() 632 self._InitRemote()
632 if not self._RemoteFetch(initial = is_new): 633 if not self._RemoteFetch(initial=is_new, quiet=quiet):
633 return False 634 return False
634 635
635 #Check that the requested ref was found after fetch 636 #Check that the requested ref was found after fetch
@@ -642,7 +643,7 @@ class Project(object):
642 # 643 #
643 rev = self.revisionExpr 644 rev = self.revisionExpr
644 if rev.startswith(R_TAGS): 645 if rev.startswith(R_TAGS):
645 self._RemoteFetch(None, rev[len(R_TAGS):]) 646 self._RemoteFetch(None, rev[len(R_TAGS):], quiet=quiet)
646 647
647 if self.worktree: 648 if self.worktree:
648 self._InitMRef() 649 self._InitMRef()
@@ -1025,7 +1026,9 @@ class Project(object):
1025 1026
1026## Direct Git Commands ## 1027## Direct Git Commands ##
1027 1028
1028 def _RemoteFetch(self, name=None, tag=None, initial=False): 1029 def _RemoteFetch(self, name=None, tag=None,
1030 initial=False,
1031 quiet=False):
1029 if not name: 1032 if not name:
1030 name = self.remote.name 1033 name = self.remote.name
1031 1034
@@ -1088,6 +1091,8 @@ class Project(object):
1088 ref_dir = None 1091 ref_dir = None
1089 1092
1090 cmd = ['fetch'] 1093 cmd = ['fetch']
1094 if quiet:
1095 cmd.append('--quiet')
1091 if not self.worktree: 1096 if not self.worktree:
1092 cmd.append('--update-head-ok') 1097 cmd.append('--update-head-ok')
1093 cmd.append(name) 1098 cmd.append(name)
diff --git a/subcmds/sync.py b/subcmds/sync.py
index 6cac2e52..1f4b137f 100644
--- a/subcmds/sync.py
+++ b/subcmds/sync.py
@@ -110,6 +110,9 @@ later is required to fix a server side protocol bug.
110 p.add_option('-d','--detach', 110 p.add_option('-d','--detach',
111 dest='detach_head', action='store_true', 111 dest='detach_head', action='store_true',
112 help='detach projects back to manifest revision') 112 help='detach projects back to manifest revision')
113 p.add_option('-q','--quiet',
114 dest='quiet', action='store_true',
115 help='be more quiet')
113 p.add_option('-j','--jobs', 116 p.add_option('-j','--jobs',
114 dest='jobs', action='store', type='int', 117 dest='jobs', action='store', type='int',
115 help="number of projects to fetch simultaneously") 118 help="number of projects to fetch simultaneously")
@@ -126,8 +129,8 @@ later is required to fix a server side protocol bug.
126 dest='repo_upgraded', action='store_true', 129 dest='repo_upgraded', action='store_true',
127 help=SUPPRESS_HELP) 130 help=SUPPRESS_HELP)
128 131
129 def _FetchHelper(self, project, lock, fetched, pm, sem): 132 def _FetchHelper(self, opt, project, lock, fetched, pm, sem):
130 if not project.Sync_NetworkHalf(): 133 if not project.Sync_NetworkHalf(quiet=opt.quiet):
131 print >>sys.stderr, 'error: Cannot fetch %s' % project.name 134 print >>sys.stderr, 'error: Cannot fetch %s' % project.name
132 sem.release() 135 sem.release()
133 sys.exit(1) 136 sys.exit(1)
@@ -138,14 +141,14 @@ later is required to fix a server side protocol bug.
138 lock.release() 141 lock.release()
139 sem.release() 142 sem.release()
140 143
141 def _Fetch(self, projects): 144 def _Fetch(self, projects, opt):
142 fetched = set() 145 fetched = set()
143 pm = Progress('Fetching projects', len(projects)) 146 pm = Progress('Fetching projects', len(projects))
144 147
145 if self.jobs == 1: 148 if self.jobs == 1:
146 for project in projects: 149 for project in projects:
147 pm.update() 150 pm.update()
148 if project.Sync_NetworkHalf(): 151 if project.Sync_NetworkHalf(quiet=opt.quiet):
149 fetched.add(project.gitdir) 152 fetched.add(project.gitdir)
150 else: 153 else:
151 print >>sys.stderr, 'error: Cannot fetch %s' % project.name 154 print >>sys.stderr, 'error: Cannot fetch %s' % project.name
@@ -157,7 +160,12 @@ later is required to fix a server side protocol bug.
157 for project in projects: 160 for project in projects:
158 sem.acquire() 161 sem.acquire()
159 t = _threading.Thread(target = self._FetchHelper, 162 t = _threading.Thread(target = self._FetchHelper,
160 args = (project, lock, fetched, pm, sem)) 163 args = (opt,
164 project,
165 lock,
166 fetched,
167 pm,
168 sem))
161 threads.add(t) 169 threads.add(t)
162 t.start() 170 t.start()
163 171
@@ -291,7 +299,7 @@ uncommitted changes are present' % project.relpath
291 _PostRepoUpgrade(self.manifest) 299 _PostRepoUpgrade(self.manifest)
292 300
293 if not opt.local_only: 301 if not opt.local_only:
294 mp.Sync_NetworkHalf() 302 mp.Sync_NetworkHalf(quiet=opt.quiet)
295 303
296 if mp.HasChanges: 304 if mp.HasChanges:
297 syncbuf = SyncBuffer(mp.config) 305 syncbuf = SyncBuffer(mp.config)
@@ -308,7 +316,7 @@ uncommitted changes are present' % project.relpath
308 to_fetch.append(rp) 316 to_fetch.append(rp)
309 to_fetch.extend(all) 317 to_fetch.extend(all)
310 318
311 fetched = self._Fetch(to_fetch) 319 fetched = self._Fetch(to_fetch, opt)
312 _PostRepoFetch(rp, opt.no_repo_verify) 320 _PostRepoFetch(rp, opt.no_repo_verify)
313 if opt.network_only: 321 if opt.network_only:
314 # bail out now; the rest touches the working tree 322 # bail out now; the rest touches the working tree
@@ -320,7 +328,7 @@ uncommitted changes are present' % project.relpath
320 for project in all: 328 for project in all:
321 if project.gitdir not in fetched: 329 if project.gitdir not in fetched:
322 missing.append(project) 330 missing.append(project)
323 self._Fetch(missing) 331 self._Fetch(missing, opt)
324 332
325 if self.manifest.IsMirror: 333 if self.manifest.IsMirror:
326 # bail out now, we have no working tree 334 # bail out now, we have no working tree