More Python3 porting work; mostly BytesIO conversions.
authorJelmer Vernooij <jelmer@jelmer.uk>
Thu, 7 Jul 2016 14:13:30 +0000 (14:13 +0000)
committerJelmer Vernooij <jelmer@jelmer.uk>
Thu, 7 Jul 2016 14:13:30 +0000 (14:13 +0000)
bin/subvertpy-fast-export
examples/ra_commit.py
subvertpy/marshall.py
subvertpy/properties.py
subvertpy/tests/__init__.py
subvertpy/tests/test_client.py
subvertpy/tests/test_delta.py
subvertpy/tests/test_marshall.py
subvertpy/tests/test_ra.py
subvertpy/tests/test_repos.py
subvertpy/tests/test_wc.py

index 1c1571a47f01854ca725055b37d4a963d910f81b..913168cf708fd7e2078e7cd9991362050c11335c 100755 (executable)
@@ -103,7 +103,7 @@ def export_revision(rev, fs):
     marks = {}
     file_changes = []
 
-    for path, (node_id, change_type, text_changed, prop_changed) in changes.iteritems():
+    for path, (node_id, change_type, text_changed, prop_changed) in changes.items():
         if root.is_dir(path):
             continue
         if not MATCHER.matches(path):
@@ -177,7 +177,7 @@ def crawl_revisions(repos_path, first_rev=None, final_rev=None):
         first_rev = 1
     if final_rev is None:
         final_rev = fs_obj.youngest_revision()
-    for rev in xrange(first_rev, final_rev + 1):
+    for rev in range(first_rev, final_rev + 1):
         export_revision(rev, fs_obj)
 
 
index 36d6160a1450384f4deaad7981a8aaf32084bf87..2f51c308d4be2baf0b45aa81a623518df1065a3e 100755 (executable)
@@ -2,7 +2,7 @@
 # Demonstrates how to do a new commit using Subvertpy
 
 import os
-from cStringIO import StringIO
+from io import BytesIO
 from subvertpy import delta, repos
 from subvertpy.ra import RemoteAccess, Auth, get_username_provider
 
@@ -28,7 +28,7 @@ file = root.add_file("somefile")
 file.change_prop("svn:executable", "*")
 # Obtain a textdelta handler and send the new file contents
 txdelta = file.apply_textdelta()
-delta.send_stream(StringIO("new file contents"), txdelta)
+delta.send_stream(BytesIO(b"new file contents"), txdelta)
 file.close()
 root.close()
 editor.close()
index e2d5cdba0e7016a5a7d7cfd1f619938f49716974..a5a73154972aed9ed8d2cc0afa89c0b6d0c0856c 100644 (file)
@@ -102,7 +102,7 @@ def unmarshall(x):
         if len(x) <= 1:
             raise NeedMoreData("Missing whitespace")
 
-        if not x[1:2] in whitespace:
+        if not x[1] in whitespace:
             raise MarshallError("Expected space, got '%c'" % x[1])
 
         return (x[2:], ret)
@@ -110,16 +110,18 @@ def unmarshall(x):
         num = bytearray()
         # Check if this is a string or a number
         while x[:1].isdigit():
-            num.append(x[0:1])
+            num.append(x[0])
             x = x[1:]
         num = int(num)
 
-        if x[0:1] in whitespace:
+        if x[0] in whitespace:
             return (x[1:], num)
         elif x[0:1] == b":":
             if len(x) < num:
                 raise NeedMoreData("Expected string of length %r" % num)
             return (x[num+2:], x[1:num+1])
+        elif not x:
+            raise MarshallError("Expected whitespace, got end of string.")
         else:
             raise MarshallError("Expected whitespace or ':', got '%c'" % x[0])
     elif x[:1].isalpha():
@@ -135,7 +137,7 @@ def unmarshall(x):
         if not x:
             raise MarshallError("Expected whitespace, got end of string.")
 
-        if not x[0:1] in whitespace:
+        if not x[0] in whitespace:
             raise MarshallError("Expected whitespace, got '%c'" % x[0])
 
         return (x[1:], ret.decode("ascii"))
index 87ee28e484a0f6f1d4f1f3567b4bf627149b4c89..03cd701b7779afc451df94ddd502487ed0060349 100644 (file)
@@ -162,7 +162,7 @@ def generate_mergeinfo_property(merges):
         else:
             return "%d-%d%s" % (start, end, suffix)
     text = ""
-    for (path, ranges) in merges.iteritems():
+    for (path, ranges) in merges.items():
         assert path.startswith("/")
         text += "%s:%s\n" % (path, ",".join(map(formatrange, ranges)))
     return text
