Rev 1028: Merge 0.4. in file:///data/jelmer/bzr-svn/pyrex/

Jelmer Vernooij jelmer at samba.org
Fri Mar 21 19:03:36 GMT 2008


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

------------------------------------------------------------
revno: 1028
revision-id: jelmer at samba.org-20080321190335-mqy0tnds0r65b8h0
parent: jelmer at samba.org-20080321190236-st4f4dm7uh4nmedg
parent: jelmer at samba.org-20080321185710-2t0sfckz99oygfr8
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: pyrex
timestamp: Fri 2008-03-21 20:03:35 +0100
message:
  Merge 0.4.
modified:
  NEWS                           news-20061231030336-h9fhq245ie0de8bs-1
  __init__.py                    __init__.py-20051008155114-eae558e6cf149e1d
  commit.py                      commit.py-20060607190346-qvq128wgfubhhgm2-1
  fileids.py                     fileids.py-20060714013623-u5iiyqqnko11grcf-1
  repository.py                  repository.py-20060306123302-1f8c5069b3fe0265
  tests/test_fileids.py          test_fileids.py-20060622131341-19gyrlgqy8yl2od5-1
  tests/test_repos.py            test_repos.py-20060508151940-ddc49a59257ca712
  tree.py                        tree.py-20060624222557-dudlwqcmkf22lt2s-1
  workingtree.py                 workingtree.py-20060306120941-b083cb0fdd4a69de
    ------------------------------------------------------------
    revno: 950.1.15
    revision-id: jelmer at samba.org-20080321185710-2t0sfckz99oygfr8
    parent: jelmer at samba.org-20080321183614-t84oj8ncv2qssjwm
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: 0.4
    timestamp: Fri 2008-03-21 19:57:10 +0100
    message:
      Change get_revision_graph() to behave the same way as the bzrlib implementation.
    modified:
      repository.py                  repository.py-20060306123302-1f8c5069b3fe0265
      tests/test_repos.py            test_repos.py-20060508151940-ddc49a59257ca712
    ------------------------------------------------------------
    revno: 950.1.14
    revision-id: jelmer at samba.org-20080321183614-t84oj8ncv2qssjwm
    parent: jelmer at samba.org-20080321172256-mpww0zst86b0lp2i
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: 0.4
    timestamp: Fri 2008-03-21 19:36:14 +0100
    message:
      Split caching layer out of file id map code.
    modified:
      fileids.py                     fileids.py-20060714013623-u5iiyqqnko11grcf-1
      repository.py                  repository.py-20060306123302-1f8c5069b3fe0265
      tests/test_fileids.py          test_fileids.py-20060622131341-19gyrlgqy8yl2od5-1
    ------------------------------------------------------------
    revno: 950.1.13
    revision-id: jelmer at samba.org-20080321172256-mpww0zst86b0lp2i
    parent: jelmer at samba.org-20080321171421-hn9kb2ykx44spe7n
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: 0.4
    timestamp: Fri 2008-03-21 18:22:56 +0100
    message:
      use full branch property list functions rather than doing single property queries.
    modified:
      commit.py                      commit.py-20060607190346-qvq128wgfubhhgm2-1
      tree.py                        tree.py-20060624222557-dudlwqcmkf22lt2s-1
      workingtree.py                 workingtree.py-20060306120941-b083cb0fdd4a69de
    ------------------------------------------------------------
    revno: 950.1.12
    revision-id: jelmer at samba.org-20080321171421-hn9kb2ykx44spe7n
    parent: jelmer at samba.org-20080321163739-g4ud3ipvuxdnbnil
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: 0.4
    timestamp: Fri 2008-03-21 18:14:21 +0100
    message:
      Fix get_revision_graph() tests.
    modified:
      repository.py                  repository.py-20060306123302-1f8c5069b3fe0265
      tests/test_repos.py            test_repos.py-20060508151940-ddc49a59257ca712
    ------------------------------------------------------------
    revno: 950.1.11
    revision-id: jelmer at samba.org-20080321163739-g4ud3ipvuxdnbnil
    parent: jelmer at samba.org-20080321160952-ld57yla8mx7sgpc1
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: 0.4
    timestamp: Fri 2008-03-21 17:37:39 +0100
    message:
      --prefix is now determined from the specified url in svn-import.
    modified:
      NEWS                           news-20061231030336-h9fhq245ie0de8bs-1
      __init__.py                    __init__.py-20051008155114-eae558e6cf149e1d
    ------------------------------------------------------------
    revno: 950.1.10
    revision-id: jelmer at samba.org-20080321160952-ld57yla8mx7sgpc1
    parent: jelmer at samba.org-20080321150137-mk2q5ehxvyf1wo2c
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: 0.4
    timestamp: Fri 2008-03-21 17:09:52 +0100
    message:
      Change get_ancestry() to use get_graph().
    modified:
      repository.py                  repository.py-20060306123302-1f8c5069b3fe0265
      tests/test_repos.py            test_repos.py-20060508151940-ddc49a59257ca712
