Rev 383: Fix checkout tests. in http://people.samba.org/bzr/jelmer/bzr-svn/bzr.dev

Jelmer Vernooij jelmer at samba.org
Mon Jan 8 02:49:31 GMT 2007


------------------------------------------------------------
revno: 383
revision-id: jelmer at samba.org-20070108024856-wrhdhdetx909ouzl
parent: jelmer at samba.org-20070107004800-hfyerfcy9w1s2va6
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: main
timestamp: Mon 2007-01-08 03:48:56 +0100
message:
  Fix checkout tests.
modified:
  TODO                           todo-20060729211917-2kpobww0zyvvo0j2-1
  checkout.py                    workingtree.py-20060306120941-b083cb0fdd4a69de
  tree.py                        tree.py-20060624222557-dudlwqcmkf22lt2s-1
=== modified file 'TODO'
--- a/TODO	2007-01-07 00:48:00 +0000
+++ b/TODO	2007-01-08 02:48:56 +0000
@@ -2,8 +2,8 @@
 - fix commits in heavyweight checkouts somehow
 - fix autorealm repository
 - handle parent directories of branches being moved correctly
-- fix "bzr status" in lightweight checkouts
- - faster "bzr status" in lightweight checkouts
+- faster "bzr status" in lightweight checkouts
+- don't update to the same revnum when opening working tree
 - avoid extra connect in logwalker?
 - get rid of use of `svn ls' in logwalker
 - make ListBranchingScheme() support wildcards

=== modified file 'checkout.py'
--- a/checkout.py	2007-01-06 16:58:18 +0000
+++ b/checkout.py	2007-01-08 02:48:56 +0000
@@ -17,7 +17,7 @@
 from binascii import hexlify
 from bzrlib.bzrdir import BzrDirFormat, BzrDir
 from bzrlib.errors import (InvalidRevisionId, NotBranchError, NoSuchFile,
-                           NoRepositoryPresent)
+                           NoRepositoryPresent, BzrError)
 from bzrlib.inventory import (Inventory, InventoryDirectory, InventoryFile,
                               InventoryLink, ROOT_ID)
 from bzrlib.lockable_files import TransportLock, LockableFiles
@@ -39,7 +39,15 @@
 import os
 
 import svn.core, svn.wc
-from svn.core import SubversionException
+from svn.core import SubversionException, Pool
+
+class WorkingTreeInconsistent(BzrError):
+    _fmt = """Working copy is in inconsistent state (%(min_revnum)d:%(max_revnum)d)"""
+
+    def __init__(self, min_revnum, max_revnum):
+        self.min_revnum = min_revnum
+        self.max_revnum = max_revnum
+
 
 class SvnWorkingTree(WorkingTree):
     """Implementation of WorkingTree that uses a Subversion 
@@ -55,20 +63,20 @@
         self.client_ctx.log_msg_baton2 = self.log_message_func
 
         wc = self._get_wc()
-        try:
-            self.base_revnum = svn.wc.get_ancestry(self.basedir, wc)[1]
-        finally:
-            svn.wc.adm_close(wc)
+        status = svn.wc.revision_status(self.basedir, None, True, None, None)
+        if status.min_rev != status.max_rev:
+            #raise WorkingTreeInconsistent(status.min_rev, status.max_rev)
+            rev = svn.core.svn_opt_revision_t()
+            rev.kind = svn.core.svn_opt_revision_number
+            rev.value.number = status.max_rev
+            assert status.max_rev == svn.client.update(self.basedir, rev,
+                                     True, self.client_ctx, Pool())
 
+        self.base_revnum = status.max_rev
+        self.base_tree = SvnBasisTree(self)
         self.base_revid = branch.repository.generate_revision_id(
                     self.base_revnum, branch.branch_path)
 
-        if self.base_revid != NULL_REVISION:
-            (bp, rev) = self.branch.repository.parse_revision_id(self.base_revid)
-            self.base_fileids = self.branch.repository.get_fileid_map(rev, bp)
-        else:
-            self.base_fileids = {"": (ROOT_ID, NULL_REVISION)}
-
         self._set_inventory(self.read_working_inventory(), dirty=False)
 
         self.controldir = os.path.join(self.basedir, svn.wc.get_adm_dir(), 'bzr')
@@ -183,7 +191,9 @@
         assert isinstance(path, basestring)
 
         (bp, rp) = self.branch.repository.scheme.unprefix(path)
-        return self.base_fileids[rp]
+        entry = self.base_tree.id_map[rp]
+        assert entry[0] is not None
+        return entry
 
     def read_working_inventory(self):
         inv = Inventory()
@@ -301,11 +311,15 @@
         mutter('setting last revision to %r' % revid)
         if revid is None or revid == NULL_REVISION:
             self.base_revid = revid
-            self.base_fileids = self.branch.repository.get_fileid_map(0, "")
+            self.base_tree = FIXME
             return
 
         (bp, rev) = self.branch.repository.parse_revision_id(revid)
-        self.base_fileids = self.branch.repository.get_fileid_map(rev, bp)
+        assert bp == self.branch.branch_path
+        self.base_revnum = rev
+        self.base_revid = revid
+        self.base_tree = SvnBasisTree(self)
+
         # TODO: Implement more efficient version
         newrev = self.branch.repository.get_revision(revid)
         newrevtree = self.branch.repository.revision_tree(revid)
@@ -367,8 +381,9 @@
                 commit_info.revision, self.branch.branch_path)
 
         self.base_revid = revid
-        self.base_fileids = self.branch.repository.get_fileid_map(
-                commit_info.revision, self.branch.branch_path)
+        self.base_revnum = commit_info.revision
+        self.base_tree = SvnBasisTree(self)
+
         #FIXME: Use public API:
         self.branch.revision_history()
         self.branch._revision_history.append(revid)
@@ -400,7 +415,7 @@
         if self.base_revid is None or self.base_revid == NULL_REVISION:
             return self.branch.repository.revision_tree(self.base_revid)
 
-        return SvnBasisTree(self)
+        return self.base_tree
 
     def pull(self, source, overwrite=False, stop_revision=None):
         if stop_revision is None:

=== modified file 'tree.py'
--- a/tree.py	2007-01-03 22:24:00 +0000
+++ b/tree.py	2007-01-08 02:48:56 +0000
@@ -234,11 +234,14 @@
                                   svn.wc.schedule_delete, 
                                   svn.wc.schedule_replace):
                 return self.id_map[workingtree.branch.repository.scheme.unprefix(relpath)[1]]
+            return (None, None)
 
         def add_dir_to_inv(relpath, wc, parent_id):
             entries = svn.wc.entries_read(wc, False)
             entry = entries[""]
             (id, revid) = find_ids(entry)
+            if id == None:
+                return
 
             # First handle directory itself
             ie = self._inventory.add_path(relpath, 'directory', id)
@@ -263,7 +266,8 @@
                         svn.wc.adm_close(subwc)
                 else:
                     (subid, subrevid) = find_ids(entry)
-                    add_file_to_inv(subrelpath, subid, subrevid)
+                    if subid is not None:
+                        add_file_to_inv(subrelpath, subid, subrevid)
 
         wc = workingtree._get_wc() 
         try:




More information about the bazaar-commits mailing list