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