=== modified file 'NEWS'
--- a/NEWS	2008-03-21 15:49:19 +0000
+++ b/NEWS	2008-03-21 19:03:35 +0000
@@ -14,6 +14,8 @@
 
    * Use caching revision graph.
 
+   * --prefix is now determined from the specified url in svn-import. (#160335)
+
   BUGS
   
    * Fix compatibility with bzr 1.3.
@@ -22,6 +24,8 @@
 
    * Properly warn when trying to open a working copy with a newer version.
 
+   * More correct implementation of Repository.get_ancestry(). 
+
   INTERNALS
 
    * Allow multiple mappings to be available at the same time.

=== modified file '__init__.py'
--- a/__init__.py	2008-03-18 21:52:58 +0000
+++ b/__init__.py	2008-03-21 19:03:35 +0000
@@ -157,8 +157,10 @@
     @display_command
     def run(self, from_location, to_location=None, trees=False, 
             standalone=False, scheme=None, all=False, prefix=None):
-        from bzrlib.errors import BzrCommandError, NoRepositoryPresent
+        from bzrlib.branch import Branch
         from bzrlib.bzrdir import BzrDir
+        from bzrlib.errors import BzrCommandError, NoRepositoryPresent, NotBranchError
+        from bzrlib import urlutils
         from convert import convert_repository
         from repository import SvnRepository
         import os
@@ -184,8 +186,20 @@
         try:
             from_repos = from_dir.open_repository()
         except NoRepositoryPresent, e:
-            raise BzrCommandError("No Repository found at %s. "
-                "For individual branches, use 'bzr branch'." % from_location)
+            try:
+                Branch.open(from_location)
+                raise BzrCommandError("No Repository found at %s. "
+                    "For individual branches, use 'bzr branch'." % from_location)
+            except NotBranchError:
+                if prefix is not None:
+                    raise BzrCommandError("Path inside repository specified and --prefix specified")
+                from_repos = from_dir.find_repository()
+                prefix = urlutils.relative_url(from_repos.base, from_location)
+                self.outf.write("Importing branches below %s\n" % 
+                        urlutils.unescape_for_display(prefix, self.outf.encoding))
+
+        if prefix is not None:
+            prefix = prefix.strip("/") + "/"
 
         if not isinstance(from_repos, SvnRepository):
             raise BzrCommandError(

=== modified file 'commit.py'
--- a/commit.py	2008-03-21 12:44:58 +0000
+++ b/commit.py	2008-03-21 19:03:35 +0000
@@ -146,14 +146,14 @@
 
         self.modified_files = {}
         self.modified_dirs = set()
-        def get_branch_file_property(name, default):
-            if self.base_revid is None:
-                return default
-            return self.repository.branchprop_list.get_property(self.base_path, self.base_revnum, name, default)
-        (self._svn_revprops, self._svnprops) = self.base_mapping.export_revision(self.branch.get_branch_path(), timestamp, timezone, committer, revprops, revision_id, self.base_revno+1, merges, get_branch_file_property)
+        if self.base_revid is None:
+            base_branch_props = {}
+        else:
+            base_branch_props = self.repository.branchprop_list.get_properties(self.base_path, self.base_revnum)
+        (self._svn_revprops, self._svnprops) = self.base_mapping.export_revision(self.branch.get_branch_path(), timestamp, timezone, committer, revprops, revision_id, self.base_revno+1, merges, base_branch_props)
 
         if len(merges) > 0:
-            old_svk_features = parse_svk_features(get_branch_file_property(SVN_PROP_SVK_MERGE, ""))
+            old_svk_features = parse_svk_features(base_branch_props.get(SVN_PROP_SVK_MERGE, ""))
             svk_features = set(old_svk_features)
 
             # SVK compatibility

=== modified file 'fileids.py'
--- a/fileids.py	2008-02-03 14:52:23 +0000
+++ b/fileids.py	2008-03-21 18:36:14 +0000
@@ -55,6 +55,29 @@
 
 FILEIDMAP_VERSION = 1
 
+def simple_apply_changes(new_file_id, changes, find_children=None):
+    """Simple function that can apply file id changes.
+    
+    Does not track renames. """
+    map = {}
+    for p in sorted(changes.keys()):
+        data = changes[p]
+
+        if data[0] in ('A', 'R'):
+            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' % (inv_p, data[1], data[2]))
+                if find_children is not None:
+                    for c in find_children(data[1], data[2]):
+                        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]))
+
+    return map
+
 class FileIdMap:
     """File id store. 
 
@@ -62,25 +85,9 @@
 
     revnum -> branch -> path -> fileid
     """
