summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2023-02-14 12:01:04 +0000
committerEdward Thomson <ethomson@edwardthomson.com>2023-02-14 12:01:04 +0000
commit3b43c9d33597b11bc7fdf3bcfe3b21bfeff95e15 (patch)
tree748b1a5e91f2e333e6f4b203308f8059f124da88
parent632fe77d118ef4062aee031261bad08afaf257cf (diff)
parentc1634611dde3feee874c0be545cbc1107caa2f29 (diff)
downloadlibgit2-3b43c9d33597b11bc7fdf3bcfe3b21bfeff95e15.tar.gz
Merge branch 'revparse'
-rw-r--r--src/libgit2/revparse.c11
-rw-r--r--tests/libgit2/refs/revparse.c3
2 files changed, 13 insertions, 1 deletions
diff --git a/src/libgit2/revparse.c b/src/libgit2/revparse.c
index 2ed282159..780f1a0cb 100644
--- a/src/libgit2/revparse.c
+++ b/src/libgit2/revparse.c
@@ -268,7 +268,16 @@ static int retrieve_revobject_from_reflog(git_object **out, git_reference **base
int error = -1;
if (*base_ref == NULL) {
- if ((error = git_reference_dwim(&ref, repo, identifier)) < 0)
+ /*
+ * When HEAD@{n} is specified, do not use dwim, which would resolve the
+ * reference (to the current branch that HEAD is pointing to).
+ */
+ if (position > 0 && strcmp(identifier, GIT_HEAD_FILE) == 0)
+ error = git_reference_lookup(&ref, repo, GIT_HEAD_FILE);
+ else
+ error = git_reference_dwim(&ref, repo, identifier);
+
+ if (error < 0)
return error;
} else {
ref = *base_ref;
diff --git a/tests/libgit2/refs/revparse.c b/tests/libgit2/refs/revparse.c
index 02ffe005d..d2f464840 100644
--- a/tests/libgit2/refs/revparse.c
+++ b/tests/libgit2/refs/revparse.c
@@ -304,6 +304,9 @@ void test_refs_revparse__ordinal(void)
test_object("@{0}", "a65fedf39aefe402d3bb6e24df4d4f5fe4547750");
test_object("@{1}", "be3563ae3f795b2b4353bcce3a527ad0a4f7f644");
+ test_object("HEAD@{0}", "a65fedf39aefe402d3bb6e24df4d4f5fe4547750");
+ test_object("HEAD@{4}", "5b5b025afb0b4c913b4c338a42934a3863bf3644");
+
test_object("master@{0}", "a65fedf39aefe402d3bb6e24df4d4f5fe4547750");
test_object("master@{1}", "be3563ae3f795b2b4353bcce3a527ad0a4f7f644");
test_object("heads/master@{1}", "be3563ae3f795b2b4353bcce3a527ad0a4f7f644");