summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Frysinger <vapier@google.com>2022-08-19 05:16:46 -0400
committerMike Frysinger <vapier@google.com>2022-08-22 20:47:50 +0000
commita010a9f4a061acad3996bc43cf25bbf6c21d4223 (patch)
tree85a8def80f740c92591fdfe2deaf0a68aae67faf
parent8a54a7eac38070abf948524805b11e91471de401 (diff)
downloadgit-repo-a010a9f4a061acad3996bc43cf25bbf6c21d4223.tar.gz
launcher: initialize repo in a temp dir
In case something goes wrong in the initial setup of the repo dir, clone it into a temporary .repo/repo.tmp/ directory first, and then rename it only when things have finished fully. Bug: https://crbug.com/gerrit/13526 Change-Id: Ib0f5a975e4d436b0fb616fac70f5789c4e02a61a Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/343537 Reviewed-by: LaMont Jones <lamontjones@google.com> Tested-by: Mike Frysinger <vapier@google.com>
-rwxr-xr-xrepo7
1 files changed, 6 insertions, 1 deletions
diff --git a/repo b/repo
index e97cdd7d..c40e8add 100755
--- a/repo
+++ b/repo
@@ -615,7 +615,9 @@ def _Init(args, gitc_init=False):
615 try: 615 try:
616 if not opt.quiet: 616 if not opt.quiet:
617 print('Downloading Repo source from', url) 617 print('Downloading Repo source from', url)
618 dst = os.path.abspath(os.path.join(repodir, S_repo)) 618 dst_final = os.path.abspath(os.path.join(repodir, S_repo))
619 dst = dst_final + '.tmp'
620 shutil.rmtree(dst, ignore_errors=True)
619 _Clone(url, dst, opt.clone_bundle, opt.quiet, opt.verbose) 621 _Clone(url, dst, opt.clone_bundle, opt.quiet, opt.verbose)
620 622
621 remote_ref, rev = check_repo_rev(dst, rev, opt.repo_verify, quiet=opt.quiet) 623 remote_ref, rev = check_repo_rev(dst, rev, opt.repo_verify, quiet=opt.quiet)
@@ -625,6 +627,8 @@ def _Init(args, gitc_init=False):
625 print("warning: '%s' does not look like a git-repo repository, is " 627 print("warning: '%s' does not look like a git-repo repository, is "
626 "REPO_URL set correctly?" % url, file=sys.stderr) 628 "REPO_URL set correctly?" % url, file=sys.stderr)
627 629
630 os.rename(dst, dst_final)
631
628 except CloneFailure: 632 except CloneFailure:
629 print('fatal: double check your --repo-rev setting.', file=sys.stderr) 633 print('fatal: double check your --repo-rev setting.', file=sys.stderr)
630 if opt.quiet: 634 if opt.quiet:
@@ -1320,6 +1324,7 @@ def main(orig_args):
1320 print("fatal: cloning the git-repo repository failed, will remove " 1324 print("fatal: cloning the git-repo repository failed, will remove "
1321 "'%s' " % path, file=sys.stderr) 1325 "'%s' " % path, file=sys.stderr)
1322 shutil.rmtree(path, ignore_errors=True) 1326 shutil.rmtree(path, ignore_errors=True)
1327 shutil.rmtree(path + '.tmp', ignore_errors=True)
1323 sys.exit(1) 1328 sys.exit(1)
1324 repo_main, rel_repo_dir = _FindRepo() 1329 repo_main, rel_repo_dir = _FindRepo()
1325 else: 1330 else: