Rev 415: Merge upstream. in file:///home/jelmer/bzr-svn/native/

Jelmer Vernooij jelmer at samba.org
Fri Feb 2 19:49:50 GMT 2007


At file:///home/jelmer/bzr-svn/native/

------------------------------------------------------------
revno: 415
revision-id: jelmer at samba.org-20070202194945-ozoc7dfmlxb4kcv0
parent: jelmer at samba.org-20070201140831-thrim5k5gdbwddii
parent: jelmer at samba.org-20070202194810-u6ce2rs57hzaykt4
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: native
timestamp: Fri 2007-02-02 20:49:45 +0100
message:
  Merge upstream.
modified:
  NEWS                           news-20061231030336-h9fhq245ie0de8bs-1
  convert.py                     svn2bzr.py-20051018015439-cb4563bff29e632d
  fetch.py                       fetch.py-20060625004942-x2lfaib8ra707a8p-1
  logwalker.py                   logwalker.py-20060621215743-c13fhfnyzh1xzwh2-1
  tests/__init__.py              __init__.py-20060508151940-e9f4d914801a2535
  tests/test_convert.py          test_convert.py-20060705203611-b1l0bapeku6foco0-1
  transport.py                   transport.py-20060406231150-b3472d06b3a0818d
  tree.py                        tree.py-20060624222557-dudlwqcmkf22lt2s-1
    ------------------------------------------------------------
    revno: 412.1.12
    merged: jelmer at samba.org-20070202194810-u6ce2rs57hzaykt4
    parent: jelmer at samba.org-20070202141332-yt8jneutdi68j697
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: main
    timestamp: Fri 2007-02-02 20:48:10 +0100
    message:
      Wrap reporter API in a bit more pythonic way, also making it easier to replace later by another implementation.
    ------------------------------------------------------------
    revno: 412.1.11
    merged: jelmer at samba.org-20070202141332-yt8jneutdi68j697
    parent: jelmer at samba.org-20070202113947-vbxhka9gzhvff6lg
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: main
    timestamp: Fri 2007-02-02 15:13:32 +0100
    message:
      remove directories if they are unrelated when importing (#81908)
    ------------------------------------------------------------
    revno: 412.1.10
    merged: jelmer at samba.org-20070202113947-vbxhka9gzhvff6lg
    parent: jelmer at samba.org-20070201103709-z4xm1j5cwaezzxt0
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: main
    timestamp: Fri 2007-02-02 12:39:47 +0100
    message:
      Don't spin if target directory does not exist. (#80223)
=== modified file 'NEWS'
--- a/NEWS	2007-02-01 10:37:09 +0000
+++ b/NEWS	2007-02-02 19:48:10 +0000
@@ -10,6 +10,12 @@
 
    * Implemented Repository.get_revision_graph(None)
 
+   * svn-import will no longer spin using CPU if the target directory 
+     did not exist (#80223).
+
+   * Remove branches when they are being replaced. Fixes DivergedBranches 
+     error when using svn-import (#81908).
+
   IMPROVEMENTS
 
    * A proper warning will now be printed if no sqlite implementation is 

=== modified file 'convert.py'
--- a/convert.py	2007-01-29 18:50:19 +0000
+++ b/convert.py	2007-02-02 14:13:32 +0000
@@ -49,6 +49,8 @@
             transport.mkdir(relpath)
             needed.pop()
         except NoSuchFile:
+            if relpath == "":
+                raise
             needed.append((transport, urlutils.dirname(relpath)))
 
 
@@ -142,6 +144,14 @@
                     target_branch = target_dir.create_branch()
                 if not revid in target_branch.revision_history():
                     source_branch = Branch.open(urlutils.join(url, branch))
+                    # Check if target_branch contains a subset of 
+                    # source_branch. If that is not the case, 
+                    # assume that source_branch has been replaced 
+                    # and remove target_branch
+                    if not target_branch.last_revision() in \
+                            source_branch.revision_history():
+                        target_branch.set_revision_history([])
+
                     target_branch.pull(source_branch)
                 if working_trees and not target_dir.has_workingtree():
                     target_dir.create_workingtree()

=== modified file 'fetch.py'
--- a/fetch.py	2007-01-06 16:58:18 +0000
+++ b/fetch.py	2007-02-02 19:48:10 +0000
@@ -28,7 +28,7 @@
 import os
 
 from svn.core import SubversionException, Pool
-import svn.core, svn.ra
+import svn.core
 
 from fileids import generate_file_id
 from repository import (SvnRepository, SVN_PROP_BZR_MERGE, SVN_PROP_SVK_MERGE,
@@ -375,31 +375,29 @@
 
                 if parent_revid is None:
                     transport.reparent("%s/%s" % (repos_root, branch))
-                    reporter, reporter_baton = transport.do_update(
+                    reporter = transport.do_update(
                                    revnum, "", True, edit, edit_baton, pool)
 
                     # Report status of existing paths
-                    svn.ra.reporter2_invoke_set_path(reporter, reporter_baton, 
-                        "", revnum, True, None, pool)
+                    reporter.set_path("", revnum, True, None, pool)
                 else:
                     (parent_branch, parent_revnum) = self.source.parse_revision_id(parent_revid)
                     transport.reparent("%s/%s" % (repos_root, parent_branch))
 
                     if parent_branch != branch:
                         switch_url = "%s/%s" % (repos_root, branch)
-                        reporter, reporter_baton = transport.do_switch(
+                        reporter = transport.do_switch(
                                    revnum, "", True, 
                                    switch_url, edit, edit_baton, pool)
                     else:
-                        reporter, reporter_baton = transport.do_update(
+                        reporter = transport.do_update(
                                    revnum, "", True, edit, edit_baton, pool)
 
                     # Report status of existing paths
-                    svn.ra.reporter2_invoke_set_path(reporter, reporter_baton, 
-                        "", parent_revnum, False, None, pool)
+                    reporter.set_path("", parent_revnum, False, None, pool)
 
                 transport.lock()
-                svn.ra.reporter2_invoke_finish_report(reporter, reporter_baton, pool)
+                reporter.finish_report(pool)
                 transport.unlock()
 
                 prev_inv = editor.inventory

=== modified file 'logwalker.py'
--- a/logwalker.py	2007-02-01 10:37:09 +0000
+++ b/logwalker.py	2007-02-02 19:48:10 +0000
@@ -298,11 +298,10 @@
         edit, baton = svn.delta.make_editor(editor, pool)
         root_repos = self.transport.get_repos_root()
         self.transport.reparent(os.path.join(root_repos, path))
-        reporter, reporter_baton = self.transport.do_update(
+        reporter = self.transport.do_update(
                         revnum, "", True, edit, baton, pool)
-        svn.ra.reporter2_invoke_set_path(reporter, reporter_baton, "", revnum, 
-                                         True, None, pool)
-        svn.ra.reporter2_invoke_finish_report(reporter, reporter_baton, pool)
+        reporter.set_path("", revnum, True, None, pool)
+        reporter.finish_report(pool)
         return editor.files
 
     def get_previous(self, path, revnum):

=== modified file 'tests/__init__.py'
--- a/tests/__init__.py	2007-02-01 14:08:31 +0000
+++ b/tests/__init__.py	2007-02-02 19:49:45 +0000
@@ -24,7 +24,7 @@
 
 RENAMES = False
 
-import svn.ra, svn.repos, svn.wc
+import svn.repos, svn.wc
 
 class TestCaseWithSubversionRepository(TestCaseInTempDir):
     """A test case that provides the ability to build Subversion 
@@ -191,17 +191,6 @@
         self.make_checkout(repos_url, clientpath)
         return repos_url
 
-    def make_ra(self, relpath):
-        """Create a repository and a ra connection to it. 
-        
-        :param relpath: Path to create repository at.
-        :return: The ra connection.
-        """
-
-        repos_url = self.make_repository(relpath)
-
-        return svn.ra.open2(repos_url, svn.ra.callbacks2_t(), None, None)
-
     def dumpfile(self, repos):
         """Create a dumpfile for the specified repository.
 

=== modified file 'tests/test_convert.py'
--- a/tests/test_convert.py	2007-01-10 05:24:56 +0000
+++ b/tests/test_convert.py	2007-02-02 14:13:32 +0000
@@ -16,7 +16,7 @@
 
 from bzrlib.branch import Branch
 from bzrlib.bzrdir import BzrDir
-from bzrlib.errors import NotBranchError
+from bzrlib.errors import NotBranchError, NoSuchFile
 from bzrlib.repository import Repository
 from bzrlib.tests import TestCase, TestCaseInTempDir
 from bzrlib.trace import mutter
@@ -112,6 +112,16 @@
 
         self.assertTrue(Repository.open("e").is_shared())
 
+    def test_shared_import_continue_remove(self):
+        convert_repository(self.repos_url, "e", TrunkBranchingScheme(), True)
+        self.client_update("dc")
+        self.client_delete("dc/trunk")
+        self.client_commit("dc", "blafoo")
+        self.build_tree({'dc/trunk/file': 'otherdata'})
+        self.client_add("dc/trunk")
+        self.client_commit("dc", "change")
+        convert_repository(self.repos_url, "e", TrunkBranchingScheme(), True)
+
     def test_shared_import_continue_with_wt(self):
         convert_repository("svn+"+self.repos_url, "e", 
                 TrunkBranchingScheme(), working_trees=True)
@@ -169,6 +179,9 @@
         self.assertTrue(os.path.isdir(os.path.join(self.test_dir, "e", "trunk")))
         self.assertTrue(os.path.isdir(os.path.join(self.test_dir, "e", "branches", "abranch")))
 
+    def test_convert_to_nonexistant(self):
+        self.assertRaises(NoSuchFile, convert_repository,"svn+"+self.repos_url, os.path.join(self.test_dir, "e", "foo", "bar"), TrunkBranchingScheme())
+
     def test_notshared_import(self):
         convert_repository("svn+"+self.repos_url, "e", TrunkBranchingScheme(), 
                            False)
@@ -284,3 +297,5 @@
         branch = Branch.open(os.path.join(self.test_dir, "e", "trunk"))
         self.assertEqual("file://%s/e/trunk" % self.test_dir, branch.base.rstrip("/"))
         self.assertEqual(generate_svn_revision_id("6987ef2d-cd6b-461f-9991-6f1abef3bd59", 1, 'trunk'), branch.last_revision())
+
+

=== modified file 'transport.py'
--- a/transport.py	2007-01-31 12:02:55 +0000
+++ b/transport.py	2007-02-02 19:48:10 +0000
@@ -120,6 +120,33 @@
                 raise NotBranchError(path=url)
             raise
 
+    class Reporter:
+        def __init__(self, (reporter, report_baton)):
+            self._reporter = reporter
+            self._baton = report_baton
+
+        def set_path(self, path, revnum, start_empty, lock_token, pool=None):
+            svn.ra.reporter2_invoke_set_path(self._reporter, self._baton, 
+                        path, revnum, start_empty, lock_token, pool)
+
+        def delete_path(self, path, pool=None):
+            svn.ra.reporter2_invoke_delete_path(self._reporter, self._baton,
+                    path, pool)
+
+        def link_path(self, path, url, revision, start_empty, lock_token, 
+                      pool=None):
+            svn.ra.reporter2_invoke_link_path(self._reporter, self._baton,
+                    path, url, revision, start_empty, lock_token,
+                    pool)
+
+        def finish_report(self, pool=None):
+            svn.ra.reporter2_invoke_finish_report(self._reporter, 
+                    self._baton, pool)
+
+        def abort_report(self, pool=None):
+            svn.ra.reporter2_invoke_abort_report(self._reporter, 
+                    self._baton, pool)
+
     def lock(self):
         assert (not self.is_locked)
         self.is_locked = True
@@ -166,7 +193,7 @@
     @convert_svn_error
     def do_switch(self, switch_rev, switch_target, recurse, switch_url, *args, **kwargs):
         mutter('svn switch -r %d %r -> %r' % (switch_rev, switch_target, switch_url))
-        return svn.ra.do_switch(self._ra, switch_rev, switch_target, recurse, switch_url, *args, **kwargs)
+        return self.Reporter(svn.ra.do_switch(self._ra, switch_rev, switch_target, recurse, switch_url, *args, **kwargs))
 
     @need_lock
     @convert_svn_error
@@ -242,7 +269,7 @@
     @convert_svn_error
     def do_update(self, revnum, path, *args, **kwargs):
         mutter('svn update -r %r %r' % (revnum, path))
-        return svn.ra.do_update(self._ra, revnum, path, *args, **kwargs)
+        return self.Reporter(svn.ra.do_update(self._ra, revnum, path, *args, **kwargs))
 
     @need_lock
     @convert_svn_error

=== modified file 'tree.py'
--- a/tree.py	2007-01-10 01:50:47 +0000
+++ b/tree.py	2007-02-02 19:48:10 +0000
@@ -32,7 +32,7 @@
 from cStringIO import StringIO
 import urllib
 
-import svn.core, svn.wc, svn.delta, svn.ra
+import svn.core, svn.wc, svn.delta
 from svn.core import SubversionException, Pool
 
 def apply_txdelta_handler(src_stream, target_stream, pool):
@@ -62,12 +62,11 @@
         self.file_data = {}
         editor, baton = svn.delta.make_editor(self.editor, pool)
         root_repos = repository.transport.get_repos_root()
-        reporter, reporter_baton = repository.transport.do_switch(
+        reporter = repository.transport.do_switch(
                 self.revnum, "", True, 
                 os.path.join(root_repos, self.branch_path), editor, baton, pool)
-        svn.ra.reporter2_invoke_set_path(reporter, reporter_baton, "", 0, 
-                True, None, pool)
-        svn.ra.reporter2_invoke_finish_report(reporter, reporter_baton, pool)
+        reporter.set_path("", 0, True, None, pool)
+        reporter.finish_report(pool)
         pool.destroy()
 
      def get_file_lines(self, file_id):




More information about the bazaar-commits mailing list