From 0628e25d04bed2734091a8354aae7186f490037c Mon Sep 17 00:00:00 2001 From: Sven Strickroth Date: Fri, 19 Aug 2022 21:16:21 +0200 Subject: Fix parsing rev with reflog of HEAD (e.g., HEAD@{3}) Fixes issue #6156. Signed-off-by: Sven Strickroth --- src/libgit2/revparse.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/libgit2') diff --git a/src/libgit2/revparse.c b/src/libgit2/revparse.c index 2ed282159..255c566ca 100644 --- a/src/libgit2/revparse.c +++ b/src/libgit2/revparse.c @@ -268,7 +268,11 @@ 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) + if (position > 0 && + (!strcmp(identifier, "HEAD"))) { + if ((error = git_reference_lookup(&ref, repo, "HEAD")) < 0) + return error; + } else if ((error = git_reference_dwim(&ref, repo, identifier)) < 0) return error; } else { ref = *base_ref; -- cgit v1.2.1 From c1634611dde3feee874c0be545cbc1107caa2f29 Mon Sep 17 00:00:00 2001 From: Edward Thomson Date: Tue, 14 Feb 2023 11:59:42 +0000 Subject: revparse: comment reflog HEAD@{n} parsing --- src/libgit2/revparse.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'src/libgit2') diff --git a/src/libgit2/revparse.c b/src/libgit2/revparse.c index 255c566ca..780f1a0cb 100644 --- a/src/libgit2/revparse.c +++ b/src/libgit2/revparse.c @@ -268,11 +268,16 @@ static int retrieve_revobject_from_reflog(git_object **out, git_reference **base int error = -1; if (*base_ref == NULL) { - if (position > 0 && - (!strcmp(identifier, "HEAD"))) { - if ((error = git_reference_lookup(&ref, repo, "HEAD")) < 0) - return error; - } else 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; -- cgit v1.2.1