diff options
Diffstat (limited to 'repo')
-rwxr-xr-x | repo | 50 |
1 files changed, 30 insertions, 20 deletions
@@ -463,6 +463,34 @@ class CloneFailure(Exception): | |||
463 | """ | 463 | """ |
464 | 464 | ||
465 | 465 | ||
466 | def check_repo_verify(repo_verify, quiet=False): | ||
467 | """Check the --repo-verify state.""" | ||
468 | if not repo_verify: | ||
469 | print('repo: warning: verification of repo code has been disabled;\n' | ||
470 | 'repo will not be able to verify the integrity of itself.\n', | ||
471 | file=sys.stderr) | ||
472 | return False | ||
473 | |||
474 | if NeedSetupGnuPG(): | ||
475 | return SetupGnuPG(quiet) | ||
476 | |||
477 | return True | ||
478 | |||
479 | |||
480 | def check_repo_rev(dst, rev, repo_verify=True, quiet=False): | ||
481 | """Check that |rev| is valid.""" | ||
482 | do_verify = check_repo_verify(repo_verify, quiet=quiet) | ||
483 | remote_ref, local_rev = resolve_repo_rev(dst, rev) | ||
484 | if not quiet and not remote_ref.startswith('refs/heads/'): | ||
485 | print('warning: repo is not tracking a remote branch, so it will not ' | ||
486 | 'receive updates', file=sys.stderr) | ||
487 | if do_verify: | ||
488 | rev = verify_rev(dst, remote_ref, local_rev, quiet) | ||
489 | else: | ||
490 | rev = local_rev | ||
491 | return (remote_ref, rev) | ||
492 | |||
493 | |||
466 | def _Init(args, gitc_init=False): | 494 | def _Init(args, gitc_init=False): |
467 | """Installs repo by cloning it over the network. | 495 | """Installs repo by cloning it over the network. |
468 | """ | 496 | """ |
@@ -510,30 +538,12 @@ def _Init(args, gitc_init=False): | |||
510 | 538 | ||
511 | _CheckGitVersion() | 539 | _CheckGitVersion() |
512 | try: | 540 | try: |
513 | if not opt.repo_verify: | ||
514 | do_verify = False | ||
515 | print('repo: warning: verification of repo code has been disabled;\n' | ||
516 | 'repo will not be able to verify the integrity of itself.\n', | ||
517 | file=sys.stderr) | ||
518 | else: | ||
519 | if NeedSetupGnuPG(): | ||
520 | do_verify = SetupGnuPG(opt.quiet) | ||
521 | else: | ||
522 | do_verify = True | ||
523 | |||
524 | if not opt.quiet: | 541 | if not opt.quiet: |
525 | print('Downloading Repo source from', url) | 542 | print('Downloading Repo source from', url) |
526 | dst = os.path.abspath(os.path.join(repodir, S_repo)) | 543 | dst = os.path.abspath(os.path.join(repodir, S_repo)) |
527 | _Clone(url, dst, opt.clone_bundle, opt.quiet, opt.verbose) | 544 | _Clone(url, dst, opt.clone_bundle, opt.quiet, opt.verbose) |
528 | 545 | ||
529 | remote_ref, local_rev = resolve_repo_rev(dst, rev) | 546 | remote_ref, rev = check_repo_rev(dst, rev, opt.repo_verify, quiet=opt.quiet) |
530 | if not opt.quiet and not remote_ref.startswith('refs/heads/'): | ||
531 | print('warning: repo is not tracking a remote branch, so it will not ' | ||
532 | 'receive updates', file=sys.stderr) | ||
533 | if do_verify: | ||
534 | rev = _Verify(dst, remote_ref, local_rev, opt.quiet) | ||
535 | else: | ||
536 | rev = local_rev | ||
537 | _Checkout(dst, remote_ref, rev, opt.quiet) | 547 | _Checkout(dst, remote_ref, rev, opt.quiet) |
538 | 548 | ||
539 | if not os.path.isfile(os.path.join(dst, 'repo')): | 549 | if not os.path.isfile(os.path.join(dst, 'repo')): |
@@ -907,7 +917,7 @@ def resolve_repo_rev(cwd, committish): | |||
907 | raise CloneFailure() | 917 | raise CloneFailure() |
908 | 918 | ||
909 | 919 | ||
910 | def _Verify(cwd, remote_ref, rev, quiet): | 920 | def verify_rev(cwd, remote_ref, rev, quiet): |
911 | """Verify the commit has been signed by a tag.""" | 921 | """Verify the commit has been signed by a tag.""" |
912 | ret = run_git('describe', rev, cwd=cwd) | 922 | ret = run_git('describe', rev, cwd=cwd) |
913 | cur = ret.stdout.strip() | 923 | cur = ret.stdout.strip() |