-    def __init__(self, repos, cache_transport):
+    def __init__(self, apply_changes_fn, repos):
+        self.apply_changes_fn = apply_changes_fn
         self.repos = repos
-        self.idmap_knit = KnitVersionedFile("fileidmap-v%d" % FILEIDMAP_VERSION, cache_transport, create=True)
-
-    def save(self, revid, parent_revids, _map):
-        mutter('saving file id map for %r' % revid)
-                
-        self.idmap_knit.add_lines_with_ghosts(revid, parent_revids, 
-                ["%s\t%s\t%s\n" % (urllib.quote(filename), urllib.quote(_map[filename][0]), 
-                                        urllib.quote(_map[filename][1])) for filename in sorted(_map.keys())])
-
-    def load(self, revid):
-        map = {}
-        for line in self.idmap_knit.get_lines(revid):
-            (filename, id, create_revid) = line.rstrip("\n").split("\t", 3)
-            map[urllib.unquote(filename)] = (urllib.unquote(id), urllib.unquote(create_revid))
-            assert isinstance(map[urllib.unquote(filename)][0], str)
-
-        return map
 
     def apply_changes(self, uuid, revnum, branch, global_changes, 
                       renames, mapping, find_children=None):
@@ -104,11 +111,55 @@
             get_children = None
 
         def new_file_id(x):
-            return mapping.generate_file_id(self.repos.uuid, revnum, branch, x)
+            return mapping.generate_file_id(uuid, revnum, branch, x)
          
-        idmap = self._apply_changes(new_file_id, changes, get_children)
+        idmap = self.apply_changes_fn(new_file_id, changes, get_children)
         idmap.update(renames)
