From: Junio C Hamano Date: Mon, 19 Sep 2005 07:03:47 +0000 (-0700) Subject: Make Octopus merge message a bit nicer. X-Git-Tag: v0.99.8~96 X-Git-Url: https://git.octo.it/?p=git.git;a=commitdiff_plain;h=63f1aa6c72c46928f1b6959437aed4becbc42ff3 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 --- diff --git a/git-fetch.sh b/git-fetch.sh index 822b4cd9..cbfa27de 100755 --- a/git-fetch.sh +++ b/git-fetch.sh @@ -58,21 +58,25 @@ append_fetch_head () { # remote-nick is the URL given on the command line (or a shorthand) # remote-name is the $GIT_DIR relative refs/ path we computed # for this refspec. + remote_1_=$(expr "$remote_" : '\(.*\)\.git/*$') && + remote_="$remote_1_" + case "$remote_" in + . | ./) where_= ;; + *) where_=" of $remote_" ;; + esac case "$remote_name_" in HEAD) note_= ;; refs/heads/*) note_="$(expr "$remote_name_" : 'refs/heads/\(.*\)')" - note_="branch '$note_' of " ;; + note_="branch '$note_'" ;; refs/tags/*) note_="$(expr "$remote_name_" : 'refs/tags/\(.*\)')" - note_="tag '$note_' of " ;; + note_="tag '$note_'" ;; *) - note_="$remote_name of " ;; + note_="$remote_name" ;; esac - remote_1_=$(expr "$remote_" : '\(.*\)\.git/*$') && - remote_="$remote_1_" - note_="$note_$remote_" + note_="$note_$where_" # 2.6.11-tree tag would not be happy to be fed to resolve. if git-cat-file commit "$head_" >/dev/null 2>&1 diff --git a/git-pull.sh b/git-pull.sh index 71327a23..0c137f19 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