summaryrefslogtreecommitdiffstats
path: root/repo
diff options
context:
space:
mode:
Diffstat (limited to 'repo')
-rwxr-xr-xrepo50
1 files changed, 30 insertions, 20 deletions
diff --git a/repo b/repo
index c78fcacd..66a2a07d 100755
--- a/repo
+++ b/repo
@@ -463,6 +463,34 @@ class CloneFailure(Exception):
463 """ 463 """
464 464
465 465
466def 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
480def 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
466def _Init(args, gitc_init=False): 494def _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
910def _Verify(cwd, remote_ref, rev, quiet): 920def 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()