-        return idmap
+        return (idmap, changes)
+
+    def get_map(self, uuid, revnum, branch, renames_cb, mapping):
+        raise NotImplementedError(self.get_map)
+
+    def update_map(self, map, revid, idmap, changes):
+        for p in changes:
+            if changes[p][0] == 'M' and not idmap.has_key(p):
+                idmap[p] = map[p][0]
+
+        map.update(dict([(x, (str(idmap[x]), revid)) for x in idmap]))
+
+        # Mark all parent paths as changed
+        for p in idmap:
+            parts = p.split("/")
+            for j in range(1, len(parts)+1):
+                parent = "/".join(parts[0:len(parts)-j])
+                assert map.has_key(parent), "Parent item %s of %s doesn't exist in map" % (parent, p)
+                if map[parent][1] == revid:
+                    break
+                map[parent] = map[parent][0], revid
+
+
+class CachingFileIdMap:
+    """A file id map that uses a cache."""
+    def __init__(self, cache_transport, actual):
+        self.idmap_knit = KnitVersionedFile("fileidmap-v%d" % FILEIDMAP_VERSION, cache_transport, create=True)
+        self.actual = actual
+        self.apply_changes = actual.apply_changes
+
+    def save(self, revid, parent_revids, _map):
+        mutter('saving file id map for %r' % revid)
+                
+        self.idmap_knit.add_lines_with_ghosts(revid, parent_revids, 
+                ["%s\t%s\t%s\n" % (urllib.quote(filename), urllib.quote(_map[filename][0]), 
+                                        urllib.quote(_map[filename][1])) for filename in sorted(_map.keys())])
+
+    def load(self, revid):
+        map = {}
+        for line in self.idmap_knit.get_lines(revid):
+            (filename, id, create_revid) = line.rstrip("\n").split("\t", 3)
+            map[urllib.unquote(filename)] = (urllib.unquote(id), urllib.unquote(create_revid))
+            assert isinstance(map[urllib.unquote(filename)][0], str)
+
+        return map
 
     def get_map(self, uuid, revnum, branch, renames_cb, mapping):
         """Make sure the map is up to date until revnum."""
@@ -117,8 +168,8 @@
         next_parent_revs = []
         if revnum == 0:
             assert branch == ""
-            return {"": (mapping.generate_file_id(uuid, revnum, branch, u""), 
-              self.repos.generate_revision_id(revnum, branch, mapping))}
+            return {"": (mapping.generate_file_id(uuid, 0, "", u""), 
+              self.repos.generate_revision_id(0, "", mapping))}
 
         quickrevidmap = {}
 
@@ -154,41 +205,17 @@
                 def log_find_children(path, revnum):
                     expensive = True
                     return self.repos._log.find_children(path, revnum)
-                changes = get_local_changes(global_changes, mapping,
-                                            self.repos.generate_revision_id, 
-                                            log_find_children)
+
+                (revnum, branch) = quickrevidmap[revid]
+                (idmap, changes) = self.actual.apply_changes(self.repos.uuid, revnum, branch, 
+                                          global_changes, renames_cb(revid), mapping,
+                                          log_find_children)
                 pb.update('generating file id map', i, len(todo))
 
-                def find_children(path, revid):
-                    (revnum, bp) = quickrevidmap[revid]
-                    for p in log_find_children(bp+"/"+path, revnum):
-                        yield mapping.unprefix(bp, p)
-
                 parent_revs = next_parent_revs
 
-                def new_file_id(x):
-                    (revnum, branch) = quickrevidmap[revid]
-                    return mapping.generate_file_id(self.repos.uuid, revnum, branch, x)
-                
-                revmap = self._apply_changes(new_file_id, changes, find_children)
-                revmap.update(renames_cb(revid))
-
-                for p in changes:
-                    if changes[p][0] == 'M' and not revmap.has_key(p):
-                        revmap[p] = map[p][0]
-
-                map.update(dict([(x, (str(revmap[x]), revid)) for x in revmap]))
-
-                # Mark all parent paths as changed
-                for p in revmap:
-                    parts = p.split("/")
-                    for j in range(1, len(parts)+1):
-                        parent = "/".join(parts[0:len(parts)-j])
-                        assert map.has_key(parent), "Parent item %s of %s doesn't exist in map" % (parent, p)
-                        if map[parent][1] == revid:
-                            break
-                        map[parent] = map[parent][0], revid
-                        
+                self.actual.update_map(map, revid, idmap, changes)
+                       
                 saved = False
                 if i % 500 == 0 or expensive:
                     self.save(revid, parent_revs, map)
@@ -202,24 +229,10 @@
         return map
 
 