@@ -280,7 +280,7 @@ def diff(current, previous):
              with the old and the new property value.
     """
     ret = {}
-    for key, newval in current.iteritems():
+    for key, newval in current.items():
         oldval = previous.get(key)
         if oldval != newval:
             ret[key] = (oldval, newval)
index 5ffcd2b3a45e8b6dd60ffeaabd33328b3dc4a16b..9c3162467a29a9dd7464908c0b8948cabf2c1f48 100644 (file)
@@ -270,7 +270,7 @@ class SubversionTestCase(TestCaseInTempDir):
         if recursive:
             return ret
         else:
-            return ret.values()[0]
+            return next(iter(ret.values()))
 
     def client_get_revprop(self, url, revnum, name):
         """Get the revision property.
@@ -372,7 +372,7 @@ class SubversionTestCase(TestCaseInTempDir):
         :param files: Dictionary with filenames as keys, contents as
             values. None as value indicates a directory.
         """
-        for name, content in files.iteritems():
+        for name, content in files.items():
             if content is None:
                 try:
                     os.makedirs(name)
index fbff36f2be4225f4dd2db3dd3c874fd7438ce2b9..b72ba546915b627173695364330c59faadef3b2c 100644 (file)
@@ -17,7 +17,7 @@
 
 from datetime import datetime, timedelta
 import os
-from StringIO import StringIO
+from io import BytesIO
 import shutil
 import tempfile
 from unittest import SkipTest
@@ -137,12 +137,12 @@ class TestClient(SubversionTestCase):
                 auth=ra.Auth([ra.get_username_provider()]))
         dc = self.get_commit_editor(self.repos_url) 
         f = dc.add_file("foo")
-        f.modify("foo1")
+        f.modify(b"foo1")
         dc.close()
 
         dc = self.get_commit_editor(self.repos_url) 
         f = dc.open_file("foo")
-        f.modify("foo2")
+        f.modify(b"foo2")
         dc.close()
 
         if client.api_version() < (1, 5):
@@ -166,7 +166,7 @@ class TestClient(SubversionTestCase):
         self.assertEqual(b"", errf.read())
 
     def assertCatEquals(self, value, revision=None):
-        io = StringIO()
+        io = BytesIO()
         self.client.cat("dc/foo", io, revision)
         self.assertEqual(value, io.getvalue())
 
@@ -250,10 +250,10 @@ class TestClient(SubversionTestCase):
         self.client.log_msg_func = lambda c: "Commit"
         self.client.commit(["dc"])
         info = self.client.info("dc/foo")
-        self.assertEqual(["foo"], info.keys())
+        self.assertEqual(["foo"], list(info.keys()))
         self.assertEqual(1, info["foo"].revision)
         self.assertEqual(3, info["foo"].size)
-        self.build_tree({"dc/bar": "blablabla"})
+        self.build_tree({"dc/bar": b"blablabla"})
         self.client.add(os.path.abspath("dc/bar"))
 
     def test_info_nonexistant(self):
index e096f701e562c6c861f6f2dd7dd6504214cc279d..4dbec0dd1f93f1e7c9ab4a6f125757c19f7bbefa 100644 (file)
@@ -38,7 +38,7 @@ class DeltaTests(TestCase):
         self.windows.append(window)
 
     def test_send_stream(self):
-        stream = BytesIO("foo")
+        stream = BytesIO(b"foo")
         send_stream(stream, self.storing_window_handler)
         self.assertEqual([(0, 0, 3, 0, [(2, 0, 3)], b'foo'), None], 
                           self.windows)
index 9884e4a39bc780159d297cbe42719b8658ebc8da..5ccaa980e0d7a32d97c2842fd2dc866656015063 100644 (file)
@@ -70,7 +70,7 @@ class TestMarshalling(TestCase):
         self.assertEqual((b'', b"bla l"), unmarshall(b"5:bla l"))
 
     def test_unmarshall_list(self):
-        self.assertEqual((b'', [4,5]), unmarshall(b"( 4 5 ) "))
+        self.assertEqual((b'', [4, 5]), unmarshall(b"( 4 5 ) "))
 
     def test_unmarshall_int(self):
         self.assertEqual((b'', 2), unmarshall(b"2 "))
index a509f9c2d25b7fc34f31c2f5c0e12df80c49777e..05085d57f947621c0eaac106206879af5a5b793b 100644 (file)
@@ -15,7 +15,7 @@
 
 """Subversion ra library tests."""
 
-from cStringIO import StringIO
+from io import BytesIO
 
 from subvertpy import (
     NODE_DIR, NODE_NONE, NODE_UNKNOWN,
@@ -159,7 +159,7 @@ class TestRemoteAccess(SubversionTestCase):
                 (paths, revnum, props, has_children) = returned[0]
             self.assertEqual(None, paths)
             self.assertEqual(revnum, 0)
-            self.assertEqual(["svn:date"], props.keys())
+            self.assertEqual(["svn:date"], list(props.keys()))
             if len(returned[1]) == 3:
                 (paths, revnum, props) = returned[1]
             else:
@@ -192,7 +192,7 @@ class TestRemoteAccess(SubversionTestCase):
                 (paths, revnum, props, has_children) = returned[0]
             self.assertEqual(None, paths)
             self.assertEqual(revnum, 0)
-            self.assertEqual(["svn:date"], props.keys())
+            self.assertEqual(["svn:date"], list(props.keys()))
             if len(returned[1]) == 3:
                 (paths, revnum, props) = returned[1]
             else:
@@ -290,10 +290,10 @@ class TestRemoteAccess(SubversionTestCase):
         f.change_prop("bla:bar", None)
         cb.close()
 
-        stream = StringIO()
+        stream = BytesIO()
         props = self.ra.get_file("bar", stream, 1)[1]
         self.assertEqual("blie", props.get("bla:bar"))
-        stream = StringIO()
+        stream = BytesIO()
         props = self.ra.get_file("bar", stream, 2)[1]
         self.assertIs(None, props.get("bla:bar"))
 
@@ -326,12 +326,12 @@ class TestRemoteAccess(SubversionTestCase):
         cb.add_file("bar").modify(b"a")
         cb.close()
 
-        stream = StringIO()
+        stream = BytesIO()
         self.ra.get_file("bar", stream, 1)
         stream.seek(0)
         self.assertEqual(b"a", stream.read())
 
-        stream = StringIO()
+        stream = BytesIO()
         self.ra.get_file("/bar", stream, 1)
         stream.seek(0)
         self.assertEqual(b"a", stream.read())
index be3db5be08ed30099ef41914f18ee2a9fcf64fb8..f77c5eb0f3ecc657378232c1ffded9e8d4029090 100644 (file)
@@ -15,7 +15,7 @@
 
 """Subversion repository library tests."""
 
-from cStringIO import StringIO
+from io import BytesIO
 import os
 import textwrap
 
@@ -52,7 +52,7 @@ class TestRepository(TestCaseInTempDir):
 
     def test_verify_fs(self):
         r = repos.create(os.path.join(self.test_dir, "foo"))
-        f = StringIO()
+        f = BytesIO()
         r.verify_fs(f, 0, 0)
         self.assertEqual(b'* Verified revision 0.\n', f.getvalue())
 
@@ -74,9 +74,9 @@ class TestRepository(TestCaseInTempDir):
 
     def test_load_fs_invalid(self):
         r = repos.create(os.path.join(self.test_dir, "foo"))
-        dumpfile = "Malformed"
-        feedback = StringIO()
-        self.assertRaises(SubversionException, r.load_fs, StringIO(dumpfile),
+        dumpfile = b"Malformed"
+        feedback = BytesIO()
+        self.assertRaises(SubversionException, r.load_fs, BytesIO(dumpfile),
             feedback, repos.LOAD_UUID_DEFAULT)
 
     def test_load_fs(self):
@@ -95,14 +95,14 @@ class TestRepository(TestCaseInTempDir):
         V 27
         2011-08-26T13:08:30.187858Z
         PROPS-END
-        """)
-        feedback = StringIO()
-        r.load_fs(StringIO(dumpfile), feedback, repos.LOAD_UUID_DEFAULT)
+        """).encode("ascii")
+        feedback = BytesIO()
+        r.load_fs(BytesIO(dumpfile), feedback, repos.LOAD_UUID_DEFAULT)
         self.assertEqual(r.fs().get_uuid(), "38f0a982-fd1f-4e00-aa6b-a20720f4b9ca")
 
     def test_rev_props(self):
         repos.create(os.path.join(self.test_dir, "foo"))
-        self.assertEqual(["svn:date"], repos.Repository("foo").fs().revision_proplist(0).keys())
+        self.assertEqual(["svn:date"], list(repos.Repository("foo").fs().revision_proplist(0).keys()))
 
     def test_rev_root_invalid(self):
         repos.create(os.path.join(self.test_dir, "foo"))
index 3301f11d4188b603632d97b9040fe9611eb467ac..97ee6f9cc758ead22c5a5205006e2de1d228c2a2 100644 (file)
@@ -15,7 +15,7 @@
 
 """Subversion ra library tests."""
 
-from StringIO import StringIO
+from io import BytesIO
 import os
 from unittest import SkipTest
 
@@ -121,7 +121,7 @@ class AdmTests(SubversionTestCase):
     def test_add_repos_file(self):
         repos_url = self.make_client("repos", "checkout")
         adm = wc.WorkingCopy(None, "checkout", True)
-        adm.add_repos_file("checkout/bar", StringIO("basecontents"), StringIO("contents"), {}, {})
+        adm.add_repos_file("checkout/bar", BytesIO(b"basecontents"), BytesIO(b"contents"), {}, {})
         self.assertEqual(b"basecontents", wc.get_pristine_contents("checkout/bar").read())
 
     def test_mark_missing_deleted(self):