diff options
| author | Junio C Hamano <gitster@pobox.com> | 2024-08-26 11:10:18 -0700 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2024-08-26 11:10:18 -0700 |
| commit | a991ffff929e75509eb3bc4012cc43a2e6994f90 (patch) | |
| tree | 4056ef07d9a1de0e08d99ce12ad48e81e63ab3de | |
| parent | 87f8426bf7f88d3a5424c486ff4e5fc4b1aa40ab (diff) | |
| parent | 9e89dcb66a70902fef966083998a75272d47d998 (diff) | |
| download | git-a991ffff929e75509eb3bc4012cc43a2e6994f90.tar.gz | |
Merge branch 'ps/ls-remote-out-of-repo-fix' into maint-2.46
A recent update broke "git ls-remote" used outside a repository,
which has been corrected.
* ps/ls-remote-out-of-repo-fix:
builtin/ls-remote: fall back to SHA1 outside of a repo
| -rw-r--r-- | builtin/ls-remote.c | 15 | ||||
| -rwxr-xr-x | t/t5512-ls-remote.sh | 13 |
2 files changed, 28 insertions, 0 deletions
diff --git a/builtin/ls-remote.c b/builtin/ls-remote.c index debf2d4f88..6da63a67f5 100644 --- a/builtin/ls-remote.c +++ b/builtin/ls-remote.c @@ -91,6 +91,21 @@ int cmd_ls_remote(int argc, const char **argv, const char *prefix) PARSE_OPT_STOP_AT_NON_OPTION); dest = argv[0]; + /* + * TODO: This is buggy, but required for transport helpers. When a + * transport helper advertises a "refspec", then we'd add that to a + * list of refspecs via `refspec_append()`, which transitively depends + * on `the_hash_algo`. Thus, when the hash algorithm isn't properly set + * up, this would lead to a segfault. + * + * We really should fix this in the transport helper logic such that we + * lazily parse refspec capabilities _after_ we have learned about the + * remote's object format. Otherwise, we may end up misparsing refspecs + * depending on what object hash the remote uses. + */ + if (!the_repository->hash_algo) + repo_set_hash_algo(the_repository, GIT_HASH_SHA1); + packet_trace_identity("ls-remote"); if (argc > 1) { diff --git a/t/t5512-ls-remote.sh b/t/t5512-ls-remote.sh index 42e77eb5a9..bc442ec221 100755 --- a/t/t5512-ls-remote.sh +++ b/t/t5512-ls-remote.sh @@ -402,4 +402,17 @@ test_expect_success 'v0 clients can handle multiple symrefs' ' test_cmp expect actual ' +test_expect_success 'helper with refspec capability fails gracefully' ' + mkdir test-bin && + write_script test-bin/git-remote-foo <<-EOF && + echo import + echo refspec ${SQ}*:*${SQ} + EOF + ( + PATH="$PWD/test-bin:$PATH" && + export PATH && + test_must_fail nongit git ls-remote foo::bar + ) +' + test_done |