-class SimpleFileIdMap(FileIdMap):
-    @staticmethod
-    def _apply_changes(new_file_id, changes, find_children=None):
-        map = {}
-        for p in sorted(changes.keys()):
-            data = changes[p]
-
-            if data[0] in ('A', 'R'):
-                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' % (inv_p, data[1], data[2]))
-                    if find_children is not None:
-                        for c in find_children(data[1], data[2]):
-                            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]))
-
-        return map
+class SimpleFileIdMap(CachingFileIdMap):
+    def __init__(self, repos, cache_transport):
+        CachingFileIdMap.__init__(self, cache_transport, FileIdMap(simple_apply_changes, repos))
+        self.repos = repos
+
+
+

=== modified file 'repository.py'
--- a/repository.py	2008-03-21 15:49:19 +0000
+++ b/repository.py	2008-03-21 19:03:35 +0000
@@ -294,7 +294,7 @@
     def transform_fileid_map(self, uuid, revnum, branch, changes, renames, 
                              mapping):
         return self.fileid_map.apply_changes(uuid, revnum, branch, changes, 
-                                             renames, mapping)
+                                             renames, mapping)[0]
 
     def all_revision_ids(self, mapping=None):
         if mapping is None:
@@ -321,26 +321,13 @@
 
     def get_ancestry(self, revision_id, topo_sorted=True):
         """See Repository.get_ancestry().
-        
-        Note: only the first bit is topologically ordered!
         """
-        if revision_id is None: 
-            return [None]
-
-        (path, revnum, mapping) = self.lookup_revision_id(revision_id)
-
-        ancestry = [revision_id]
-
-        svn_revprops = lazy_dict(lambda: self.transport.revprop_list(revnum))
-        svn_fileprops = lazy_dict(lambda: self.branchprop_list.get_properties(path, revnum))
-        ancestry.extend(mapping.get_rhs_ancestors(path, svn_revprops, svn_fileprops))
-
-        if revnum > 0:
-            for (branch, rev) in self.follow_branch(path, revnum - 1, mapping):
-                ancestry.append(
-                    self.generate_revision_id(rev, branch, mapping))
-
-        ancestry.append(None)
+        ancestry = []
+        graph = self.get_graph()
+        for rev, parents in graph.iter_ancestry([revision_id]):
+            if rev == NULL_REVISION:
+                rev = None
+            ancestry.append(rev)
         ancestry.reverse()
         return ancestry
 
@@ -836,7 +823,15 @@
 
         ret = {}
         for (revid, parents) in graph.iter_ancestry(revision_ids):
-            ret[revid] = parents
+            if revid == NULL_REVISION:
+                continue
+            if (NULL_REVISION,) == parents:
+                ret[revid] = ()
+            else:
+                ret[revid] = parents
+
+        if revision_id is not None and revision_id != NULL_REVISION and ret[revision_id] is None:
+            raise NoSuchRevision(self, revision_id)
 
         return ret
 

=== modified file 'tests/test_fileids.py'
--- a/tests/test_fileids.py	2008-02-04 13:29:23 +0000
+++ b/tests/test_fileids.py	2008-03-21 18:36:14 +0000
@@ -21,7 +21,7 @@
 from bzrlib.trace import mutter
 from bzrlib.tests import TestCase
 
-from fileids import SimpleFileIdMap
+from fileids import SimpleFileIdMap, simple_apply_changes
 from mapping import BzrSvnMappingv3FileProps
 from scheme import TrunkBranchingScheme, NoBranchingScheme
 from tests import TestCaseWithSubversionRepository
@@ -175,7 +175,7 @@
                 if renames.has_key(r) and renames[r].has_key(x):
                     return renames[r][x]
                 return self.mapping.generate_file_id("uuid", revnum, branchpath, x)
-            revmap = SimpleFileIdMap._apply_changes(new_file_id, mappings[r], find_children)
+            revmap = simple_apply_changes(new_file_id, mappings[r], find_children)
             map.update(dict([(x, (revmap[x],r)) for x in revmap]))
         return map
 

