Merge branch 'jk/clone-clean-upon-transport-error'
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
This commit is contained in:
@ -1320,9 +1320,8 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!is_local && !complete_refs_before_fetch) {
|
if (!is_local && !complete_refs_before_fetch) {
|
||||||
err = transport_fetch_refs(transport, mapped_refs);
|
if (transport_fetch_refs(transport, mapped_refs))
|
||||||
if (err)
|
die(_("remote transport reported error"));
|
||||||
goto cleanup;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
remote_head = find_ref_by_name(refs, "HEAD");
|
remote_head = find_ref_by_name(refs, "HEAD");
|
||||||
@ -1380,9 +1379,8 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
|
|||||||
if (is_local)
|
if (is_local)
|
||||||
clone_local(path, git_dir);
|
clone_local(path, git_dir);
|
||||||
else if (refs && complete_refs_before_fetch) {
|
else if (refs && complete_refs_before_fetch) {
|
||||||
err = transport_fetch_refs(transport, mapped_refs);
|
if (transport_fetch_refs(transport, mapped_refs))
|
||||||
if (err)
|
die(_("remote transport reported error"));
|
||||||
goto cleanup;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
update_remote_refs(refs, mapped_refs, remote_head_points_at,
|
update_remote_refs(refs, mapped_refs, remote_head_points_at,
|
||||||
@ -1410,7 +1408,6 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
|
|||||||
junk_mode = JUNK_LEAVE_REPO;
|
junk_mode = JUNK_LEAVE_REPO;
|
||||||
err = checkout(submodule_progress);
|
err = checkout(submodule_progress);
|
||||||
|
|
||||||
cleanup:
|
|
||||||
free(remote_name);
|
free(remote_name);
|
||||||
strbuf_release(&reflog_msg);
|
strbuf_release(&reflog_msg);
|
||||||
strbuf_release(&branch_top);
|
strbuf_release(&branch_top);
|
||||||
|
@ -97,4 +97,11 @@ test_expect_success 'failed clone into empty leaves directory (separate, wt)' '
|
|||||||
test_dir_is_empty empty-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
|
test_done
|
||||||
|
Reference in New Issue
Block a user