--- 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 ---