diff options
Diffstat (limited to 'subcmds/sync.py')
-rw-r--r-- | subcmds/sync.py | 55 |
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 | |||
24 | import subprocess | 24 | import subprocess |
25 | import sys | 25 | import sys |
26 | import time | 26 | import time |
27 | import urlparse | 27 | |
28 | import xmlrpclib | 28 | from pyversion import is_python3 |
29 | if is_python3(): | ||
30 | import urllib.parse | ||
31 | import xmlrpc.client | ||
32 | else: | ||
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 | ||
30 | try: | 41 | try: |
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) |