You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by br...@apache.org on 2014/01/31 15:53:18 UTC

svn commit: r1563140 - /subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/RevisionRange.java

Author: brane
Date: Fri Jan 31 14:53:18 2014
New Revision: 1563140

URL: http://svn.apache.org/r1563140
Log:
Fix a nasty bug in JavaHL's mergeinfo parser; it would parse a single
revision R in a range list into a range [R,R] instead of [R-1,R], which
later triggered an abort in libsvn_subr/mergeinfo.c.

[in subversion/bindings/javahl]
* src/org/apache/subversion/javahl/types/RevisionRange.java
  (RevisionRange.RevisionRange): When parsing a string representation,
   convert a single revision "R" to a range [R-1,R], not to [R,R].
  (RevisionRange.toString): Collapse [R-1,R] ranges back to "R".

Modified:
    subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/RevisionRange.java

Modified: subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/RevisionRange.java
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/RevisionRange.java?rev=1563140&r1=1563139&r2=1563140&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/RevisionRange.java (original)
+++ subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/RevisionRange.java Fri Jan 31 14:53:18 2014
@@ -104,8 +104,10 @@ public class RevisionRange implements Co
             try
             {
                 long revNum = Long.parseLong(revisionElement.trim());
-                this.from = new Revision.Number(revNum);
-                this.to = this.from;
+                if (revNum <= 0)
+                    return;
+                this.to = new Revision.Number(revNum);
+                this.from = new Revision.Number(revNum - 1);
             }
             catch (NumberFormatException e)
             {
@@ -133,8 +135,17 @@ public class RevisionRange implements Co
     {
         if (from != null && to != null)
         {
-            String rep = (from.equals(to) ? from.toString()
-                          : from.toString() + '-' + to.toString());
+            String rep;
+
+            if (from.getKind() == Revision.Kind.number
+                && to.getKind() == Revision.Kind.number
+                && (((Revision.Number)from).getNumber() + 1
+                    == ((Revision.Number)to).getNumber()))
+                rep = to.toString();
+            else if (from.equals(to)) // Such ranges should never happen
+                rep = from.toString();
+            else
+                rep = from.toString() + '-' + to.toString();
             if (!inheritable)
                 return rep + '*';
             return rep;