diff options
| author | Junio C Hamano <gitster@pobox.com> | 2018-07-24 14:50:49 -0700 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2018-07-24 14:50:49 -0700 |
| commit | 53cae9e0f8d793c7e180f79b86ea2745c59f9bee (patch) | |
| tree | d3f05ea6ec5784f6788a68076f7b326fa38df768 | |
| parent | Merge branch 'jc/t3404-one-shot-export-fix' (diff) | |
| parent | sha1-name.c: for ":/", find detached HEAD commits (diff) | |
| download | git-53cae9e0f8d793c7e180f79b86ea2745c59f9bee.tar.gz git-53cae9e0f8d793c7e180f79b86ea2745c59f9bee.zip | |
Merge branch 'wc/find-commit-with-pattern-on-detached-head'
"git rev-parse ':/substring'" did not consider the history leading
only to HEAD when looking for a commit with the given substring,
when the HEAD is detached. This has been fixed.
* wc/find-commit-with-pattern-on-detached-head:
sha1-name.c: for ":/", find detached HEAD commits
| -rw-r--r-- | Documentation/revisions.txt | 3 | ||||
| -rw-r--r-- | sha1-name.c | 1 | ||||
| -rwxr-xr-x | t/t4208-log-magic-pathspec.sh | 26 |
3 files changed, 29 insertions, 1 deletions
diff --git a/Documentation/revisions.txt b/Documentation/revisions.txt index 7d1bd44094..72daa20e76 100644 --- a/Documentation/revisions.txt +++ b/Documentation/revisions.txt @@ -184,7 +184,8 @@ existing tag object. A colon, followed by a slash, followed by a text, names a commit whose commit message matches the specified regular expression. This name returns the youngest matching commit which is - reachable from any ref. The regular expression can match any part of the + reachable from any ref, including HEAD. + The regular expression can match any part of the commit message. To match messages starting with a string, one can use e.g. ':/^foo'. The special sequence ':/!' is reserved for modifiers to what is matched. ':/!-foo' performs a negative match, while ':/!!foo' matches a diff --git a/sha1-name.c b/sha1-name.c index 60d9ef3c7e..641ca12f91 100644 --- a/sha1-name.c +++ b/sha1-name.c @@ -1650,6 +1650,7 @@ static int get_oid_with_context_1(const char *name, struct commit_list *list = NULL; for_each_ref(handle_one_ref, &list); + head_ref(handle_one_ref, &list); commit_list_sort_by_date(&list); return get_oid_oneline(name + 2, oid, list); } diff --git a/t/t4208-log-magic-pathspec.sh b/t/t4208-log-magic-pathspec.sh index 62f335b2d9..4c8f3b8e1b 100755 --- a/t/t4208-log-magic-pathspec.sh +++ b/t/t4208-log-magic-pathspec.sh @@ -25,6 +25,32 @@ test_expect_success '"git log :/a -- " should not be ambiguous' ' git log :/a -- ' +test_expect_success '"git log :/detached -- " should find a commit only in HEAD' ' + test_when_finished "git checkout master" && + git checkout --detach && + # Must manually call `test_tick` instead of using `test_commit`, + # because the latter additionally creates a tag, which would make + # the commit reachable not only via HEAD. + test_tick && + git commit --allow-empty -m detached && + test_tick && + git commit --allow-empty -m something-else && + git log :/detached -- +' + +test_expect_success '"git log :/detached -- " should not find an orphaned commit' ' + test_must_fail git log :/detached -- +' + +test_expect_success '"git log :/detached -- " should find HEAD only of own worktree' ' + git worktree add other-tree HEAD && + git -C other-tree checkout --detach && + test_tick && + git -C other-tree commit --allow-empty -m other-detached && + git -C other-tree log :/other-detached -- && + test_must_fail git log :/other-detached -- +' + test_expect_success '"git log -- :/a" should not be ambiguous' ' git log -- :/a ' |
