Rev 838: Implement the unicode spec. in file:///data/jelmer/bzr-svn/0.4/

Jelmer Vernooij jelmer at samba.org
Fri Jan 18 04:05:55 GMT 2008


At file:///data/jelmer/bzr-svn/0.4/

------------------------------------------------------------
revno: 838
revision-id:jelmer at samba.org-20080117231919-xc808a0zydd2fz9a
parent: jelmer at samba.org-20080117222815-sq2efbyz39ajmxck
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: 0.4
timestamp: Fri 2008-01-18 00:19:19 +0100
message:
  Implement the unicode spec.
modified:
  fetch.py                       fetch.py-20060625004942-x2lfaib8ra707a8p-1
  fileids.py                     fileids.py-20060714013623-u5iiyqqnko11grcf-1
  logwalker.py                   logwalker.py-20060621215743-c13fhfnyzh1xzwh2-1
  repository.py                  repository.py-20060306123302-1f8c5069b3fe0265
  revids.py                      revids.py-20070416220458-36vfa0730cchevp1-1
  scheme.py                      scheme.py-20060516195850-95181aae6b272f9e
  tests/test_fetch.py            test_fetch.py-20070624210302-luvgwjmlfysk5qeq-1
  tests/test_fileids.py          test_fileids.py-20060622131341-19gyrlgqy8yl2od5-1
  tests/test_repos.py            test_repos.py-20060508151940-ddc49a59257ca712
  tests/test_revids.py           test_revids.py-20070516230044-d7x872cqi7xb4eow-1
  tests/test_scheme.py           test_scheme.py-20060621221855-va2xabhlxpmc9llx-1
  tests/test_upgrade.py          test_upgrade.py-20070106170128-64zt3eqggg4tng1c-1
  tests/test_workingtree.py      test_workingtree.py-20060622191524-0di7bc3q1ckdbybb-1
  workingtree.py                 workingtree.py-20060306120941-b083cb0fdd4a69de
=== modified file 'fetch.py'
--- a/fetch.py	2007-12-22 21:27:52 +0000
+++ b/fetch.py	2008-01-17 23:19:19 +0000
@@ -148,7 +148,7 @@
     def open_root(self, base_revnum, baton):
         if self.old_inventory.root is None:
             # First time the root is set
-            file_id = generate_file_id(self.source, self.revid, "")
+            file_id = generate_file_id(self.source, self.revid, u"")
             self.dir_baserev[file_id] = []
         else:
             assert self.old_inventory.root.revision is not None

=== modified file 'fileids.py'
--- a/fileids.py	2007-10-24 16:14:16 +0000
+++ b/fileids.py	2008-01-17 23:19:19 +0000
@@ -27,26 +27,45 @@
 
 from revids import escape_svn_path
 
-def generate_svn_file_id(uuid, revnum, branch, path):
+def generate_svn_file_id(uuid, revnum, branch, inv_path):
     """Create a file id identifying a Subversion file.
 
     :param uuid: UUID of the repository
-    :param revnu: Revision number at which the file was introduced.
+    :param revnum: Revision number at which the file was introduced.
     :param branch: Branch path of the branch in which the file was introduced.
-    :param path: Original path of the file within the branch
+    :param inv_path: Original path of the file within the inventory
     """
-    ret = "%d@%s:%s:%s" % (revnum, uuid, escape_svn_path(branch), escape_svn_path(path))
+    assert isinstance(uuid, str)
+    assert isinstance(revnum, int)
+    assert isinstance(branch, str)
+    assert isinstance(inv_path, unicode)
+    inv_path = inv_path.encode("utf-8")
+    ret = "%d@%s:%s:%s" % (revnum, uuid, escape_svn_path(branch), escape_svn_path(inv_path))
     if len(ret) > 150:
         ret = "%d@%s:%s;%s" % (revnum, uuid, 
                             escape_svn_path(branch),
-                            sha.new(path.encode('utf-8')).hexdigest())
+                            sha.new(inv_path).hexdigest())
     assert isinstance(ret, str)
     return osutils.safe_file_id(ret)
 
 