=== modified file 'tests/test_repos.py'
--- a/tests/test_repos.py	2008-03-16 04:31:39 +0000
+++ b/tests/test_repos.py	2008-03-21 19:03:35 +0000
@@ -650,7 +650,7 @@
         self.assertEqual([None, repository.generate_revision_id(0, "", mapping)],
                 repository.get_ancestry(
                     repository.generate_revision_id(0, "", mapping)))
-        self.assertEqual([None], repository.get_ancestry(None))
+        self.assertEqual([None], repository.get_ancestry(NULL_REVISION))
 
     def test_get_revision_graph_empty(self):
         repos_url = self.make_client('d', 'dc')
@@ -668,14 +668,14 @@
         repos_url = self.make_client('d', 'dc')
         repository = Repository.open(repos_url)
         mapping = repository.get_mapping()
-        self.assertEqual({repository.generate_revision_id(0, "", mapping): []}, 
+        self.assertEqual({repository.generate_revision_id(0, "", mapping): ()}, 
                 repository.get_revision_graph())
 
     def test_get_revision_graph_zero(self):
         repos_url = self.make_client('d', 'dc')
         repository = Repository.open(repos_url)
         mapping = repository.get_mapping()
-        self.assertEqual({repository.generate_revision_id(0, "", mapping): []}, 
+        self.assertEqual({repository.generate_revision_id(0, "", mapping): ()}, 
                 repository.get_revision_graph(
                     repository.generate_revision_id(0, "", mapping)))
 
@@ -690,9 +690,9 @@
         repository = Repository.open(repos_url)
         repository.set_branching_scheme(TrunkBranchingScheme())
         mapping = repository.get_mapping()
-        self.assertEqual({repository.generate_revision_id(1, "trunk", mapping): [],
-                          repository.generate_revision_id(2, "trunk", mapping): [repository.generate_revision_id(1, "trunk", mapping)],
-                          repository.generate_revision_id(1, "branches/foo", mapping): []
+        self.assertEqual({repository.generate_revision_id(1, "trunk", mapping): (),
+                          repository.generate_revision_id(2, "trunk", mapping): (repository.generate_revision_id(1, "trunk", mapping),),
+                          repository.generate_revision_id(1, "branches/foo", mapping): ()
                           }, repository.get_revision_graph())
 
     def test_get_revision_graph(self):
@@ -711,29 +711,29 @@
         repository = Repository.open("svn+%s" % repos_url)
         mapping = repository.get_mapping()
         self.assertEqual({
-            repository.generate_revision_id(0, "", mapping): [],
-           repository.generate_revision_id(3, "", mapping): [
-               repository.generate_revision_id(2, "", mapping)],
-           repository.generate_revision_id(2, "", mapping): [
-               repository.generate_revision_id(1, "", mapping)], 
-           repository.generate_revision_id(1, "", mapping): [
-               repository.generate_revision_id(0, "", mapping)]},
+            repository.generate_revision_id(0, "", mapping): (),
+           repository.generate_revision_id(3, "", mapping): (
+               repository.generate_revision_id(2, "", mapping),),
+           repository.generate_revision_id(2, "", mapping): (
+               repository.generate_revision_id(1, "", mapping),), 
+           repository.generate_revision_id(1, "", mapping): (
+               repository.generate_revision_id(0, "", mapping),)},
                 repository.get_revision_graph(
                     repository.generate_revision_id(3, "", mapping)))
         self.assertEqual({
-            repository.generate_revision_id(0, "", mapping): [],
-           repository.generate_revision_id(2, "", mapping): [
-               repository.generate_revision_id(1, "", mapping)],
-           repository.generate_revision_id(1, "", mapping): [
-                repository.generate_revision_id(0, "", mapping)
-               ]},
+            repository.generate_revision_id(0, "", mapping): (),
+           repository.generate_revision_id(2, "", mapping): (
+               repository.generate_revision_id(1, "", mapping),),
+           repository.generate_revision_id(1, "", mapping): (
+                repository.generate_revision_id(0, "", mapping),
+               )},
                 repository.get_revision_graph(
                     repository.generate_revision_id(2, "", mapping)))
         self.assertEqual({
-            repository.generate_revision_id(0, "", mapping): [],
-            repository.generate_revision_id(1, "", mapping): [
-                repository.generate_revision_id(0, "", mapping)
-                ]},
+            repository.generate_revision_id(0, "", mapping): (),
+            repository.generate_revision_id(1, "", mapping): (
+                repository.generate_revision_id(0, "", mapping),
+                )},
                 repository.get_revision_graph(
                     repository.generate_revision_id(1, "", mapping)))
 
@@ -779,9 +779,9 @@
                 repository.get_ancestry(
                     repository.generate_revision_id(1, "", mapping)))
         self.assertEqual([None, 
-            repository.generate_revision_id(0, "", mapping),
+            repository.generate_revision_id(0, "", mapping), "a-parent", 
             repository.generate_revision_id(1, "", mapping), 
-                  "a-parent", repository.generate_revision_id(2, "", mapping)], 
+                  repository.generate_revision_id(2, "", mapping)], 
                 repository.get_ancestry(
                     repository.generate_revision_id(2, "", mapping)))
 

