diff options
| author | Mike Frysinger <vapier@google.com> | 2022-08-19 05:16:46 -0400 |
|---|---|---|
| committer | Mike Frysinger <vapier@google.com> | 2022-08-22 20:47:50 +0000 |
| commit | a010a9f4a061acad3996bc43cf25bbf6c21d4223 (patch) | |
| tree | 85a8def80f740c92591fdfe2deaf0a68aae67faf | |
| parent | 8a54a7eac38070abf948524805b11e91471de401 (diff) | |
| download | git-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-x | repo | 7 |
1 files changed, 6 insertions, 1 deletions
| @@ -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: |
