What's cooking (2024/05 #05)
[git.git] / CheckPush
blobe79f364e8e7247e9d3d32ab215681674f610d34b
1 #!/bin/dash
3 MASTER=master
5 for range in $(
7 git for-each-ref --format='%(refname)' refs/heads/maint-\* |
8 perl -e '
9 sub compare_dotted_version {
10 my (@ours) = split(/\./, $_[0]);
11 my (@theirs) = split(/\./, $_[1]);
12 my ($i, $diff);
14 for ($i = 0; $i < @ours && $i < @theirs; $i++) {
15 $diff = $ours[$i] - $theirs[$i];
16 return $diff if ($diff);
18 return 1 if ($i < @ours);
19 return -1 if ($i < @theirs);
20 return 0;
22 my @maint = ();
23 while (<STDIN>) {
24 next unless s|^refs/heads/||;
25 chomp;
26 my ($v) = ($_ =~ /^maint-(.*)$/);
27 push @maint, [$v, $_];
29 for (map { $_->[1] }
30 sort { compare_dotted_version($a->[0], $b->[0]) }
31 @maint) {
32 print "$_\n";
34 ' &&
35 cat <<-EOF
36 maint
37 $MASTER
38 next
39 EOF
40 } |
42 prev_branch=
43 while read branch
45 if test -n "$prev_branch"
46 then
47 echo "$branch..$prev_branch"
49 prev_branch=$branch
50 done
52 ) seen..jch
54 lg=$(git log --oneline "$range")
55 if test -n "$lg"
56 then
57 echo "*** $range ***"
58 echo "$lg"
60 done
62 if ! next_equiv=$(git rev-parse --verify 'jch^{/^### match next}' 2>/dev/null) ||
63 ! git diff --stat --exit-code next $next_equiv
64 then
65 next_tree=$(git rev-parse next^{tree}) &&
66 next_equiv=$(git rev-list --first-parent $MASTER^..seen |
67 xargs -n1 sh -c '
68 echo $(git rev-parse $1^{tree}) $1
69 ' - | sed -n -e "s/^$next_tree //p"
73 if test -n "$next_equiv"
74 then
75 jch=$(git rev-list --first-parent $MASTER..jch | wc -l) &&
76 seen=$(git rev-list --first-parent $MASTER..seen | wc -l) &&
77 next=$(git rev-list --first-parent $MASTER..$next_equiv | wc -l) &&
78 if test $jch -le $next
79 then
80 echo "$MASTER..$jch..jch..$next..next..$seen..seen"
81 else
82 echo "$MASTER..$next..next..$jch..jch..$seen..seen"