-def generate_file_id(repos, revid, path):
+def generate_file_id(repos, revid, inv_path):
+    """Generate a file id for a path created in a specific revision.
+
+    :note: This should not necessarily be the revnum in which the 
+        node first appeared in Subversion, but the revnum in which 
+        bzr-svn required a new file identity to be created.
+
+    :param repos: Repository object.
+    :param revid: bzr-svn revision id for the revision in which the path first
+                  appeared.
+    :param inv_path: Inventory path in the specified revision.
+    :return: A file id
+    """
+    assert isinstance(revid, str)
+    assert isinstance(inv_path, unicode)
     (branch, revnum, _) = repos.lookup_revision_id(revid)
-    return generate_svn_file_id(repos.uuid, revnum, branch, path)
+    return generate_svn_file_id(repos.uuid, revnum, branch, inv_path)
 
 
 def get_local_changes(paths, scheme, generate_revid, get_children=None):
@@ -143,7 +162,7 @@
         next_parent_revs = []
         if revnum == 0:
             assert branch == ""
-            return {"": (generate_svn_file_id(uuid, revnum, branch, ""), 
+            return {"": (generate_svn_file_id(uuid, revnum, branch, u""), 
               self.repos.generate_revision_id(revnum, branch, str(scheme)))}
 
         # No history -> empty map
@@ -165,7 +184,7 @@
 
         if len(next_parent_revs) == 0:
             if scheme.is_branch(""):
-                map = {"": (generate_svn_file_id(uuid, 0, "", ""), NULL_REVISION)}
+                map = {u"": (generate_svn_file_id(uuid, 0, "", u""), NULL_REVISION)}
             else:
                 map = {}
 
@@ -233,13 +252,15 @@
             data = changes[p]
 
             if data[0] in ('A', 'R'):
-                map[p] = new_file_id(p)
+                inv_p = p.decode("utf-8")
+                map[inv_p] = new_file_id(inv_p)
 
                 if data[1] is not None:
-                    mutter('%r copied from %r:%s' % (p, data[1], data[2]))
+                    mutter('%r copied from %r:%s' % (inv_p, data[1], data[2]))
                     if find_children is not None:
                         for c in find_children(data[1], data[2]):
-                            path = c.replace(data[1], p+"/", 1).replace("//", "/")
+                            inv_c = c.decode("utf-8")
+                            path = c.replace(data[1].decode("utf-8"), inv_p+"/", 1).replace(u"//", u"/")
                             map[path] = new_file_id(path)
                             mutter('added mapping %r -> %r' % (path, map[path]))
 

=== modified file 'logwalker.py'
--- a/logwalker.py	2007-12-15 19:23:21 +0000
+++ b/logwalker.py	2008-01-17 23:19:19 +0000
@@ -203,7 +203,7 @@
         :param path: Path to check for changes
         :param revnum: First revision to check
         """
-        assert isinstance(path, basestring)
+        assert isinstance(path, str)
         assert isinstance(revnum, int) and revnum >= 0
         self.fetch_revisions(revnum)
 

=== modified file 'repository.py'
--- a/repository.py	2008-01-17 18:37:40 +0000
+++ b/repository.py	2008-01-17 23:19:19 +0000
@@ -232,6 +232,7 @@
     :param revid: Revision id to convert.
     :return: Matching SVK feature identifier.
     """
+    assert isinstance(revid, str)
     (uuid, branch, revnum, _) = parse_svn_revision_id(revid)
     # TODO: What about renamed revisions? Should use 
     # repository.lookup_revision_id here.
@@ -521,7 +522,7 @@
         :return: Revision id of the left-hand-side parent or None if 
                   this is the first revision
         """
-        assert isinstance(path, basestring)
+        assert isinstance(path, str)
         assert isinstance(revnum, int)
 
         if not scheme.is_branch(path) and \
@@ -638,7 +639,7 @@
 
     def get_revision(self, revision_id):
         """See Repository.get_revision."""
-        if not revision_id or not isinstance(revision_id, basestring):
+        if not revision_id or not isinstance(revision_id, str):
             raise InvalidRevisionId(revision_id=revision_id, branch=self)
 
         (path, revnum, _) = self.lookup_revision_id(revision_id)
@@ -734,13 +735,14 @@
         :return: Tuple with branch path, revision number and scheme.
         """
         def get_scheme(name):
-            assert isinstance(name, basestring)
+            assert isinstance(name, str)
             return BranchingScheme.find_scheme(name)
 
         # Try a simple parse
         try:
             (uuid, branch_path, revnum, schemen) = parse_svn_revision_id(revid)
             assert isinstance(branch_path, str)
+            assert isinstance(schemen, str)
             if uuid == self.uuid:
                 return (branch_path, revnum, get_scheme(schemen))
             # If the UUID doesn't match, this may still be a valid revision
@@ -754,6 +756,7 @@
             (branch_path, min_revnum, max_revnum, \
                     scheme) = self.revmap.lookup_revid(revid)
             assert isinstance(branch_path, str)
+            assert isinstance(scheme, str)
             # Entry already complete?
             if min_revnum == max_revnum:
                 return (branch_path, min_revnum, get_scheme(scheme))
@@ -802,7 +805,7 @@
         # Find the branch property between min_revnum and max_revnum that 
         # added revid
         for (bp, rev) in self.follow_branch(branch_path, max_revnum, 
-                                            get_scheme(scheme)):
+                                            get_scheme(str(scheme))):
             try:
                 (entry_revno, entry_revid) = parse_revid_property(
                  self.branchprop_list.get_property_diff(bp, rev, 

=== modified file 'revids.py'
--- a/revids.py	2008-01-08 22:54:18 +0000
+++ b/revids.py	2008-01-17 23:19:19 +0000
@@ -34,8 +34,7 @@
     :param x: Path
     :return: Escaped path
     """
-    if isinstance(x, unicode):
-        x = x.encode("utf-8")
+    assert isinstance(x, str)
     return urllib.quote(x, "")
 unescape_svn_path = urllib.unquote
 
@@ -49,7 +48,7 @@
     """
 
     assert revid is not None
-    assert isinstance(revid, basestring)
+    assert isinstance(revid, str)
 
     if not revid.startswith(REVISION_ID_PREFIX):
         raise InvalidRevisionId(revid, "")
@@ -78,7 +77,7 @@
     :return: New revision id.
     """
     assert isinstance(revnum, int)
-    assert isinstance(path, basestring)
+    assert isinstance(path, str)
     assert revnum >= 0
     assert revnum > 0 or path == "", \
             "Trying to generate revid for (%r,%r)" % (path, revnum)
@@ -138,11 +137,12 @@
         :return: Tuple with path inside repository, minimum revision number, maximum revision number and 
             branching scheme.
         """
+        assert isinstance(revid, str)
         ret = self.cachedb.execute(
             "select path, min_revnum, max_revnum, scheme from revmap where revid='%s'" % revid).fetchone()
         if ret is None:
             raise NoSuchRevision(self, revid)
-        return (str(ret[0]), ret[1], ret[2], ret[3])
+        return (ret[0].encode("utf-8"), int(ret[1]), int(ret[2]), ret[3].encode("utf-8"))
 
     def lookup_branch_revnum(self, revnum, path, scheme):
         """Lookup a revision by revision number, branch path and branching scheme.
@@ -152,8 +152,8 @@
         :param scheme: Branching scheme name
         """
         assert isinstance(revnum, int)
-        assert isinstance(path, basestring)
-        assert isinstance(scheme, basestring)
+        assert isinstance(path, str)
+        assert isinstance(scheme, str)
         revid = self.cachedb.execute(
                 "select revid from revmap where max_revnum = min_revnum and min_revnum='%s' and path='%s' and scheme='%s'" % (revnum, path, scheme)).fetchone()
         if revid is not None:
@@ -162,8 +162,23 @@
 
     def insert_revid(self, revid, branch, min_revnum, max_revnum, scheme, 
                      dist_to_origin=None):
+        """Insert a revision id into the revision id cache.
+
+        :param revid: Revision id for which to insert metadata.
+        :param branch: Branch path at which the revision was seen
+        :param min_revnum: Minimum Subversion revision number in which the 
+                           revid was found
+        :param max_revnum: Maximum Subversion revision number in which the 
+                           revid was found
+        :param scheme: Name of the branching scheme with which the revision 
+                       was found
+        :param dist_to_origin: Optional distance to the origin of this branch.
+        """
         assert revid is not None and revid != ""
-        assert isinstance(scheme, basestring)
+        assert isinstance(scheme, str)
+        assert isinstance(branch, str)
+        assert isinstance(min_revnum, int) and isinstance(max_revnum, int)
+        assert dist_to_origin is None or isinstance(dist_to_origin, int)
         cursor = self.cachedb.execute(
             "update revmap set min_revnum = MAX(min_revnum,?), max_revnum = MIN(max_revnum, ?) WHERE revid=? AND path=? AND scheme=?",
             (min_revnum, max_revnum, revid, branch, scheme))
@@ -177,6 +192,11 @@
                 (revid, dist_to_origin))
 
     def lookup_dist_to_origin(self, revid):
+        """Lookup the number of lhs revisions between the revid and NULL_REVISIOn.
+        :param revid: Revision id of the revision for which to do the lookup.
+        :return: None if the distance is not known, or an integer.
+        """
+        assert isinstance(revid, str)
         revno = self.cachedb.execute(
                 "select dist_to_origin from revno_cache where revid='%s'" % revid).fetchone()
         if revno is not None and revno[0] is not None:

=== modified file 'scheme.py'
--- a/scheme.py	2007-10-29 12:46:23 +0000
+++ b/scheme.py	2008-01-17 23:19:19 +0000
@@ -129,7 +129,8 @@
 
         :param branch_list: List of know branch locations.
         """
-        if isinstance(branch_list, basestring):
+        assert isinstance(branch_list, list) or isinstance(branch_list, str)
+        if isinstance(branch_list, str):
             branch_list = bz2.decompress(urlsafe_b64decode(branch_list.encode("ascii").replace(".", "="))).splitlines()
         self.branch_list = [p.strip("/") for p in branch_list]
         self.split_branch_list = [p.split("/") for p in self.branch_list]

=== modified file 'tests/test_fetch.py'
--- a/tests/test_fetch.py	2008-01-08 19:02:26 +0000
+++ b/tests/test_fetch.py	2008-01-17 23:19:19 +0000
@@ -1289,7 +1289,7 @@
         tree = repos.revision_tree(
              repos.generate_revision_id(3, "branches/foobranch", "trunk0"))
 
-        self.assertEqual(generate_svn_file_id(repos.uuid, 1, "trunk", ""), tree.inventory.root.file_id)
+        self.assertEqual(generate_svn_file_id(repos.uuid, 1, "trunk", u""), tree.inventory.root.file_id)
 
     def test_fetch_odd(self):
         repos_url = self.make_client('d', 'dc')

=== modified file 'tests/test_fileids.py'
--- a/tests/test_fileids.py	2007-09-23 23:48:30 +0000
+++ b/tests/test_fileids.py	2008-01-17 23:19:19 +0000
@@ -167,33 +167,29 @@
         self.repos = MockRepo()
 
     def test_generate_file_id_root(self):
-        self.assertEqual("2 at uuid:bp:", generate_file_id(self.repos, generate_svn_revision_id("uuid", 2, "bp", "bla"), ""))
+        self.assertEqual("2 at uuid:bp:", generate_file_id(self.repos, generate_svn_revision_id("uuid", 2, "bp", "bla"), u""))
 
     def test_generate_file_id_path(self):
         self.assertEqual("2 at uuid:bp:mypath", 
-                generate_file_id(self.repos, generate_svn_revision_id("uuid", 2, "bp", "bla"), "mypath"))
+                generate_file_id(self.repos, generate_svn_revision_id("uuid", 2, "bp", "bla"), u"mypath"))
 
     def test_generate_file_id_long(self):
         dir = "this/is/a" + ("/very"*40) + "/long/path/"
         self.assertEqual("2 at uuid:bp;" + sha1(dir+"filename"), 
-                generate_file_id(self.repos, generate_svn_revision_id("uuid", 2, "bp", "bla"), dir+"filename"))
+                generate_file_id(self.repos, generate_svn_revision_id("uuid", 2, "bp", "bla"), dir+u"filename"))
 
     def test_generate_file_id_long_nordic(self):
         dir = "this/is/a" + ("/very"*40) + "/long/path/"
         self.assertEqual("2 at uuid:bp;" + sha1((dir+u"filename\x2c\x8a").encode('utf-8')), 
                 generate_file_id(self.repos, generate_svn_revision_id("uuid", 2, "bp", "bla"), dir+u"filename\x2c\x8a"))
 
-    def test_generate_revid_special_char_ascii(self):
-        self.assertEqual("2 at uuid:bp:mypath%2C%8A", 
-                generate_file_id(self.repos, generate_svn_revision_id("uuid", 2, "bp", "bla"), "mypath\x2c\x8a"))
-
     def test_generate_file_id_special_char(self):
         self.assertEqual("2 at uuid:bp:mypath%2C%C2%8A",
                          generate_file_id(self.repos, generate_svn_revision_id("uuid", 2, "bp","bla"), u"mypath\x2c\x8a"))
 
     def test_generate_svn_file_id(self):
         self.assertEqual("2 at uuid:bp:path", 
-                generate_svn_file_id("uuid", 2, "bp", "path"))
+                generate_svn_file_id("uuid", 2, "bp", u"path"))
 
     def test_generate_svn_file_id_nordic(self):
         self.assertEqual("2 at uuid:bp:%C3%A6%C3%B8%C3%A5", 
@@ -201,7 +197,7 @@
 
     def test_generate_svn_file_id_nordic_branch(self):
         self.assertEqual("2 at uuid:%C3%A6:%C3%A6%C3%B8%C3%A5", 
-                generate_svn_file_id("uuid", 2, u"\xe6", u"\xe6\xf8\xe5"))
+                generate_svn_file_id("uuid", 2, u"\xe6".encode('utf-8'), u"\xe6\xf8\xe5"))
 
 
 class TestFileMapping(TestCase):
@@ -292,7 +288,7 @@
 
     def test_empty(self):
         scheme = TrunkBranchingScheme()
-        self.assertEqual({"": (generate_svn_file_id(self.repos.uuid, 0, "", ""), self.repos.generate_revision_id(0, "", "trunk0"))}, 
+        self.assertEqual({"": (generate_svn_file_id(self.repos.uuid, 0, "", u""), self.repos.generate_revision_id(0, "", "trunk0"))}, 
                          self.repos.get_fileid_map(0, "", scheme))
 
     def test_empty_trunk(self):
@@ -300,7 +296,7 @@
         self.build_tree({"dc/trunk": None})
         self.client_add("dc/trunk")
         self.client_commit("dc", "Msg")
-        self.assertEqual({"": (generate_svn_file_id(self.repos.uuid, 1, "trunk", ""), self.repos.generate_revision_id(1, "trunk", "trunk0"))}, 
+        self.assertEqual({"": (generate_svn_file_id(self.repos.uuid, 1, "trunk", u""), self.repos.generate_revision_id(1, "trunk", "trunk0"))}, 
                 self.repos.get_fileid_map(1, "trunk", scheme))
 
     def test_change_parent(self):
@@ -311,7 +307,7 @@
         self.build_tree({"dc/trunk/file": 'data'})
         self.client_add("dc/trunk/file")
         self.client_commit("dc", "Msg")
-        self.assertEqual({"": (generate_svn_file_id(self.repos.uuid, 1, "trunk", ""), self.repos.generate_revision_id(2, "trunk", "trunk0")), "file": (generate_svn_file_id(self.repos.uuid, 2, "trunk", "file"), self.repos.generate_revision_id(2, "trunk", "trunk0"))}, self.repos.get_fileid_map(2, "trunk", scheme))
+        self.assertEqual({"": (generate_svn_file_id(self.repos.uuid, 1, "trunk", u""), self.repos.generate_revision_id(2, "trunk", "trunk0")), "file": (generate_svn_file_id(self.repos.uuid, 2, "trunk", u"file"), self.repos.generate_revision_id(2, "trunk", "trunk0"))}, self.repos.get_fileid_map(2, "trunk", scheme))
 
     def test_change_updates(self):
         scheme = TrunkBranchingScheme()
@@ -323,7 +319,7 @@
         self.client_commit("dc", "Msg")
         self.build_tree({"dc/trunk/file": 'otherdata'})
         self.client_commit("dc", "Msg")
-        self.assertEqual({"": (generate_svn_file_id(self.repos.uuid, 1, "trunk", ""), self.repos.generate_revision_id(3, "trunk", "trunk0")), "file": (generate_svn_file_id(self.repos.uuid, 2, "trunk", "file"), self.repos.generate_revision_id(3, "trunk", "trunk0"))}, self.repos.get_fileid_map(3, "trunk", scheme))
+        self.assertEqual({"": (generate_svn_file_id(self.repos.uuid, 1, "trunk", u""), self.repos.generate_revision_id(3, "trunk", "trunk0")), "file": (generate_svn_file_id(self.repos.uuid, 2, "trunk", u"file"), self.repos.generate_revision_id(3, "trunk", "trunk0"))}, self.repos.get_fileid_map(3, "trunk", scheme))
 
     def test_sibling_unrelated(self):
         scheme = TrunkBranchingScheme()
@@ -339,7 +335,7 @@
         self.build_tree({"dc/trunk/file": 'otherdata'})
         self.client_commit("dc", "Msg")
         self.client_update("dc")
-        self.assertEqual({"": (generate_svn_file_id(self.repos.uuid, 1, "trunk", ""), self.repos.generate_revision_id(3, "trunk", "trunk0")), "bar": (generate_svn_file_id(self.repos.uuid, 2, "trunk", "bar"), self.repos.generate_revision_id(2, "trunk", "trunk0")), "file": (generate_svn_file_id(self.repos.uuid, 2, "trunk", "file"), self.repos.generate_revision_id(3, "trunk", "trunk0"))}, self.repos.get_fileid_map(3, "trunk", scheme))
+        self.assertEqual({"": (generate_svn_file_id(self.repos.uuid, 1, "trunk", u""), self.repos.generate_revision_id(3, "trunk", "trunk0")), "bar": (generate_svn_file_id(self.repos.uuid, 2, "trunk", u"bar"), self.repos.generate_revision_id(2, "trunk", "trunk0")), "file": (generate_svn_file_id(self.repos.uuid, 2, "trunk", u"file"), self.repos.generate_revision_id(3, "trunk", "trunk0"))}, self.repos.get_fileid_map(3, "trunk", scheme))
 
     def test_copy(self):
         scheme = TrunkBranchingScheme()
@@ -352,8 +348,8 @@
         self.client_copy("dc/trunk/file", "dc/trunk/bar")
         self.client_commit("dc", "Msg")
         self.assertEqual({
-            "": (generate_svn_file_id(self.repos.uuid, 1, "trunk", ""), self.repos.generate_revision_id(3, "trunk", "trunk0")), 
-            "bar": (generate_svn_file_id(self.repos.uuid, 3, "trunk", "bar"), self.repos.generate_revision_id(3, "trunk", "trunk0")), "file": (generate_svn_file_id(self.repos.uuid, 2, "trunk", "file"), self.repos.generate_revision_id(2, "trunk", "trunk0"))}, self.repos.get_fileid_map(3, "trunk", scheme))
+            "": (generate_svn_file_id(self.repos.uuid, 1, "trunk", u""), self.repos.generate_revision_id(3, "trunk", "trunk0")), 
+            "bar": (generate_svn_file_id(self.repos.uuid, 3, "trunk", u"bar"), self.repos.generate_revision_id(3, "trunk", "trunk0")), "file": (generate_svn_file_id(self.repos.uuid, 2, "trunk", u"file"), self.repos.generate_revision_id(2, "trunk", "trunk0"))}, self.repos.get_fileid_map(3, "trunk", scheme))
 
     def test_copy_nested_modified(self):
         scheme = TrunkBranchingScheme()
@@ -368,14 +364,14 @@
         self.build_tree({"dc/trunk/bar/file": "data2"})
         self.client_commit("dc", "Msg")
         self.assertEqual({
-          "": (generate_svn_file_id(self.repos.uuid, 1, "trunk", ""), 
+          "": (generate_svn_file_id(self.repos.uuid, 1, "trunk", u""), 
             self.repos.generate_revision_id(3, "trunk", "trunk0")), 
-          "dir": (generate_svn_file_id(self.repos.uuid, 2, "trunk", "dir"), 
+          "dir": (generate_svn_file_id(self.repos.uuid, 2, "trunk", u"dir"), 
                 self.repos.generate_revision_id(2, "trunk", "trunk0")),
-          "dir/file": (generate_svn_file_id(self.repos.uuid, 2, "trunk", "dir/file"), 
+          "dir/file": (generate_svn_file_id(self.repos.uuid, 2, "trunk", u"dir/file"), 
               self.repos.generate_revision_id(2, "trunk", "trunk0")),
-          "bar": (generate_svn_file_id(self.repos.uuid, 3, "trunk", "bar"), 
+          "bar": (generate_svn_file_id(self.repos.uuid, 3, "trunk", u"bar"), 
               self.repos.generate_revision_id(3, "trunk", "trunk0")),
-          "bar/file": (generate_svn_file_id(self.repos.uuid, 3, "trunk", "bar/file"), 
+          "bar/file": (generate_svn_file_id(self.repos.uuid, 3, "trunk", u"bar/file"), 
               self.repos.generate_revision_id(3, "trunk", "trunk0"))},
             self.repos.get_fileid_map(3, "trunk", scheme))

=== modified file 'tests/test_repos.py'
--- a/tests/test_repos.py	2008-01-17 18:37:40 +0000
+++ b/tests/test_repos.py	2008-01-17 23:19:19 +0000
@@ -109,7 +109,7 @@
         repos_url = self.make_client("a", "dc")
         repos = Repository.open(repos_url)
         revid = repos.generate_revision_id(0, "", "none")
-        self.assertEqual({"": (generate_file_id(MockRepo(repos.uuid), revid, ""), revid)}, repos.get_fileid_map(0, "", NoBranchingScheme()))
+        self.assertEqual({u"": (generate_file_id(MockRepo(repos.uuid), revid, u""), revid)}, repos.get_fileid_map(0, "", NoBranchingScheme()))
 
     def test_generate_revision_id_forced_revid(self):
         repos_url = self.make_client("a", "dc")
@@ -1197,7 +1197,7 @@
         self.assertEqual("foobar%b", unescape_svn_path("foobar%25b"))
 
     def test_escape_svn_path_nordic(self):
-        self.assertEqual("foobar%C3%A6", escape_svn_path(u"foobar\xe6"))
+        self.assertEqual("foobar%C3%A6", escape_svn_path(u"foobar\xe6".encode("utf-8")))
 
 
 class SvnRepositoryFormatTests(TestCase):

=== modified file 'tests/test_revids.py'
--- a/tests/test_revids.py	2007-12-06 15:54:08 +0000
+++ b/tests/test_revids.py	2008-01-17 23:19:19 +0000
@@ -110,16 +110,12 @@
                   generate_svn_revision_id("myuuid", 5, "branch/path", "undefined"))
 
     def test_generate_revid_special_char(self):
-        self.assertEqual(u"svn-v%d-undefined:myuuid:branch%%2C:5" % MAPPING_VERSION, 
-             generate_svn_revision_id("myuuid", 5, u"branch\x2c", "undefined"))
-
-    def test_generate_revid_special_char_ascii(self):
         self.assertEqual("svn-v%d-undefined:myuuid:branch%%2C:5" % MAPPING_VERSION, 
              generate_svn_revision_id("myuuid", 5, "branch\x2c", "undefined"))
 
     def test_generate_revid_nordic(self):
         self.assertEqual("svn-v%d-undefined:myuuid:branch%%C3%%A6:5" % MAPPING_VERSION, 
-             generate_svn_revision_id("myuuid", 5, u"branch\xe6", "undefined"))
+             generate_svn_revision_id("myuuid", 5, u"branch\xe6".encode("utf-8"), "undefined"))
 
     def test_parse_revid_simple(self):
         self.assertEqual(("uuid", "", 4, "undefined"),

=== modified file 'tests/test_scheme.py'
--- a/tests/test_scheme.py	2007-10-29 12:46:23 +0000
+++ b/tests/test_scheme.py	2008-01-17 23:19:19 +0000
@@ -142,10 +142,6 @@
         self.scheme = ListBranchingScheme('QlpoOTFBWSZTWXb2s-UAAADBAAAQAQCgACGYGYQYXckU4UJB29rPlA..')
         self.assertEquals(["foo"], self.scheme.branch_list)
 
-    def test_create_from_unicode(self):
-        self.scheme = ListBranchingScheme(u'QlpoOTFBWSZTWXb2s-UAAADBAAAQAQCgACGYGYQYXckU4UJB29rPlA..')
-        self.assertEquals(["foo"], self.scheme.branch_list)
-
     def test_is_tag_empty(self):
         self.assertFalse(self.scheme.is_tag(""))
 

=== modified file 'tests/test_upgrade.py'
--- a/tests/test_upgrade.py	2007-10-23 12:31:34 +0000
+++ b/tests/test_upgrade.py	2008-01-17 23:19:19 +0000
@@ -157,7 +157,7 @@
 
         tree = newrepos.revision_tree("customrev-svn%d-upgrade" % MAPPING_VERSION)
         self.assertEqual("specificid", tree.inventory.path2id("a"))
-        self.assertEqual(generate_svn_file_id(oldrepos.uuid, 1, "", "a"), 
+        self.assertEqual(generate_svn_file_id(oldrepos.uuid, 1, "", u"a"), 
                          tree.inventory.path2id("b"))
 
     @skip_no_rebase

=== modified file 'tests/test_workingtree.py'
--- a/tests/test_workingtree.py	2007-10-22 18:42:08 +0000
+++ b/tests/test_workingtree.py	2008-01-17 23:19:19 +0000
@@ -283,7 +283,7 @@
         self.assertEqual(wt.branch.generate_revision_id(0), 
                          wt.basis_tree().inventory.revision_id)
         inv = Inventory()
-        root_id = generate_svn_file_id(wt.branch.repository.uuid, 0, "", "")
+        root_id = generate_svn_file_id(wt.branch.repository.uuid, 0, "", u"")
         inv.revision_id = wt.branch.generate_revision_id(0)
         inv.add_path('', 'directory', root_id).revision = inv.revision_id
                               

=== modified file 'workingtree.py'
--- a/workingtree.py	2007-12-23 03:25:57 +0000
+++ b/workingtree.py	2008-01-17 23:19:19 +0000
@@ -222,11 +222,11 @@
         """Generate a bzr file id from a Subversion file name. 
         
         :param revnum: Revision number.
-        :param path: Absolute path.
+        :param path: Absolute path within the Subversion repository.
         :return: Tuple with file id and revision id.
         """
         assert isinstance(revnum, int) and revnum >= 0
-        assert isinstance(path, basestring)
+        assert isinstance(path, str)
 
         rp = self.branch.unprefix(path)
         entry = self.base_tree.id_map[rp]




More information about the bazaar-commits mailing list