diff options
author | Junio C Hamano <junkio@cox.net> | 2005-09-19 00:03:47 -0700 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2005-09-20 18:16:27 -0700 |
commit | 63f1aa6c72c46928f1b6959437aed4becbc42ff3 (patch) | |
tree | dcea0f1c834747eb6756b35fbe43e9bb5c6b3f1d /git-pull.sh | |
parent | f887564ab72e107bcdee3ba83c91e2bb4ae13ca7 (diff) | |
download | git-63f1aa6c72c46928f1b6959437aed4becbc42ff3.tar.gz git-63f1aa6c72c46928f1b6959437aed4becbc42ff3.tar.xz |
Make Octopus merge message a bit nicer.
Linus says that 'of .' to mean the commits came from the local repository
was too confusing and ugly -- I tend to agree with him.
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'git-pull.sh')
-rwxr-xr-x | git-pull.sh | 81 |
1 files changed, 76 insertions, 5 deletions
diff --git a/git-pull.sh b/git-pull.sh index 71327a232..0c137f197 100755 --- a/git-pull.sh +++ b/git-pull.sh @@ -57,10 +57,81 @@ 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 +?*' '?*) + merge_name="Octopus merge of "$( + perl -e ' + my @src; + my %src; + + sub andjoin { + my ($label, $labels, $stuff, $src) = @_; + 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]"); + } + if ($src ne ".") { + $m .= " from $src"; + } + return $m; + } + + while (<>) { + my ($bname, $tname, $gname, $src); + s/^[0-9a-f]* //; + if (s/ of (.*)$//) { + $src = $1; + } else { + $src = "."; + } + if (! exists $src{$src}) { + push @src, $src; + $src{$src} = { BRANCH => [], TAG => [], GENERIC => [] }; + } + if (/^branch (.*)$/) { + push @{$src{$src}{BRANCH}}, $1; + } + elsif (/^tag (.*)$/) { + push @{$src{$src}{TAG}}, $1; + } + else { + push @{$src{$src}{GENERIC}}, $1; + } + } + my @msg; + for my $src (@src) { + my $bag = $src{$src}{BRANCH}; + if (@{$bag}) { + push @msg, andjoin("branch", "branches", $bag, $src); + } + $bag = $src{$src}{TAG}; + if (@{$bag}) { + push @msg, andjoin("tag", "tags", $bag, $src); + } + $bag = $src{$src}{GENERIC}; + if (@{$bag}) { + push @msg, andjoin("commit", "commits", $bag, $src); + } + } + print join("; ", @msg); + ' "$GIT_DIR"/FETCH_HEAD + ) + ;; +*) + merge_name="Merge "$(sed -e 's/^[0-9a-f]* //' \ + "$GIT_DIR"/FETCH_HEAD) + ;; +esac case "$merge_head" in '') @@ -69,4 +140,4 @@ case "$merge_head" in ;; esac -git-merge $no_summary $strategy_args "Merge $merge_name" HEAD $merge_head +git-merge $no_summary $strategy_args "$merge_name" HEAD $merge_head |