Staging
v0.5.1
https://github.com/git/git
Revision 181785487ecd48c7a3760ca31a6a245aabb2cbc8 authored by Junio C Hamano on 22 January 2022, 03:05:07 UTC, committed by Junio C Hamano on 22 January 2022, 03:05:07 UTC
1 parent 089b1a8
Raw File
Tip revision: 181785487ecd48c7a3760ca31a6a245aabb2cbc8 authored by Junio C Hamano on 22 January 2022, 03:05:07 UTC
What's cooking (2022/01 #06)
Tip revision: 1817854
CheckPush
#!/bin/sh

MASTER=master

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
) seen..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..seen |
			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) &&
	seen=$(git rev-list --first-parent $MASTER..seen | 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..$seen..seen"
	else
		echo "$MASTER..$next..next..$jch..jch..$seen..seen"
	fi
fi
back to top