git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Shawn O. Pearce" <spearce@spearce.org>
To: Junio C Hamano <junkio@cox.net>
Cc: git@vger.kernel.org
Subject: [PATCH 2/2] Display 'theirs' branch name when possible in merge.
Date: Sat, 23 Dec 2006 03:44:47 -0500	[thread overview]
Message-ID: <20061223084447.GB10203@spearce.org> (raw)
In-Reply-To: <6115ec06459724c7c37c355805462cb61715e9c5.1166863413.git.spearce@spearce.org>

Displaying the SHA1 of 'their' branch (the branch being merged into
the current branch) is not nearly as friendly as just displaying
the name of that branch, especially if that branch is already local
to this repository.

git-merge now sets the environment variable 'GITHEAD_%(sha1)=%(name)'
for each argument it gets passed, making the actual input name that
resolved to the commit '%(sha1)' easily available to the invoked
merge strategy.

git-merge-recursive makes use of these environment variables when
they are available by using '%(name)' whenever it outputs the commit
identification rather than '%(sha1)'.  This is most obvious in the
conflict hunks created by xdl_merge:

  $ git mege sideb~1
  <<<<<<< HEAD:INSTALL
     Good!
  =======
     Oops.
  >>>>>>> sideb~1:INSTALL

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
---
 git-merge.sh      |    2 ++
 merge-recursive.c |   17 ++++++++++++++++-
 2 files changed, 18 insertions(+), 1 deletions(-)

diff --git a/git-merge.sh b/git-merge.sh
index a17aa2c..5c2d03b 100755
--- a/git-merge.sh
+++ b/git-merge.sh
@@ -266,6 +266,8 @@ do
 	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
 
diff --git a/merge-recursive.c b/merge-recursive.c
index abebb95..a96821c 100644
--- a/merge-recursive.c
+++ b/merge-recursive.c
@@ -1263,6 +1263,18 @@ static struct commit *get_ref(const char *ref)
 	return (struct commit *)object;
 }
 
+static 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];
@@ -1293,11 +1305,14 @@ int main(int argc, char *argv[])
 
 	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);
-- 
1.4.4.3.g87d8

       reply	other threads:[~2006-12-23  8:44 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <6115ec06459724c7c37c355805462cb61715e9c5.1166863413.git.spearce@spearce.org>
2006-12-23  8:44 ` Shawn O. Pearce [this message]
2006-12-23  9:11   ` [PATCH 2/2] Display 'theirs' branch name when possible in merge Jakub Narebski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20061223084447.GB10203@spearce.org \
    --to=spearce@spearce.org \
    --cc=git@vger.kernel.org \
    --cc=junkio@cox.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).