=== modified file 'tree.py'
--- a/tree.py	2008-03-18 23:27:43 +0000
+++ b/tree.py	2008-03-21 19:03:35 +0000
@@ -43,7 +43,6 @@
               as value. revnum is the revision number and is 
               set to None if not applicable.
     """
-    # TODO: Use svn.wc.parse_externals_description3 instead ?
     ret = {}
     for l in val.splitlines():
         if l == "" or l[0] == "#":

=== modified file 'workingtree.py'
--- a/workingtree.py	2008-03-21 13:01:35 +0000
+++ b/workingtree.py	2008-03-21 19:03:35 +0000
@@ -608,10 +608,12 @@
         if adm is None:
             subwc.close()
 
+    def _get_base_branch_props(self):
+        return self.branch.repository.branchprop_list.get_properties(
+                self.branch.get_branch_path(self.base_revnum), self.base_revnum)
+
     def _get_new_file_ids(self, adm):
-        committed = self.branch.repository.branchprop_list.get_property(
-                self.branch.get_branch_path(self.base_revnum), self.base_revnum, 
-                SVN_PROP_BZR_FILEIDS, "")
+        committed = self._get_base_branch_props().get(SVN_PROP_BZR_FILEIDS, "")
         existing = adm.prop_get(SVN_PROP_BZR_FILEIDS, self.basedir)
         if existing is None or committed == existing:
             return {}
@@ -619,20 +621,13 @@
             existing.splitlines()))
 
     def _get_bzr_revids(self):
-        return self.branch.repository.branchprop_list.get_property(
-                self.branch.get_branch_path(self.base_revnum), 
-                self.base_revnum, 
-                SVN_PROP_BZR_REVISION_ID+str(self.branch.mapping.scheme), "")
+        return self._get_base_branch_props().get(SVN_PROP_BZR_REVISION_ID+str(self.branch.mapping.scheme), "")
 
     def _get_bzr_merges(self):
-        return self.branch.repository.branchprop_list.get_property(
-                self.branch.get_branch_path(self.base_revnum), 
-                self.base_revnum, SVN_PROP_BZR_ANCESTRY+str(self.branch.mapping.scheme), "")
+        return self._get_base_branch_props().get(SVN_PROP_BZR_ANCESTRY+str(self.branch.mapping.scheme), "")
 
     def _get_svk_merges(self):
-        return self.branch.repository.branchprop_list.get_property(
-                self.branch.get_branch_path(self.base_revnum), 
-                self.base_revnum, SVN_PROP_SVK_MERGE, "")
+        return self._get_base_branch_props().get(SVN_PROP_SVK_MERGE, "")
 
     def set_pending_merges(self, merges):
         """See MutableTree.set_pending_merges()."""




More information about the bazaar-commits mailing list