From 5ed2a1cd3799a4f75f049a79d1c0318bf26d2cce Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Thu, 9 Apr 2015 16:16:40 +0200 Subject: [PATCH] Update2: Improved detection of source branches When a new branch or tag is created, we tried to detect the branch where the current commit comes from. The new detection code is more robust (it parses the output of "git for-each-ref" instead of "git branch") and it adds a hint when multiple source branches match. --- update2 | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/update2 b/update2 index 1caa5ca..ef1ee59 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"; @@ -194,7 +201,7 @@ 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"; -- 2.39.2