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) |
