Rev 1109: Move update code to separate function. in http://people.samba.org/bzr/jelmer/bzr-svn/cext

Jelmer Vernooij jelmer at samba.org
Thu Jun 19 16:17:00 BST 2008


At http://people.samba.org/bzr/jelmer/bzr-svn/cext

------------------------------------------------------------
revno: 1109
revision-id: jelmer at samba.org-20080619151659-3qwqov4pv3aoqvti
parent: jelmer at samba.org-20080619140332-8lnsdcix06pj2t45
parent: jelmer at samba.org-20080619140637-nxobzdjoac3l6rkx
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: cext
timestamp: Thu 2008-06-19 17:16:59 +0200
message:
  Move update code to separate function.
modified:
  auth.py                        auth.py-20071209174622-w8d42k6nm5yhxvi8-1
  branch.py                      svnbranch.py-20051017135706-11c749eb0dab04a7
  fetch.py                       fetch.py-20060625004942-x2lfaib8ra707a8p-1
  wc.c                           wc.pyx-20080313142018-10l8l23vha2j9e6b-1
  workingtree.py                 workingtree.py-20060306120941-b083cb0fdd4a69de
    ------------------------------------------------------------
    revno: 950.3.183
    revision-id: jelmer at samba.org-20080619140637-nxobzdjoac3l6rkx
    parent: jelmer at samba.org-20080619135842-8kg5be1na8cgdptp
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: 0.4
    timestamp: Thu 2008-06-19 16:06:37 +0200
    message:
      Use property rather than function for busy data.
    modified:
      fetch.py                       fetch.py-20060625004942-x2lfaib8ra707a8p-1
      ra.py                          ra.py-20080615005305-t5221niknu8rm6bt-1
      transport.py                   transport.py-20060406231150-b3472d06b3a0818d
=== modified file 'auth.py'
--- a/auth.py	2008-06-19 14:03:32 +0000
+++ b/auth.py	2008-06-19 15:16:59 +0000
@@ -133,6 +133,7 @@
     return ra.get_ssl_client_cert_pw_prompt_provider(
                 get_ssl_client_cert_pw, tries)
 
