Improve libgit2 patch
[TortoiseGit.git] / ext / libgit2-Fix-parsing-rev-with-reflog-of-HEAD-e.g.-HEAD-3.patch
blob0920d26ef87337cf2299d21933823a3a266ef90a
1 From 0f41ad548de58604e4b415729ef3eeb8862d0c45 Mon Sep 17 00:00:00 2001
2 From: Sven Strickroth <email@cs-ware.de>
3 Date: Fri, 19 Aug 2022 21:16:21 +0200
4 Subject: [PATCH] Fix parsing rev with reflog of HEAD (e.g., HEAD@{3})
6 Fixes issue #6156.
8 Signed-off-by: Sven Strickroth <email@cs-ware.de>
9 ---
10 src/libgit2/revparse.c | 6 +++++-
11 tests/libgit2/refs/revparse.c | 3 +++
12 2 files changed, 8 insertions(+), 1 deletion(-)
14 diff --git a/src/libgit2/revparse.c b/src/libgit2/revparse.c
15 index 2ed282159..255c566ca 100644
16 --- a/src/libgit2/revparse.c
17 +++ b/src/libgit2/revparse.c
18 @@ -268,7 +268,11 @@ static int retrieve_revobject_from_reflog(git_object **out, git_reference **base
19 int error = -1;
21 if (*base_ref == NULL) {
22 - if ((error = git_reference_dwim(&ref, repo, identifier)) < 0)
23 + if (position > 0 &&
24 + (!strcmp(identifier, "HEAD"))) {
25 + if ((error = git_reference_lookup(&ref, repo, "HEAD")) < 0)
26 + return error;
27 + } else if ((error = git_reference_dwim(&ref, repo, identifier)) < 0)
28 return error;
29 } else {
30 ref = *base_ref;
31 diff --git a/tests/libgit2/refs/revparse.c b/tests/libgit2/refs/revparse.c
32 index 02ffe005d..d2f464840 100644
33 --- a/tests/libgit2/refs/revparse.c
34 +++ b/tests/libgit2/refs/revparse.c
35 @@ -304,6 +304,9 @@ void test_refs_revparse__ordinal(void)
36 test_object("@{0}", "a65fedf39aefe402d3bb6e24df4d4f5fe4547750");
37 test_object("@{1}", "be3563ae3f795b2b4353bcce3a527ad0a4f7f644");
39 + test_object("HEAD@{0}", "a65fedf39aefe402d3bb6e24df4d4f5fe4547750");
40 + test_object("HEAD@{4}", "5b5b025afb0b4c913b4c338a42934a3863bf3644");
42 test_object("master@{0}", "a65fedf39aefe402d3bb6e24df4d4f5fe4547750");
43 test_object("master@{1}", "be3563ae3f795b2b4353bcce3a527ad0a4f7f644");
44 test_object("heads/master@{1}", "be3563ae3f795b2b4353bcce3a527ad0a4f7f644");
45 --
46 2.39.0.windows.2