diff options
| author | Junio C Hamano <junkio@cox.net> | 2005-09-22 00:55:22 -0700 | 
|---|---|---|
| committer | Junio C Hamano <junkio@cox.net> | 2005-09-22 18:09:07 -0700 | 
| commit | c8b48ba4767ff9da19ef4f41f8d870f11742d833 (patch) | |
| tree | 3d0e6f09fd3189d9b684d064529eb81c5128a517 | |
| parent | f8ff0c0641a14770a2214fffbd4271b1ea3a0d61 (diff) | |
| download | git-c8b48ba4767ff9da19ef4f41f8d870f11742d833.tar.gz | |
Prettyprint octopus merge message.
Including the current branch in the list of heads being merged
was not a good idea, so drop it.  And shorten the message by
grouping branches and tags together to form a single line.
Signed-off-by: Junio C Hamano <junkio@cox.net>
| -rw-r--r-- | Makefile | 2 | ||||
| -rwxr-xr-x | git-fmt-merge-msg.perl | 93 | ||||
| -rwxr-xr-x | git-octopus.sh | 19 | ||||
| -rwxr-xr-x | git-pull.sh | 9 | 
4 files changed, 99 insertions, 24 deletions
@@ -87,7 +87,7 @@ SCRIPT_SH = \  SCRIPT_PERL = \  	git-archimport.perl git-cvsimport.perl git-relink.perl \ -	git-rename.perl git-shortlog.perl +	git-rename.perl git-shortlog.perl git-fmt-merge-msg.perl  SCRIPT_PYTHON = \  	git-merge-recursive.py diff --git a/git-fmt-merge-msg.perl b/git-fmt-merge-msg.perl new file mode 100755 index 0000000000..f0f3100eb1 --- /dev/null +++ b/git-fmt-merge-msg.perl @@ -0,0 +1,93 @@ +#!/usr/bin/perl -w +# +# Copyright (c) 2005 Junio C Hamano +# +# Read .git/FETCH_HEAD and make a human readable merge message +# by grouping branches and tags together to form a single line. + +use strict; + +my @src; +my %src; +sub andjoin { +	my ($label, $labels, $stuff) = @_; +	my $l = scalar @$stuff; +	my $m = ''; +	if ($l == 0) { +		return (); +	} +	if ($l == 1) { +		$m = "$label$stuff->[0]"; +	} +	else { +		$m = ("$labels" . +		      join (', ', @{$stuff}[0..$l-2]) . +		      " and $stuff->[-1]"); +	} +	return ($m); +} + +while (<>) { +	my ($bname, $tname, $gname, $src); +	chomp; +	s/^[0-9a-f]*	//; +	if (s/ of (.*)$//) { +		$src = $1; +	} else { +		# Pulling HEAD +		$src = $_; +		$_ = 'HEAD'; +	} +	if (! exists $src{$src}) { +		push @src, $src; +		$src{$src} = { +			BRANCH => [], +			TAG => [], +			GENERIC => [], +			# &1 == has HEAD. +			# &2 == has others. +			HEAD_STATUS => 0, +		}; +	} +	if (/^branch (.*)$/) { +		push @{$src{$src}{BRANCH}}, $1; +		$src{$src}{HEAD_STATUS} |= 2; +	} +	elsif (/^tag (.*)$/) { +		push @{$src{$src}{TAG}}, $1; +		$src{$src}{HEAD_STATUS} |= 2; +	} +	elsif (/^HEAD$/) { +		$src{$src}{HEAD_STATUS} |= 1; +	} +	else { +		push @{$src{$src}{GENERIC}}, $_; +		$src{$src}{HEAD_STATUS} |= 2; +	} +} + +my @msg; +for my $src (@src) { +	if ($src{$src}{HEAD_STATUS} == 1) { +		# Only HEAD is fetched, nothing else. +		push @msg, $src; +		next; +	} +	my @this; +	if ($src{$src}{HEAD_STATUS} == 3) { +		# HEAD is fetched among others. +		push @this, andjoin('', '', ['HEAD']); +	} +	push @this, andjoin("branch ", "branches ", +			   $src{$src}{BRANCH}); +	push @this, andjoin("tag ", "tags ", +			   $src{$src}{TAG}); +	push @this, andjoin("commit ", "commits ", +			    $src{$src}{GENERIC}); +	my $this = join(', ', @this); +	if ($src ne '.') { +		$this .= " from $src"; +	} +	push @msg, $this; +} +print "Merge ", join("; ", @msg), "\n"; diff --git a/git-octopus.sh b/git-octopus.sh index 521cc6f361..abc682025e 100755 --- a/git-octopus.sh +++ b/git-octopus.sh @@ -27,7 +27,7 @@ test "$(git-diff-index --cached "$head")" = "" ||  # MRC is the current "merge reference commit"  # MRT is the current "merge result tree" -MRC=$head MSG= PARENT="-p $head" +MRC=$head PARENT="-p $head"  MRT=$(git-write-tree)  CNT=1 ;# counting our head  NON_FF_MERGE=0 @@ -44,8 +44,6 @@ do  	CNT=`expr $CNT + 1`  	PARENT="$PARENT -p $SHA1" -	MSG="$MSG -	$REPO"  	if test "$common,$NON_FF_MERGE" = "$MRC,0"  	then @@ -84,20 +82,9 @@ case "$CNT" in  1)  	echo "No changes."  	exit 0 ;; -2) -	echo "Not an Octopus; making an ordinary commit." -	MSG="Merge "`expr "$MSG" : '.	\(.*\)'` ; # remove LF and TAB -	;; -*) -	# In an octopus, the original head is just one of the equals, -	# so we should list it as such. -	HEAD_LINK=`readlink "$GIT_DIR/HEAD"` -	MSG="Octopus merge of the following: - -	$HEAD_LINK from .$MSG" -	;;  esac -result_commit=$(echo "$MSG" | git-commit-tree $MRT $PARENT) +result_commit=$(git-fmt-merge-msg <"$GIT_DIR/FETCH_HEAD" | +		git-commit-tree $MRT $PARENT)  echo "Committed merge $result_commit"  echo $result_commit >"$GIT_DIR"/HEAD  git-diff-tree -p $head $result_commit | git-apply --stat diff --git a/git-pull.sh b/git-pull.sh index 8cf39e7f64..e3d11961b0 100755 --- a/git-pull.sh +++ b/git-pull.sh @@ -25,10 +25,6 @@ then  fi  merge_head=$(sed -e 's/	.*//' "$GIT_DIR"/FETCH_HEAD | tr '\012' ' ') -merge_name=$( -    perl -e 'print join("; ", map { chomp; s/^[0-9a-f]*	//; $_ } <>)' \ -    "$GIT_DIR"/FETCH_HEAD -)  case "$merge_head" in  '') @@ -41,6 +37,5 @@ case "$merge_head" in  	;;  esac -git-resolve \ -	"$(cat "$GIT_DIR"/HEAD)" \ -	$merge_head "Merge $merge_name" +merge_name=$(git-fmt-merge-msg <"$GIT_DIR/FETCH_HEAD") +git-resolve "$(cat "$GIT_DIR"/HEAD)" $merge_head "$merge_name"  | 
