Rev 397: Merge from upstream. in http://people.samba.org/bzr/jelmer/bzr-svn/ver3
Jelmer Vernooij
jelmer at samba.org
Mon Jan 15 17:29:02 GMT 2007
------------------------------------------------------------
revno: 397
revision-id: jelmer at samba.org-20070115172815-93j1sk2ylwzh8tt9
parent: jelmer at samba.org-20070114055700-9ybu0e0sf0t2bsp9
parent: jelmer at samba.org-20070115133448-o4pcdn4dvzqu5u25
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: ver3
timestamp: Mon 2007-01-15 18:28:15 +0100
message:
Merge from upstream.
modified:
TODO todo-20060729211917-2kpobww0zyvvo0j2-1
branch.py svnbranch.py-20051017135706-11c749eb0dab04a7
checkout.py workingtree.py-20060306120941-b083cb0fdd4a69de
commit.py commit.py-20060607190346-qvq128wgfubhhgm2-1
tests/test_upgrade.py test_upgrade.py-20070106170128-64zt3eqggg4tng1c-1
tests/test_workingtree.py test_workingtree.py-20060622191524-0di7bc3q1ckdbybb-1
transport.py transport.py-20060406231150-b3472d06b3a0818d
upgrade.py upgrade.py-20070106192108-0rakplee2lzah4gs-1
------------------------------------------------------------
revno: 389.1.12
merged: jelmer at samba.org-20070115133448-o4pcdn4dvzqu5u25
parent: jelmer at samba.org-20070115040110-rkf44wgfw2k3wzdo
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: main
timestamp: Mon 2007-01-15 14:34:48 +0100
message:
Attempt to keep parent file ids.
------------------------------------------------------------
revno: 389.1.11
merged: jelmer at samba.org-20070115040110-rkf44wgfw2k3wzdo
parent: jelmer at samba.org-20070115031521-e4ejwccyzei1kntf
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: main
timestamp: Mon 2007-01-15 05:01:10 +0100
message:
Add progress bar, as this function can take a long time to run.
------------------------------------------------------------
revno: 389.1.10
merged: jelmer at samba.org-20070115031521-e4ejwccyzei1kntf
parent: jelmer at samba.org-20070115003937-mxyoa82zy1t616pi
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: main
timestamp: Mon 2007-01-15 04:15:21 +0100
message:
handle incremental calls to svn-upgrade nicely.
------------------------------------------------------------
revno: 389.1.9
merged: jelmer at samba.org-20070115003937-mxyoa82zy1t616pi
parent: jelmer at samba.org-20070114233809-pjrkm3wnr2ezy6eo
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: main
timestamp: Mon 2007-01-15 01:39:37 +0100
message:
The Python Subversion bindings have trouble dealing with unicode commit messages.
------------------------------------------------------------
revno: 389.1.8
merged: jelmer at samba.org-20070114233809-pjrkm3wnr2ezy6eo
parent: jelmer at samba.org-20070114052234-aj73nfyj8sslv3n9
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: main
timestamp: Mon 2007-01-15 00:38:09 +0100
message:
Use global configuration object.
=== modified file 'TODO'
--- a/TODO 2007-01-14 04:11:21 +0000
+++ b/TODO 2007-01-15 03:15:21 +0000
@@ -7,7 +7,7 @@
- when committing specific files in a lightweight checkout, make sure to
commit the right file id changes for "."
- custom implementation of WorkingTree.revert()
-- don't update to the same revnum when opening working tree
+- don't update all entries 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 'branch.py'
--- a/branch.py 2007-01-09 03:22:00 +0000
+++ b/branch.py 2007-01-14 23:38:09 +0000
@@ -33,7 +33,7 @@
from commit import push_as_merged
from repository import SvnRepository
-from transport import bzr_to_svn_url
+from transport import bzr_to_svn_url, svn_config
from tree import SvnRevisionTree
@@ -101,6 +101,7 @@
mutter('hist: %r' % self.revision_history())
client_ctx = svn.client.create_context()
+ client_ctx.config = svn_config
svn.client.checkout(bzr_to_svn_url(self.base), to_location, rev,
True, client_ctx)
=== modified file 'checkout.py'
--- a/checkout.py 2007-01-10 01:50:47 +0000
+++ b/checkout.py 2007-01-15 00:39:37 +0000
@@ -62,8 +62,9 @@
self.bzrdir = bzrdir
self._branch = branch
self.base_revnum = 0
+ self.pool = Pool()
self.client_ctx = svn.client.create_context()
- self.pool = Pool()
+ self.client_ctx.config = svn_config
self.client_ctx.log_msg_func2 = svn.client.svn_swig_py_get_commit_log_func
self.client_ctx.auth_baton = _create_auth_baton(self.pool)
@@ -395,12 +396,12 @@
if message_callback is not None:
def log_message_func(items, pool):
""" Simple log message provider for unit tests. """
- return message_callback(self)
+ return str(message_callback(self))
else:
assert isinstance(message, basestring)
def log_message_func(items, pool):
""" Simple log message provider for unit tests. """
- return message
+ return str(message)
self.client_ctx.log_msg_baton2 = log_message_func
commit_info = svn.client.commit3(specific_files, True, False, self.client_ctx)
@@ -420,13 +421,15 @@
return revid
def add(self, files, ids=None):
+ import pdb
+ pdb.set_trace()
if ids:
ids = copy(ids)
ids.reverse()
assert isinstance(files, list)
- wc = self._get_wc(write_lock=True)
- try:
- for f in files:
+ for f in files:
+ try:
+ wc = self._get_wc(os.path.dirname(f), write_lock=True)
try:
svn.wc.add2(os.path.join(self.basedir, f), wc, None, 0,
None, None, None)
@@ -438,8 +441,8 @@
elif num == svn.core.SVN_ERR_WC_PATH_NOT_FOUND:
raise NoSuchFile(path=f)
raise
- finally:
- svn.wc.adm_close(wc)
+ finally:
+ svn.wc.adm_close(wc)
self.read_working_inventory()
def basis_tree(self):
=== modified file 'commit.py'
--- a/commit.py 2007-01-10 03:59:17 +0000
+++ b/commit.py 2007-01-15 17:28:15 +0000
@@ -289,7 +289,7 @@
self.date = date
self.author = author
mutter('committed %r, author: %r, date: %r' % (revision, author, date))
-
+
mutter('obtaining commit editor')
self.editor, editor_baton = self.repository.transport.get_commit_editor(
message, done, None, False)
=== modified file 'tests/test_upgrade.py'
--- a/tests/test_upgrade.py 2007-01-10 03:59:17 +0000
+++ b/tests/test_upgrade.py 2007-01-15 17:28:15 +0000
@@ -20,6 +20,7 @@
from bzrlib.tests import TestCase, TestCaseWithTransport
from bzrlib.trace import mutter
+from fileids import generate_svn_file_id
import repository
from repository import SvnRepository, MAPPING_VERSION, REVISION_ID_PREFIX
from tests import TestCaseWithSubversionRepository
@@ -132,6 +133,69 @@
self.assertTrue([oldrepos.generate_revision_id(1, "")],
newrepos.revision_parents("customrev-svn%d-upgrade" % MAPPING_VERSION))
+ def test_single_keep_parent_fileid(self):
+ repos_url = self.make_client("a", "dc")
+ self.build_tree({'dc/a': 'b'})
+ self.client_add("dc/a")
+ self.client_commit("dc", "data")
+
+ oldrepos = Repository.open(repos_url)
+ dir = BzrDir.create("f")
+ newrepos = dir.create_repository()
+ oldrepos.copy_content_into(newrepos)
+ dir.create_branch()
+ wt = dir.create_workingtree()
+ file("f/a", "w").write("b")
+ wt.add(["a"], ["someid"])
+ wt.commit(message="data", rev_id="svn-v1:1@%s-" % oldrepos.uuid)
+ wt.rename_one("a", "b")
+ file("f/a", 'w').write("moredata")
+ wt.add(["a"], ["specificid"])
+ wt.commit(message='fix moredata', rev_id="customrev")
+
+ upgrade_repository(newrepos, oldrepos, allow_change=True)
+
+ 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"),
+ tree.inventory.path2id("b"))
+
+
+ def test_single_custom_continue(self):
+ repos_url = self.make_client("a", "dc")
+ self.build_tree({'dc/a': 'b', 'dc/b': 'c'})
+ self.client_add("dc/a")
+ self.client_add("dc/b")
+ self.client_commit("dc", "data")
+
+ oldrepos = Repository.open(repos_url)
+ dir = BzrDir.create("f")
+ newrepos = dir.create_repository()
+ oldrepos.copy_content_into(newrepos)
+ dir.create_branch()
+ wt = dir.create_workingtree()
+ file("f/a", "w").write("b")
+ file("f/b", "w").write("c")
+ wt.add("a")
+ wt.add("b")
+ wt.commit(message="data", rev_id="svn-v1:1@%s-" % oldrepos.uuid)
+ file("f/a", 'w').write("moredata")
+ file("f/b", 'w').write("moredata")
+ wt.commit(message='fix moredata', rev_id="customrev")
+
+ tree = newrepos.revision_tree("svn-v1:1@%s-" % oldrepos.uuid)
+
+ vf = newrepos.weave_store.get_weave_or_empty(tree.inventory.path2id("a"), newrepos.get_transaction())
+ vf.clone_text("customrev-svn%d-upgrade" % MAPPING_VERSION,
+ "svn-v1:1@%s-" % oldrepos.uuid, ["svn-v1:1@%s-" % oldrepos.uuid])
+
+ upgrade_repository(newrepos, oldrepos, allow_change=True)
+
+ self.assertTrue(newrepos.has_revision(oldrepos.generate_revision_id(1, "")))
+ self.assertTrue(newrepos.has_revision("customrev-svn%d-upgrade" % MAPPING_VERSION))
+ self.assertTrue([oldrepos.generate_revision_id(1, "")],
+ newrepos.revision_parents("customrev-svn%d-upgrade" % MAPPING_VERSION))
+
def test_more_custom(self):
repos_url = self.make_client("a", "dc")
self.build_tree({'dc/a': 'b'})
=== modified file 'tests/test_workingtree.py'
--- a/tests/test_workingtree.py 2007-01-10 03:59:17 +0000
+++ b/tests/test_workingtree.py 2007-01-15 17:28:15 +0000
@@ -57,6 +57,26 @@
self.assertTrue(inv.has_filename("bl"))
self.assertFalse(inv.has_filename("aa"))
+ def test_add_not_recursive(self):
+ self.make_client('a', 'dc')
+ self.build_tree({"dc/bl/file": "data"})
+ tree = WorkingTree.open("dc")
+ tree.add(["bl"])
+
+ tree = WorkingTree.open("dc")
+ self.assertTrue(tree.inventory.has_filename("bl"))
+ self.assertFalse(tree.inventory.has_filename("bl/file"))
+
+ def test_add_nested(self):
+ self.make_client('a', 'dc')
+ self.build_tree({"dc/bl/file": "data"})
+ tree = WorkingTree.open("dc")
+ tree.add(["bl", "bl/file"])
+
+ tree = WorkingTree.open("dc")
+ self.assertTrue(tree.inventory.has_filename("bl"))
+ self.assertTrue(tree.inventory.has_filename("bl/file"))
+
def test_lock_write(self):
self.make_client('a', 'dc')
tree = WorkingTree.open("dc")
@@ -271,6 +291,13 @@
tree = WorkingTree.open("dc")
self.assertEqual(['bl'], list(tree.unknowns()))
+ def test_unknown_not_added(self):
+ self.make_client('a', 'dc')
+ self.build_tree({"dc/bl": None})
+
+ tree = WorkingTree.open("dc")
+ self.assertFalse(tree.inventory.has_filename("bl"))
+
def test_extras(self):
self.make_client('a', 'dc')
self.build_tree({"dc/bl": None})
@@ -338,6 +365,33 @@
orig_tree = tree.basis_tree()
tree.commit(message_callback=lambda x: "data")
+ def test_commit_callback_unicode(self):
+ self.make_client('a', 'dc')
+ self.build_tree({"dc/bl": "data"})
+ self.client_add("dc/bl")
+ tree = WorkingTree.open("dc")
+ orig_tree = tree.basis_tree()
+ tree.commit(message_callback=lambda x: u"data")
+
+ def test_commit_message_unicode(self):
+ self.make_client('a', 'dc')
+ self.build_tree({"dc/bl": "data"})
+ self.client_add("dc/bl")
+ tree = WorkingTree.open("dc")
+ orig_tree = tree.basis_tree()
+ tree.commit(message=u"data")
+
+ def test_commit_nested(self):
+ repos_url = self.make_client('a', 'dc')
+ self.build_tree({"dc/branches/foobranch/file": "data"})
+ self.client_add("dc/branches")
+ self.client_commit("dc", "initial changes")
+ self.make_checkout(repos_url + "/branches/foobranch", "de")
+ tree = WorkingTree.open("de")
+ self.build_tree({'de/file': "foo"})
+ orig_tree = tree.basis_tree()
+ tree.commit(message="data")
+
def test_update_after_commit(self):
self.make_client('a', 'dc')
self.build_tree({"dc/bl": "data"})
=== modified file 'transport.py'
--- a/transport.py 2007-01-01 16:26:35 +0000
+++ b/transport.py 2007-01-14 23:38:09 +0000
@@ -104,6 +104,7 @@
self._client = svn.client.create_context(self.pool)
self._client.auth_baton = _create_auth_baton(self.pool)
+ self._client.config = svn_config
try:
mutter('opening SVN RA connection to %r' % self.svn_url)
=== modified file 'upgrade.py'
--- a/upgrade.py 2007-01-10 03:59:17 +0000
+++ b/upgrade.py 2007-01-15 17:28:15 +0000
@@ -43,6 +43,7 @@
# Change the parent of a revision
def change_revision_parent(repository, oldrevid, newrevid, new_parents):
assert isinstance(new_parents, list)
+ mutter('creating copy %r of %r with new parents %r' % (newrevid, oldrevid, new_parents))
oldrev = repository.get_revision(oldrevid)
builder = repository.get_commit_builder(branch=None, parents=new_parents,
@@ -53,13 +54,67 @@
revprops=oldrev.properties,
revision_id=newrevid)
- for path, ie in repository.get_revision_inventory(oldrevid).iter_entries():
- new_ie = ie.copy()
- if new_ie.revision == oldrevid:
- new_ie.revision = None
- builder.record_entry_contents(new_ie,
- map(repository.get_revision_inventory, new_parents),
- path, repository.revision_tree(oldrevid))
+ # Check what new_ie.file_id should be
+ # use old and new parent inventories to generate new_id map
+ old_parents = oldrev.parent_ids
+ new_id = {}
+ for (oldp, newp) in zip(old_parents, new_parents):
+ oldinv = repository.get_revision_inventory(oldp)
+ newinv = repository.get_revision_inventory(newp)
+ for path, ie in oldinv.iter_entries():
+ if newinv.has_filename(path):
+ new_id[ie.file_id] = newinv.path2id(path)
+
+ mutter('new id %r' % new_id)
+ i = 0
+ class MapTree:
+ def __init__(self, oldtree, map):
+ self.oldtree = oldtree
+ self.map = map
+
+ def old_id(self, file_id):
+ for x in self.map:
+ if self.map[x] == file_id:
+ return x
+ return file_id
+
+ def get_file_sha1(self, file_id, path=None):
+ return self.oldtree.get_file_sha1(file_id=self.old_id(file_id),
+ path=path)
+
+ def get_file(self, file_id):
+ return self.oldtree.get_file(self.old_id(file_id=file_id))
+
+ def is_executable(self, file_id, path=None):
+ return self.oldtree.is_executable(self.old_id(file_id=file_id),
+ path=path)
+
+ oldtree = MapTree(repository.revision_tree(oldrevid), new_id)
+ oldinv = repository.get_revision_inventory(oldrevid)
+ total = len(oldinv)
+ pb = ui_factory.nested_progress_bar()
+ try:
+ for path, ie in oldinv.iter_entries():
+ pb.update('upgrading revision', i, total)
+ i+=1
+ new_ie = ie.copy()
+ if new_ie.revision == oldrevid:
+ new_ie.revision = None
+ def lookup(file_id):
+ if new_id.has_key(file_id):
+ return new_id[file_id]
+ return file_id
+
+ new_ie.file_id = lookup(new_ie.file_id)
+ new_ie.parent_id = lookup(new_ie.parent_id)
+ versionedfile = repository.weave_store.get_weave_or_empty(new_ie.file_id,
+ repository.get_transaction())
+ if not versionedfile.has_version(newrevid):
+ builder.record_entry_contents(new_ie,
+ map(repository.get_revision_inventory, new_parents),
+ path, oldtree)
+ finally:
+ pb.finished()
builder.finish_inventory()
return builder.commit(oldrev.message)
@@ -190,10 +245,11 @@
pb = ui_factory.nested_progress_bar()
i = 0
+ total = len(needs_upgrading)
try:
while len(needs_upgrading) > 0:
revid = needs_upgrading.pop()
- pb.update('upgrading revisions', i, len(needs_upgrading))
+ pb.update('upgrading revisions', i, total)
i+=1
newrevid = create_upgraded_revid(revid)
rename_map[revid] = newrevid
More information about the bazaar-commits
mailing list