http://svn.collab.net/viewvc/svn?view=rev&revision=19202

Blair
--- Begin Message ---
Author: blair
Date: Thu Apr  6 10:35:45 2006
New Revision: 19202

Modified:
   trunk/contrib/client-side/svnmerge.py
   trunk/contrib/client-side/svnmerge_test.py

Log:
Allow svnmerge revision ranges to use the : separator that the svn
command line client uses for its -r command line option.  I always
find myself using the : character.

* contrib/client-side/svnmerge.py
  (RevisionSet.__init__):
    Use a regular expression to try to split a revision range into the
    starting and ending revisions.  If the resulting array from the
    split contains only one element, then treat the string as a single
    revision.  Throw a ValueError exception with a better message if
    the range is ill-formed (say two or more - or :).

* contrib/client-side/svnmerge_test.py
  (TestCase_RevisionSet#test_constr_string),
  (TestCase_RevisionSet#test_constr_error),
  (TestCase_RevisionSet#test_normalized),
  (TestCase_RevisionSet#test_sorted),
  (TestCase_RevisionSet#test_length)
  (TestCase_RevisionSet#test_iter),
  (TestCase_RevisionSet#test_union),
  (TestCase_RevisionSet#test_subtraction):
    Duplicate all the tests with revision ranges, switching the '-'
      character with a ':' character.


Modified: trunk/contrib/client-side/svnmerge.py
URL: 
http://svn.collab.net/viewvc/svn/trunk/contrib/client-side/svnmerge.py?pathrev=19202&r1=19201&r2=19202
==============================================================================
--- trunk/contrib/client-side/svnmerge.py       (original)
+++ trunk/contrib/client-side/svnmerge.py       Thu Apr  6 10:35:45 2006
@@ -435,6 +435,8 @@
 
         self._revs = {}
 
+        revision_range_split_re = re.compile('[-:]')
+
         if isinstance(parm, types.DictType):
             self._revs = parm.copy()
         elif isinstance(parm, types.ListType):
@@ -444,12 +446,15 @@
             parm = parm.strip()
             if parm:
                 for R in parm.split(","):
-                    if "-" in R:
-                        s,e = R.split("-")
-                        for rev in range(int(s), int(e)+1):
+                    rev_or_revs = re.split(revision_range_split_re, R)
+                    if len(rev_or_revs) == 1:
+                        self._revs[int(rev_or_revs[0])] = 1
+                    elif len(rev_or_revs) == 2:
+                        for rev in range(int(rev_or_revs[0]),
+                                         int(rev_or_revs[1])+1):
                             self._revs[rev] = 1
                     else:
-                        self._revs[int(R)] = 1
+                        raise ValueError, 'Ill formatted revision range: ' + R
 
     def sorted(self):
         revnums = self._revs.keys()

Modified: trunk/contrib/client-side/svnmerge_test.py
URL: 
http://svn.collab.net/viewvc/svn/trunk/contrib/client-side/svnmerge_test.py?pathrev=19202&r1=19201&r2=19202
==============================================================================
--- trunk/contrib/client-side/svnmerge_test.py  (original)
+++ trunk/contrib/client-side/svnmerge_test.py  Thu Apr  6 10:35:45 2006
@@ -84,6 +84,11 @@
         self.assert_(2 in rs)
         self.assert_(9 not in rs)
 
+        rs = svnmerge.RevisionSet("10: 15, 12:48,2 ")
+        self.assert_(17 in rs)
+        self.assert_(2 in rs)
+        self.assert_(9 not in rs)
+
     def test_constr_dict(self):
         rs = svnmerge.RevisionSet({18:1, 24:1, 25:1, 43:1})
         self.assert_(24 in rs)
@@ -95,17 +100,29 @@
         self.assertRaises(ValueError, svnmerge.RevisionSet, "10;12-15")
         self.assertRaises(ValueError, svnmerge.RevisionSet, "10,foo,3-15")
 
+        self.assertRaises(ValueError, svnmerge.RevisionSet, "10:12:15")
+        self.assertRaises(ValueError, svnmerge.RevisionSet, "10;12:15")
+        self.assertRaises(ValueError, svnmerge.RevisionSet, "10,foo,3:15")
+
     def test_normalized(self):
         rs = svnmerge.RevisionSet("8-15,16-18, 4-6, 9, 18, 1-1, 3-3")
         self.assertEqual(rs.normalized(), [(1,1), (3,6), (8,18)])
         self.assertEqual(str(rs), "1,3-6,8-18")
 
+        rs = svnmerge.RevisionSet("8:15,16:18, 4:6, 9, 18, 1:1, 3:3")
+        self.assertEqual(rs.normalized(), [(1,1), (3,6), (8,18)])
+        self.assertEqual(str(rs), "1,3-6,8-18")
+
     def test_sorted(self):
         "Test the sorted() function of the RevisionSet class."
         rs = svnmerge.RevisionSet("8-15,16-18, 4-6, 9, 18, 1-1, 3-3")
         self.assertEqual(rs.sorted(), [1, 3, 4, 5, 6, 8, 9, 10, 11,
                                        12, 13, 14, 15, 16, 17, 18])
 
+        rs = svnmerge.RevisionSet("8:15,16:18, 4:6, 9, 18, 1:1, 3:3")
+        self.assertEqual(rs.sorted(), [1, 3, 4, 5, 6, 8, 9, 10, 11,
+                                       12, 13, 14, 15, 16, 17, 18])
+
     def test_length(self):
         rs = svnmerge.RevisionSet("3-8")
         self.assertEqual(len(rs), 6)
@@ -114,6 +131,13 @@
         rs = svnmerge.RevisionSet("1,3,5")
         self.assertEqual(len(rs), 3)
 
+        rs = svnmerge.RevisionSet("3:8")
+        self.assertEqual(len(rs), 6)
+        rs = svnmerge.RevisionSet("3:8,4:10")
+        self.assertEqual(len(rs), 8)
+        rs = svnmerge.RevisionSet("1,3,5")
+        self.assertEqual(len(rs), 3)
+
     def test_iter(self):
         try:
             iter
@@ -123,14 +147,23 @@
             rs = svnmerge.RevisionSet("4-13,1-5,34,20-22,18-21")
             self.assertEqual(list(iter(rs)), range(1,14)+range(18,23)+[34])
 
+            rs = svnmerge.RevisionSet("4:13,1:5,34,20:22,18:21")
+            self.assertEqual(list(iter(rs)), range(1,14)+range(18,23)+[34])
+
     def test_union(self):
         rs = svnmerge.RevisionSet("3-8,4-10") | svnmerge.RevisionSet("7-14,1")
         self.assertEqual(str(rs), "1,3-14")
 
+        rs = svnmerge.RevisionSet("3:8,4:10") | svnmerge.RevisionSet("7:14,1")
+        self.assertEqual(str(rs), "1,3-14")
+
     def test_subtraction(self):
         rs = svnmerge.RevisionSet("3-8,4-10") - svnmerge.RevisionSet("7-14,1")
         self.assertEqual(str(rs), "3-6")
 
+        rs = svnmerge.RevisionSet("3:8,4:10") - svnmerge.RevisionSet("7:14,1")
+        self.assertEqual(str(rs), "3-6")
+
     def test_constr_empty(self):
         rs = svnmerge.RevisionSet("")
         self.assertEqual(str(rs), "")

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


--- End Message ---
_______________________________________________
Svnmerge mailing list
[email protected]
http://www.orcaware.com/mailman/listinfo/svnmerge

Reply via email to