You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Daniel Shahaf <d....@daniel.shahaf.name> on 2012/12/08 23:23:29 UTC

backport.pl += 'merge --accept=%s' arguments

This is a patch to parse "Accept:" directives in STATUS, e.g.,

[[[
 * r42
   Some text.
   Accept: theirs-conflict
   Votes:
     +1: jrandom
]]]

It's not tested yet, hence sending it to dev@ and not commits@.
(Basically, putting it here while waiting for an STATUS entry to try the
code on.)

Thanks to Ben for making me finally put this one to code. :-)

Daniel


[[[
Teach backport.pl to pass --accept=%s to 'svn merge'.

* tools/dist/backport.pl
  (parse_entry): Parse "Accept: %s" headers.
  (handle_entry): Propagate them.
  (merge): Pass --accept=%s to 'svn merge'.
]]]

[[[
Index: tools/dist/backport.pl
===================================================================
--- tools/dist/backport.pl	(revision 1418755)
+++ tools/dist/backport.pl	(working copy)
@@ -76,15 +76,16 @@ sub merge {
 
   my $backupfile = "backport_pl.$$.tmp";
 
+  $mergeargs = $entry{accept} ? "--accept=$entry{accept} " : "";
   if ($entry{branch}) {
     # NOTE: This doesn't escape the branch into the pattern.
     $pattern = sprintf '\V\(%s branch(es)?\|branches\/%s\|Branch(es)?:\n *%s\)', $entry{branch}, $entry{branch}, $entry{branch};
-    $mergeargs = "--reintegrate $BRANCHES/$entry{branch}";
+    $mergeargs .= "--reintegrate $BRANCHES/$entry{branch}";
     print $logmsg_fh "Reintegrate the $entry{header}:";
     print $logmsg_fh "";
   } elsif (@{$entry{revisions}}) {
     $pattern = '^ [*] \V' . 'r' . $entry{revisions}->[0];
-    $mergeargs = join " ", (map { "-c$_" } @{$entry{revisions}}), '^/subversion/trunk';
+    $mergeargs .= join " ", (map { "-c$_" } @{$entry{revisions}}), '^/subversion/trunk';
     if (@{$entry{revisions}} > 1) {
       print $logmsg_fh "Merge the $entry{header} from trunk:";
       print $logmsg_fh "";
@@ -153,7 +154,7 @@ sub sanitize_branch {
 # TODO: may need to parse other headers too?
 sub parse_entry {
   my @lines = @_;
-  my (@revisions, @logsummary, $branch, @votes);
+  my ($accept, @revisions, @logsummary, $branch, @votes);
   # @lines = @_;
 
   # strip first three spaces
@@ -176,6 +177,11 @@ sub parse_entry {
   unshift @votes, pop until $_[-1] =~ /^\s*Votes:/ or not defined $_[-1];
   pop;
 
+  # accept
+  ($accept) = map { /^Accept: ([\w-]+)/ and $1 } @_;
+  warn "Invalid 'Accept' value '$accept'"
+    if $accept and `svn --accept=$accept 2>&1 >/dev/null` =~ /\Q'$accept'/;
+
   # branch
   while (@_) {
     shift and next unless $_[0] =~ s/^\s*Branch(es)?:\s*//;
@@ -195,6 +201,7 @@ sub parse_entry {
     header => $header,
     votes => [@votes],
     entry => [@lines],
+    accept => $accept,
   );
 }
 
@@ -211,6 +218,7 @@ sub handle_entry {
     print "$BRANCHES/$entry{branch}" if $entry{branch};
     print "";
     print for @{$entry{logsummary}};
+    print "Accept: $accept" if $accept;
     print "";
     print for @{$entry{votes}};
     print "";
]]]