Skip to content

Commit f4f7304

Browse files
committed
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
2 parents 1359972 + 6aacb7d commit f4f7304

File tree

2 files changed

+11
-7
lines changed

2 files changed

+11
-7
lines changed

builtin/clone.c

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1320,9 +1320,8 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
13201320
}
13211321

13221322
if (!is_local && !complete_refs_before_fetch) {
1323-
err = transport_fetch_refs(transport, mapped_refs);
1324-
if (err)
1325-
goto cleanup;
1323+
if (transport_fetch_refs(transport, mapped_refs))
1324+
die(_("remote transport reported error"));
13261325
}
13271326

13281327
remote_head = find_ref_by_name(refs, "HEAD");
@@ -1380,9 +1379,8 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
13801379
if (is_local)
13811380
clone_local(path, git_dir);
13821381
else if (refs && complete_refs_before_fetch) {
1383-
err = transport_fetch_refs(transport, mapped_refs);
1384-
if (err)
1385-
goto cleanup;
1382+
if (transport_fetch_refs(transport, mapped_refs))
1383+
die(_("remote transport reported error"));
13861384
}
13871385

13881386
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)
14101408
junk_mode = JUNK_LEAVE_REPO;
14111409
err = checkout(submodule_progress);
14121410

1413-
cleanup:
14141411
free(remote_name);
14151412
strbuf_release(&reflog_msg);
14161413
strbuf_release(&branch_top);

t/t5600-clone-fail-cleanup.sh

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,4 +97,11 @@ test_expect_success 'failed clone into empty leaves directory (separate, wt)' '
9797
test_dir_is_empty empty-wt
9898
'
9999

100+
test_expect_success 'transport failure cleans up directory' '
101+
test_must_fail git clone --no-local \
102+
-u "f() { git-upload-pack \"\$@\"; return 1; }; f" \
103+
foo broken-clone &&
104+
test_path_is_missing broken-clone
105+
'
106+
100107
test_done

0 commit comments

Comments
 (0)