mirror of
https://github.com/git/git
synced 2024-11-04 16:17:49 +00:00
57fb139b5e
When calling `get_oid_oneline()`, we pass in a `struct commit_list` that gets modified by the function. This creates a weird situation where the commit list may sometimes be empty after returning, but sometimes it will continue to carry additional commits. In those cases the remainder of the list leaks. Ultimately, the design where we only pass partial ownership to `get_oid_oneline()` feels shoddy. Refactor the code such that we only pass a constant pointer to the list, creating a local copy as needed. Callers are thus always responsible for freeing the commit list, which then allows us to plug a bunch of memory leaks. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
50 lines
1.1 KiB
Bash
Executable file
50 lines
1.1 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
test_description='test dwim of revs versus pathspecs in revision parser'
|
|
|
|
TEST_PASSES_SANITIZE_LEAK=true
|
|
. ./test-lib.sh
|
|
|
|
test_expect_success 'setup' '
|
|
test_commit base &&
|
|
echo content >"br[ack]ets" &&
|
|
git add . &&
|
|
test_tick &&
|
|
git commit -m brackets
|
|
'
|
|
|
|
test_expect_success 'non-rev wildcard dwims to pathspec' '
|
|
git log -- "*.t" >expect &&
|
|
git log "*.t" >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'tree:path with metacharacters dwims to rev' '
|
|
git show "HEAD:br[ack]ets" -- >expect &&
|
|
git show "HEAD:br[ack]ets" >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success '^{foo} with metacharacters dwims to rev' '
|
|
git log "HEAD^{/b.*}" -- >expect &&
|
|
git log "HEAD^{/b.*}" >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success '@{foo} with metacharacters dwims to rev' '
|
|
git log "HEAD@{now [or thereabouts]}" -- >expect &&
|
|
git log "HEAD@{now [or thereabouts]}" >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success ':/*.t from a subdir dwims to a pathspec' '
|
|
mkdir subdir &&
|
|
(
|
|
cd subdir &&
|
|
git log -- ":/*.t" >expect &&
|
|
git log ":/*.t" >actual &&
|
|
test_cmp expect actual
|
|
)
|
|
'
|
|
|
|
test_done
|