Skip to content

Commit

Permalink
Merge branch 'jk/clone-clean-upon-transport-error' into jch
Browse files Browse the repository at this point in the history
Recent "git clone" left a temporary directory behind when the
transport layer returned an failure.

* jk/clone-clean-upon-transport-error:
  clone: clean up directory after transport_fetch_refs() failure
  • Loading branch information
gitster committed May 25, 2021
2 parents 293d8c5 + 6aacb7d commit 58efa54
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 7 deletions.
11 changes: 4 additions & 7 deletions builtin/clone.c
Original file line number Diff line number Diff line change
Expand Up @@ -1320,9 +1320,8 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
}

if (!is_local && !complete_refs_before_fetch) {
err = transport_fetch_refs(transport, mapped_refs);
if (err)
goto cleanup;
if (transport_fetch_refs(transport, mapped_refs))
die(_("remote transport reported error"));
}

remote_head = find_ref_by_name(refs, "HEAD");
Expand Down Expand Up @@ -1380,9 +1379,8 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
if (is_local)
clone_local(path, git_dir);
else if (refs && complete_refs_before_fetch) {
err = transport_fetch_refs(transport, mapped_refs);
if (err)
goto cleanup;
if (transport_fetch_refs(transport, mapped_refs))
die(_("remote transport reported error"));
}

update_remote_refs(refs, mapped_refs, remote_head_points_at,
Expand Down Expand Up @@ -1410,7 +1408,6 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
junk_mode = JUNK_LEAVE_REPO;
err = checkout(submodule_progress);

cleanup:
free(remote_name);
strbuf_release(&reflog_msg);
strbuf_release(&branch_top);
Expand Down
7 changes: 7 additions & 0 deletions t/t5600-clone-fail-cleanup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -97,4 +97,11 @@ test_expect_success 'failed clone into empty leaves directory (separate, wt)' '
test_dir_is_empty empty-wt
'

test_expect_success 'transport failure cleans up directory' '
test_must_fail git clone --no-local \
-u "f() { git-upload-pack \"\$@\"; return 1; }; f" \
foo broken-clone &&
test_path_is_missing broken-clone
'

test_done

0 comments on commit 58efa54

Please sign in to comment.