Daniel Shahaf wrote on Thu, Apr 17, 2014 at 11:12:15 +0000: > The fix would be to change the $parno accounting as follows: before > $entry{parno} is used, subtract from it the number of entries already > merged in this run.
Untested patch: [[[ Index: tools/dist/backport.pl =================================================================== --- tools/dist/backport.pl (revision 1588205) +++ tools/dist/backport.pl (working copy) @@ -80,6 +80,8 @@ $ENV{LC_ALL} = "C"; # since we parse 'svn info' o # Globals. my %ERRORS = (); +# TODO: can $MERGED_SOMETHING be removed and references to it replaced by scalar(@MERGES_TODAY) ? +my @MERGES_TODAY; my $MERGED_SOMETHING = 0; my $SVNq; @@ -255,6 +257,7 @@ sub my_tempfile { sub merge { my %entry = @_; + my $parno = $entry{parno} - scalar grep { $_ < $entry{parno} } @MERGES_TODAY; my ($logmsg_fh, $logmsg_filename) = my_tempfile(); my (@mergeargs); @@ -312,7 +315,7 @@ if $sh[$MAY_COMMIT]; then # Remove the approved entry. The sentinel guarantees the right number of blank # lines is removed, which prevents spurious '--renormalize' commits tomorrow. echo "sentinel" >> $STATUS - $VIM -e -s -n -N -i NONE -u NONE -c ':0normal! $entry{parno}\x{7d}kdap' -c wq $STATUS + $VIM -e -s -n -N -i NONE -u NONE -c ':0normal! $parno\x{7d}kdap' -c wq $STATUS $VIM -e -s -n -N -i NONE -u NONE -c '\$d' -c wq $STATUS $SVNq commit -F $logmsg_filename elif ! $sh[$YES]; then @@ -325,6 +328,11 @@ elif ! $sh[$YES]; then fi EOF + if ($MAY_COMMIT) { + # STATUS has been edited and the change has been committed + push @MERGES_TODAY, $entry{parno} if $MAY_COMMIT; + } + $script .= <<"EOF" if $entry{branch}; reinteg_rev=\`$SVN info $STATUS | sed -ne 's/Last Changed Rev: //p'\` if $sh[$MAY_COMMIT]; then @@ -354,6 +362,8 @@ EOF $MERGED_SOMETHING++; open SHELL, '|-', qw#/bin/sh# or die "$! (in '$entry{header}')"; print SHELL $script; + # TODO: s/warn/die/ in the $MAY_COMMIT case? (since we don't know + # whether to update @MERGES_TODAY) close SHELL or warn "$0: sh($?): $! (in '$entry{header}')"; $ERRORS{$entry{id}} = [\%entry, "sh($?): $!"] if $?; ]]] > Daniel > > P.S. It would be a good idea to have some sort of test suite for > backport.pl...