Thread (6 messages) flat view 6 messages, 2 authors, 2016-06-15

Re: git bug(?) for commit baf18fc261ca475343fe3cb9cd2c0dded4bc1bb7

From: Nguyen Thai Ngoc Duy <hidden>
Date: 2016-06-15 22:52:24
Subsystem: the rest · Maintainer: Linus Torvalds

On Mon, Nov 07, 2011 at 05:48:25PM +0800, Tony Wang wrote:
quoted
It was on purpose. HEAD may contain a tag, in which case
lookup_commit() would to return a commit fail while
lookup_commit_reference() can peel the tag to the commit.
However, I tried to make it lookup_commit and it worked as expected. I'll try to read some detail. 
and the strange value of branch "s/origin/b" in your previous message..
quoted
quoted
I tried to debug, and found after this
merge.c:1104
head_commit = lookup_commit_or_die(head_sha1, "HEAD");
the variable branch becomes "s/origin/b", which is previously "b".
..led me to think that it's because branch points to the static buffer
returned by by resolve_ref().

lookup_commit_reference() may call resolve_ref() again and change the
buffer value, which also changes "branch" variable.

So, does this help?

-- 8< --
diff --git a/builtin/merge.c b/builtin/merge.c
index 581f494..4f20833 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c
@@ -1029,7 +1029,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
 	 * Check if we are _not_ on a detached HEAD, i.e. if there is a
 	 * current branch.
 	 */
-	branch = resolve_ref("HEAD", head_sha1, 0, &flag);
+	branch = xstrdup(resolve_ref("HEAD", head_sha1, 0, &flag));
 	if (branch && !prefixcmp(branch, "refs/heads/"))
 		branch += 11;
 	if (!branch || is_null_sha1(head_sha1))
-- 8< --
-- 
Duy
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help