X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=update2;h=55e8a8e1c682e8bdf9c8e5389021978e72947bfd;hb=HEAD;hp=d0e05fb428ca60bbd68fff92befad4721b2aeffa;hpb=378f31ff9e00e38a45e0973bd72a6b2dc46dea28;p=git-tools.git diff --git a/update2 b/update2 index d0e05fb..55e8a8e 100755 --- a/update2 +++ b/update2 @@ -49,17 +49,24 @@ if (@ARGV) { } } -sub scan_branches($$) { +sub get_source($$) { my ($ref, $new) = @_; - # Is there any branch pointing to $new (other than $ref)? - for (`git branch -v --no-abbrev`) { + # Get branch (different from $ref) whose tip is $new + my @branches = (); + for (`git for-each-ref refs/heads`) { chomp; - my ($name, $sha) = /^..(\S+)\s+(\S+)/ or die; - if ((!defined($ref) || $name ne $ref) && $sha eq $new) { - return $name; + my ($sha, $type, $name) = m{^(\S+) (\S+)\trefs/heads/(\S+)$} or die; + if ((!defined($ref) || $name ne $ref) && $sha eq $new && $type eq 'commit') { + push @branches, $name; } } - return; + if (@branches == 1) { + return $branches[0]; + } elsif (@branches) { + return sprintf("%s [and %d other]", $branches[0], @branches-1); + } else { + return; + } } sub scan_commits($$) { @@ -98,7 +105,7 @@ sub update_branch($$$$$) if ($old =~ /^0+$/) { # Creation of a branch $subj .= ' Created branch'; - my $copy_of = scan_branches($branch, $new); + my $copy_of = get_source($branch, $new); if (defined $copy_of) { $subj .= " as a copy of $copy_of"; print $out "Created branch $branch as a copy of $copy_of ($new).\n"; @@ -143,7 +150,7 @@ sub update_branch($$$$$) $subj .= ' ' . $c0->{subject}; } - print $out "Push to branch $branch ($old -> $new)\n\n"; + print $out "Push to branch $branch ($old..$new)\n\n"; # If there are multiple commits, mention that if (@nonmerges > 1) { @@ -169,12 +176,12 @@ sub update_branch($$$$$) } elsif ($lca eq $new) { # Rewind $subj .= ' Branch rewound'; - print $out "Rewound branch $branch ($old -> $new).\n\n"; + print $out "Rewound branch $branch ($old..$new).\n\n"; most_recent($new); } else { # Otherwise it is a rebase $subj .= ' Branch rebased'; - print $out "Rebased branch $branch ($old -> $new).\n\n"; + print $out "Rebased branch $branch ($old..$new).\n\n"; print $out "Commits from common ancestor:\n\n"; system 'git', 'rev-list', @rev_list_options, $new, "^$old"; } @@ -194,14 +201,14 @@ sub update_tag($$$$$) $subj .= " Deleted tag $tag"; print $out "Deleted tag $tag ($old).\n"; } else { - my $copy_of = scan_branches(undef, $new); + my $copy_of = get_source(undef, $new); my $cp = defined($copy_of) ? " to branch $copy_of" : ""; if ($old =~ /^0+/) { $subj .= " Created tag $tag$cp"; print $out "Created tag $tag$cp ($new).\n\n"; } else { $subj .= " Changed tag $tag$cp"; - print $out "Changed tag $tag$cp ($old -> $new).\n\n"; + print $out "Changed tag $tag$cp ($old..$new).\n\n"; } most_recent($new); } @@ -244,6 +251,7 @@ sub update_ref($$$) '-x', '-e', 'set charset="utf-8"', '-e', 'set send_charset="us-ascii:iso-8859-2:utf-8"', + '-e', 'set record=', '-s', $headers->{'Subject'}, ); delete $headers->{'Subject'};