| #!/bin/sh |
| |
| for range in $( |
| prev_branch= |
| { |
| git for-each-ref --format='%(refname)' refs/heads/maint-* | |
| perl -e ' |
| sub compare_dotted_version { |
| my (@ours) = split(/\./, $_[0]); |
| my (@theirs) = split(/\./, $_[1]); |
| my ($i, $diff); |
| |
| for ($i = 0; $i < @ours && $i < @theirs; $i++) { |
| $diff = $ours[$i] - $theirs[$i]; |
| return $diff if ($diff); |
| } |
| return 1 if ($i < @ours); |
| return -1 if ($i < @theirs); |
| return 0; |
| } |
| my @maint = (); |
| while (<STDIN>) { |
| next unless s|^refs/heads/||; |
| chomp; |
| my ($v) = ($_ =~ /^maint-(.*)$/); |
| push @maint, [$v, $_]; |
| } |
| for (map { $_->[1] } |
| sort { compare_dotted_version($a->[0], $b->[0]) } |
| @maint) { |
| print "$_\n"; |
| } |
| ' |
| cat <<-EOF |
| maint |
| master |
| next |
| EOF |
| } | |
| while read branch |
| do |
| if test -n "$prev_branch" |
| then |
| echo "$branch..$prev_branch" |
| fi |
| prev_branch=$branch |
| done |
| ) pu..jch |
| do |
| lg=$(git log --oneline "$range") |
| if test -n "$lg" |
| then |
| echo "*** $range ***" |
| echo "$lg" |
| fi |
| done |
| |
| if ! next_equiv=$(git rev-parse --verify 'jch^{/^### match next}' 2>/dev/null) || |
| ! git diff --stat --exit-code next $next_equiv |
| then |
| next_tree=$(git rev-parse next^{tree}) && |
| next_equiv=$(git rev-list --first-parent master..pu | |
| xargs -n1 sh -c ' |
| echo $(git rev-parse $1^{tree}) $1 |
| ' - | sed -n -e "s/^$next_tree //p" |
| ) |
| fi |
| |
| if test -n "$next_equiv" |
| then |
| jch=$(git rev-list --first-parent master..jch | wc -l) && |
| pu=$(git rev-list --first-parent master..pu | wc -l) && |
| next=$(git rev-list --first-parent master..$next_equiv | wc -l) && |
| if test $jch -le $next |
| then |
| echo "master..$jch..jch..$next..next..$pu..pu" |
| else |
| echo "master..$next..next..$jch..jch..$pu..pu" |
| fi |
| fi |