Commits

Anonymous committed e036c90 Merge

Merge branch 'sb/merge-friendly'

* sb/merge-friendly:
Display 'theirs' branch name when possible in merge.
Use extended SHA1 syntax in merge-recursive conflicts.

Comments (0)

Files changed (3)

 	remotehead=$(git-rev-parse --verify "$remote"^0 2>/dev/null) ||
 	    die "$remote - not something we can merge"
 	remoteheads="${remoteheads}$remotehead "
+	eval GITHEAD_$remotehead='"$remote"'
+	export GITHEAD_$remotehead
 done
 set x $remoteheads ; shift
 

merge-recursive.c

 			char *name1, *name2;
 			int merge_status;
 
-			name1 = xstrdup(mkpath("%s/%s", branch1, a->path));
-			name2 = xstrdup(mkpath("%s/%s", branch2, b->path));
+			name1 = xstrdup(mkpath("%s:%s", branch1, a->path));
+			name2 = xstrdup(mkpath("%s:%s", branch2, b->path));
 
 			fill_mm(o->sha1, &orig);
 			fill_mm(a->sha1, &src1);
 	return (struct commit *)object;
 }
 
+static const char *better_branch_name(const char *branch)
+{
+	static char githead_env[8 + 40 + 1];
+	char *name;
+
+	if (strlen(branch) != 40)
+		return branch;
+	sprintf(githead_env, "GITHEAD_%s", branch);
+	name = getenv(githead_env);
+	return name ? name : branch;
+}
+
 int main(int argc, char *argv[])
 {
 	static const char *bases[2];
 
 	branch1 = argv[++i];
 	branch2 = argv[++i];
-	printf("Merging %s with %s\n", branch1, branch2);
 
 	h1 = get_ref(branch1);
 	h2 = get_ref(branch2);
 
+	branch1 = better_branch_name(branch1);
+	branch2 = better_branch_name(branch2);
+	printf("Merging %s with %s\n", branch1, branch2);
+
 	if (bases_count == 1) {
 		struct commit *ancestor = get_ref(bases[0]);
 		clean = merge(h1, h2, branch1, branch2, 0, ancestor, &result);

t/t6024-recursive-merge.sh

 test_expect_failure "combined merge conflicts" "git merge -m final G"
 
 cat > expect << EOF
-<<<<<<< HEAD/a1
+<<<<<<< HEAD:a1
 F
 =======
 G
->>>>>>> 26f86b677eb03d4d956dbe108b29cb77061c1e73/a1
+>>>>>>> G:a1
 EOF
 
 test_expect_success "result contains a conflict" "diff -u expect a1"
 
 git ls-files --stage > out
 cat > expect << EOF
-100644 f16f906ab60483c100d1241dfc39868de9ec9fcb 1	a1
+100644 da056ce14a2241509897fa68bb2b3b6e6194ef9e 1	a1
 100644 cf84443e49e1b366fac938711ddf4be2d4d1d9e9 2	a1
 100644 fd7923529855d0b274795ae3349c5e0438333979 3	a1
 EOF