summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: f8ff0c0)
raw | patch | inline | side by side (parent: f8ff0c0)
author | Junio C Hamano <junkio@cox.net> | |
Thu, 22 Sep 2005 07:55:22 +0000 (00:55 -0700) | ||
committer | Junio C Hamano <junkio@cox.net> | |
Fri, 23 Sep 2005 01:09:07 +0000 (18:09 -0700) |
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>
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>
Makefile | patch | blob | history | |
git-fmt-merge-msg.perl | [new file with mode: 0755] | patch | blob |
git-octopus.sh | patch | blob | history | |
git-pull.sh | patch | blob | history |
diff --git a/Makefile b/Makefile
index f9ecbef6cbfa6a10d506e8551c7d23b525c205d4..8a1a06f36aa8756419ea5cf70c8d8701d29bda1e 100644 (file)
--- a/Makefile
+++ b/Makefile
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
--- /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 521cc6f3611bcaf5454ad83baf0bec2e0b66483d..abc682025e5316e7d8612e5aa2057a700f618481 100755 (executable)
--- a/git-octopus.sh
+++ b/git-octopus.sh
# 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
CNT=`expr $CNT + 1`
PARENT="$PARENT -p $SHA1"
- MSG="$MSG
- $REPO"
if test "$common,$NON_FF_MERGE" = "$MRC,0"
then
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 8cf39e7f6495925c9f9824ebea518810554ba12b..e3d11961b0a5a7608648348153bde0ab6e7ccfff 100755 (executable)
--- a/git-pull.sh
+++ b/git-pull.sh
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
'')
;;
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"