summaryrefslogtreecommitdiffstats
path: root/subcmds/sync.py
diff options
context:
space:
mode:
Diffstat (limited to 'subcmds/sync.py')
-rw-r--r--subcmds/sync.py55
1 files changed, 41 insertions, 14 deletions
diff --git a/subcmds/sync.py b/subcmds/sync.py
index 5c369a74..e9d52b7b 100644
--- a/subcmds/sync.py
+++ b/subcmds/sync.py
@@ -24,8 +24,19 @@ import socket
24import subprocess 24import subprocess
25import sys 25import sys
26import time 26import time
27import urlparse 27
28import xmlrpclib 28from pyversion import is_python3
29if is_python3():
30 import urllib.parse
31 import xmlrpc.client
32else:
33 import imp
34 import urlparse
35 import xmlrpclib
36 urllib = imp.new_module('urllib')
37 urllib.parse = urlparse
38 xmlrpc = imp.new_module('xmlrpc')
39 xmlrpc.client = xmlrpclib
29 40
30try: 41try:
31 import threading as _threading 42 import threading as _threading
@@ -228,6 +239,9 @@ later is required to fix a server side protocol bug.
228 # We'll set to true once we've locked the lock. 239 # We'll set to true once we've locked the lock.
229 did_lock = False 240 did_lock = False
230 241
242 if not opt.quiet:
243 print('Fetching project %s' % project.name)
244
231 # Encapsulate everything in a try/except/finally so that: 245 # Encapsulate everything in a try/except/finally so that:
232 # - We always set err_event in the case of an exception. 246 # - We always set err_event in the case of an exception.
233 # - We always make sure we call sem.release(). 247 # - We always make sure we call sem.release().
@@ -274,6 +288,8 @@ later is required to fix a server side protocol bug.
274 if self.jobs == 1: 288 if self.jobs == 1:
275 for project in projects: 289 for project in projects:
276 pm.update() 290 pm.update()
291 if not opt.quiet:
292 print('Fetching project %s' % project.name)
277 if project.Sync_NetworkHalf( 293 if project.Sync_NetworkHalf(
278 quiet=opt.quiet, 294 quiet=opt.quiet,
279 current_branch_only=opt.current_branch_only, 295 current_branch_only=opt.current_branch_only,
@@ -372,6 +388,13 @@ later is required to fix a server side protocol bug.
372 print('\nerror: Exited sync due to gc errors', file=sys.stderr) 388 print('\nerror: Exited sync due to gc errors', file=sys.stderr)
373 sys.exit(1) 389 sys.exit(1)
374 390
391 def _ReloadManifest(self, manifest_name=None):
392 if manifest_name:
393 # Override calls _Unload already
394 self.manifest.Override(manifest_name)
395 else:
396 self.manifest._Unload()
397
375 def UpdateProjectList(self): 398 def UpdateProjectList(self):
376 new_project_paths = [] 399 new_project_paths = []
377 for project in self.GetProjects(None, missing_ok=True): 400 for project in self.GetProjects(None, missing_ok=True):
@@ -406,7 +429,7 @@ later is required to fix a server side protocol bug.
406 groups = None) 429 groups = None)
407 430
408 if project.IsDirty(): 431 if project.IsDirty():
409 print('error: Cannot remove project "%s": uncommitted changes' 432 print('error: Cannot remove project "%s": uncommitted changes '
410 'are present' % project.relpath, file=sys.stderr) 433 'are present' % project.relpath, file=sys.stderr)
411 print(' commit changes, then run sync again', 434 print(' commit changes, then run sync again',
412 file=sys.stderr) 435 file=sys.stderr)
@@ -464,13 +487,17 @@ later is required to fix a server side protocol bug.
464 if opt.manifest_name: 487 if opt.manifest_name:
465 self.manifest.Override(opt.manifest_name) 488 self.manifest.Override(opt.manifest_name)
466 489
490 manifest_name = opt.manifest_name
491
467 if opt.smart_sync or opt.smart_tag: 492 if opt.smart_sync or opt.smart_tag:
468 if not self.manifest.manifest_server: 493 if not self.manifest.manifest_server:
469 print('error: cannot smart sync: no manifest server defined in' 494 print('error: cannot smart sync: no manifest server defined in '
470 'manifest', file=sys.stderr) 495 'manifest', file=sys.stderr)
471 sys.exit(1) 496 sys.exit(1)
472 497
473 manifest_server = self.manifest.manifest_server 498 manifest_server = self.manifest.manifest_server
499 if not opt.quiet:
500 print('Using manifest server %s' % manifest_server)
474 501
475 if not '@' in manifest_server: 502 if not '@' in manifest_server:
476 username = None 503 username = None
@@ -486,7 +513,7 @@ later is required to fix a server side protocol bug.
486 file=sys.stderr) 513 file=sys.stderr)
487 else: 514 else:
488 try: 515 try:
489 parse_result = urlparse.urlparse(manifest_server) 516 parse_result = urllib.parse.urlparse(manifest_server)
490 if parse_result.hostname: 517 if parse_result.hostname:
491 username, _account, password = \ 518 username, _account, password = \
492 info.authenticators(parse_result.hostname) 519 info.authenticators(parse_result.hostname)
@@ -504,7 +531,7 @@ later is required to fix a server side protocol bug.
504 1) 531 1)
505 532
506 try: 533 try:
507 server = xmlrpclib.Server(manifest_server) 534 server = xmlrpc.client.Server(manifest_server)
508 if opt.smart_sync: 535 if opt.smart_sync:
509 p = self.manifest.manifestProject 536 p = self.manifest.manifestProject
510 b = p.GetBranch(p.CurrentBranch) 537 b = p.GetBranch(p.CurrentBranch)
@@ -513,8 +540,7 @@ later is required to fix a server side protocol bug.
513 branch = branch[len(R_HEADS):] 540 branch = branch[len(R_HEADS):]
514 541
515 env = os.environ.copy() 542 env = os.environ.copy()
516 if (env.has_key('TARGET_PRODUCT') and 543 if 'TARGET_PRODUCT' in env and 'TARGET_BUILD_VARIANT' in env:
517 env.has_key('TARGET_BUILD_VARIANT')):
518 target = '%s-%s' % (env['TARGET_PRODUCT'], 544 target = '%s-%s' % (env['TARGET_PRODUCT'],
519 env['TARGET_BUILD_VARIANT']) 545 env['TARGET_BUILD_VARIANT'])
520 [success, manifest_str] = server.GetApprovedManifest(branch, target) 546 [success, manifest_str] = server.GetApprovedManifest(branch, target)
@@ -538,15 +564,16 @@ later is required to fix a server side protocol bug.
538 print('error: cannot write manifest to %s' % manifest_path, 564 print('error: cannot write manifest to %s' % manifest_path,
539 file=sys.stderr) 565 file=sys.stderr)
540 sys.exit(1) 566 sys.exit(1)
541 self.manifest.Override(manifest_name) 567 self._ReloadManifest(manifest_name)
542 else: 568 else:
543 print('error: %s' % manifest_str, file=sys.stderr) 569 print('error: manifest server RPC call failed: %s' %
570 manifest_str, file=sys.stderr)
544 sys.exit(1) 571 sys.exit(1)
545 except (socket.error, IOError, xmlrpclib.Fault) as e: 572 except (socket.error, IOError, xmlrpc.client.Fault) as e:
546 print('error: cannot connect to manifest server %s:\n%s' 573 print('error: cannot connect to manifest server %s:\n%s'
547 % (self.manifest.manifest_server, e), file=sys.stderr) 574 % (self.manifest.manifest_server, e), file=sys.stderr)
548 sys.exit(1) 575 sys.exit(1)
549 except xmlrpclib.ProtocolError as e: 576 except xmlrpc.client.ProtocolError as e:
550 print('error: cannot connect to manifest server %s:\n%d %s' 577 print('error: cannot connect to manifest server %s:\n%d %s'
551 % (self.manifest.manifest_server, e.errcode, e.errmsg), 578 % (self.manifest.manifest_server, e.errcode, e.errmsg),
552 file=sys.stderr) 579 file=sys.stderr)
@@ -571,7 +598,7 @@ later is required to fix a server side protocol bug.
571 mp.Sync_LocalHalf(syncbuf) 598 mp.Sync_LocalHalf(syncbuf)
572 if not syncbuf.Finish(): 599 if not syncbuf.Finish():
573 sys.exit(1) 600 sys.exit(1)
574 self.manifest._Unload() 601 self._ReloadManifest(manifest_name)
575 if opt.jobs is None: 602 if opt.jobs is None:
576 self.jobs = self.manifest.default.sync_j 603 self.jobs = self.manifest.default.sync_j
577 all_projects = self.GetProjects(args, 604 all_projects = self.GetProjects(args,
@@ -596,7 +623,7 @@ later is required to fix a server side protocol bug.
596 # Iteratively fetch missing and/or nested unregistered submodules 623 # Iteratively fetch missing and/or nested unregistered submodules
597 previously_missing_set = set() 624 previously_missing_set = set()
598 while True: 625 while True:
599 self.manifest._Unload() 626 self._ReloadManifest(manifest_name)
600 all_projects = self.GetProjects(args, 627 all_projects = self.GetProjects(args,
601 missing_ok=True, 628 missing_ok=True,
602 submodules_ok=opt.fetch_submodules) 629 submodules_ok=opt.fetch_submodules)