+
 def get_stock_svn_providers():
     providers = [ra.get_simple_provider(),
             ra.get_username_provider(),

=== modified file 'branch.py'
--- a/branch.py	2008-06-17 20:27:33 +0000
+++ b/branch.py	2008-06-19 15:16:59 +0000
@@ -24,7 +24,7 @@
 from bzrlib.revision import is_null, ensure_null, NULL_REVISION
 from bzrlib.workingtree import WorkingTree
 
-from bzrlib.plugins.svn import core
+from bzrlib.plugins.svn import core, wc
 from bzrlib.plugins.svn.commit import push
 from bzrlib.plugins.svn.config import BranchConfig
 from bzrlib.plugins.svn.core import SubversionException
@@ -33,6 +33,7 @@
 from bzrlib.plugins.svn.repository import SvnRepository
 from bzrlib.plugins.svn.transport import bzr_to_svn_url
 
+import os
 
 class FakeControlFiles(object):
     """Dummy implementation of ControlFiles.
@@ -173,7 +174,7 @@
         :param revision_id: Tip of the checkout.
         :return: WorkingTree object of the checkout.
         """
-        import os, wc
+        from bzrlib.plugins.svn.workingtree import update_wc
         if revision_id is not None:
             revnum = self.lookup_revision_id(revision_id)
         else:
@@ -183,8 +184,14 @@
         svn_url = bzr_to_svn_url(self.base)
         wc.ensure_adm(to_location, self.repository.uuid, bzr_to_svn_url(self.base),
                       svn_url, revnum)
+        adm = wc.WorkingCopy(None, to_location)
+        conn = self.repository.transport.get_connection()
+        try:
+            update_wc(adm, to_location, conn, revnum)
+        finally:
+            if not conn.busy:
+                self.repository.transport.add_connection(conn)
         wt = WorkingTree.open(to_location)
-        wt.update(["."], revnum=revnum)
         return wt
 
     def create_checkout(self, to_location, revision_id=None, lightweight=False,

=== modified file 'fetch.py'
--- a/fetch.py	2008-06-19 14:03:32 +0000
+++ b/fetch.py	2008-06-19 15:16:59 +0000
@@ -676,7 +676,7 @@
                         reporter.finish()
                     finally:
                         if conn is not None:
-                            if not conn.is_busy():
+                            if not conn.busy:
                                 self.source.transport.add_connection(conn)
                 except:
                     editor.abort()

=== modified file 'wc.c'
--- a/wc.c	2008-06-05 14:48:23 +0000
+++ b/wc.c	2008-06-19 15:16:59 +0000
@@ -70,7 +70,7 @@
 static svn_error_t *py_ra_report_finish(void *baton, apr_pool_t *pool)
 {
     PyObject *self = (PyObject *)baton, *ret;
-	ret = PyObject_CallFunction(self, "finish", NULL);
+	ret = PyObject_CallFunction(self, "finish", "");
 	if (ret == NULL)
 		return py_svn_error();
     return NULL;
@@ -79,7 +79,7 @@
 static svn_error_t *py_ra_report_abort(void *baton, apr_pool_t *pool)
 {
     PyObject *self = (PyObject *)baton, *ret;
-	ret = PyObject_CallFunction(self, "abort", NULL);
+	ret = PyObject_CallFunction(self, "abort", "");
 	if (ret == NULL)
 		return py_svn_error();
     return NULL;
@@ -443,7 +443,7 @@
 	Py_RETURN_NONE;
 }
 
-static PyObject *adm_crawl_revisions(PyObject *self, PyObject *args)
+static PyObject *adm_crawl_revisions(PyObject *self, PyObject *args, PyObject *kwargs)
 {
 	char *path;
 	PyObject *reporter;
@@ -452,15 +452,22 @@
 	apr_pool_t *temp_pool;
 	AdmObject *admobj = (AdmObject *)self;
 	svn_wc_traversal_info_t *traversal_info;
+	char *kwnames[] = { "path", "reporter", "restore_files", "recurse", "use_commit_times", "notify_func", NULL };
 
-	if (!PyArg_ParseTuple(args, "sO|bbbO", &path, &reporter, &restore_files, &recurse, &use_commit_times,
-						  &notify_func))
+	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "sO|bbbO", kwnames, &path, 
+									 &reporter, &restore_files, &recurse, 
+									 &use_commit_times, &notify_func))
 		return NULL;
 
 	temp_pool = Pool();
 	if (temp_pool == NULL)
 		return NULL;
 	traversal_info = svn_wc_init_traversal_info(temp_pool);
+	if (traversal_info == NULL) {
+		PyErr_NoMemory();
+		return NULL;
+	}
+
 	RUN_SVN_WITH_POOL(temp_pool, svn_wc_crawl_revisions2(path, admobj->adm, 
 				&py_ra_reporter, (void *)reporter, 
 				restore_files, recurse, use_commit_times, 
@@ -596,7 +603,7 @@
 	{ "add", adm_add, METH_VARARGS, NULL },
 	{ "copy", adm_copy, METH_VARARGS, NULL },
 	{ "delete", adm_delete, METH_VARARGS, NULL },
-	{ "crawl_revisions", adm_crawl_revisions, METH_VARARGS, NULL },
+	{ "crawl_revisions", (PyCFunction)adm_crawl_revisions, METH_VARARGS|METH_KEYWORDS, NULL },
 	{ "get_update_editor", adm_get_update_editor, METH_VARARGS, NULL },
 	{ "close", (PyCFunction)adm_close, METH_NOARGS, NULL },
 	{ "entry", (PyCFunction)adm_entry, METH_VARARGS, NULL },

=== modified file 'workingtree.py'
--- a/workingtree.py	2008-06-19 14:03:32 +0000
+++ b/workingtree.py	2008-06-19 15:16:59 +0000
@@ -51,6 +51,18 @@
 import os
 import urllib
 
+def update_wc(adm, basedir, conn, revnum):
+    # FIXME: honor SVN_CONFIG_SECTION_HELPERS:SVN_CONFIG_OPTION_DIFF3_CMD
+    # FIXME: honor SVN_CONFIG_SECTION_MISCELLANY:SVN_CONFIG_OPTION_USE_COMMIT_TIMES
+    # FIXME: honor SVN_CONFIG_SECTION_MISCELLANY:SVN_CONFIG_OPTION_PRESERVED_CF_EXTS
+    editor = adm.get_update_editor(basedir, False, True)
+    assert editor is not None
+    reporter = conn.do_update(revnum, "", True, editor)
+    adm.crawl_revisions(basedir, reporter, restore_files=False, 
+                        recurse=True, use_commit_times=False)
+    # FIXME: handle externals
+
+
 def generate_ignore_list(ignore_map):
     """Create a list of ignores, ordered by directory.
     
@@ -68,7 +80,7 @@
 class SvnWorkingTree(WorkingTree):
     """WorkingTree implementation that uses a Subversion Working Copy for storage."""
     def __init__(self, bzrdir, local_path, branch):
-        version = svn.wc.check_wc(local_path)
+        version = wc.check_wc(local_path)
         self._format = SvnWorkingTreeFormat(version)
         self.basedir = local_path
         assert isinstance(self.basedir, unicode)
@@ -76,6 +88,7 @@
         self._branch = branch
         self._get_wc()
         (min_rev, max_rev, switch, modified) = wc.revision_status(self.basedir, None, True, None)
+        assert min_rev >= 0 and max_rev >= 0, "min rev: (%d, %d)" % (min_rev, max_rev)
         self.base_revnum = max_rev
         self.base_tree = SvnBasisTree(self)
         self.base_revid = branch.generate_revision_id(self.base_revnum)
@@ -140,20 +153,12 @@
             # FIXME: should be able to use -1 here
             revnum = self.branch.get_revnum()
         adm = self._get_wc()
-        # FIXME: honor SVN_CONFIG_SECTION_HELPERS:SVN_CONFIG_OPTION_DIFF3_CMD
-        # FIXME: honor SVN_CONFIG_SECTION_MISCELLANY:SVN_CONFIG_OPTION_USE_COMMIT_TIMES
-        # FIXME: honor SVN_CONFIG_SECTION_MISCELLANY:SVN_CONFIG_OPTION_PRESERVED_CF_EXTS
         try:
-            editor = adm.get_update_editor(self.basedir, use_commit_times=False, recurse=True)
-            assert editor is not None
             conn = self.branch.repository.transport.get_connection()
             try:
-                reporter = conn.do_update(revnum, True, editor)
-                adm.crawl_revisions(self.basedir, reporter, restore_files=False, recurse=True, 
-                                    use_commit_times=False)
+                update_wc(adm, self.basedir, conn, revnum)
             finally:
                 self.branch.repository.transport.add_connection(conn)
-            # FIXME: handle externals
         finally:
             adm.close()
         return revnum




More information about the bazaar-commits mailing list