Rev 1266: Cherrypick additional assertions, small improvements from the cext branch. in http://people.samba.org/bzr/jelmer/bzr-svn/0.4

Jelmer Vernooij jelmer at samba.org
Sun Jun 22 09:45:54 BST 2008


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

------------------------------------------------------------
revno: 1266
revision-id: jelmer at samba.org-20080622084553-tr8u5z31hd8er3jv
parent: jelmer at samba.org-20080622083112-68pzny4uxj2ttk3a
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: 0.4
timestamp: Sun 2008-06-22 10:45:53 +0200
message:
  Cherrypick additional assertions, small improvements from the cext branch.
modified:
  logwalker.py                   logwalker.py-20060621215743-c13fhfnyzh1xzwh2-1
  mapping.py                     mapping.py-20080128201303-6cp01phc0dmc0kiv-1
  mapping3/__init__.py           __init__.py-20080502174630-9324zh25kka98vlw-1
  setup.py                       setup.py-20060502115218-86950492da22353f
  tests/test_errors.py           test_errors.py-20070129114605-ban03f32t6ja14ez-1
  wc.c                           wc.pyx-20080313142018-10l8l23vha2j9e6b-1
  workingtree.py                 workingtree.py-20060306120941-b083cb0fdd4a69de
=== modified file 'logwalker.py'
--- a/logwalker.py	2008-06-22 07:37:15 +0000
+++ b/logwalker.py	2008-06-22 08:45:53 +0000
@@ -185,6 +185,7 @@
             revprops = lazy_dict({}, self._transport.revprop_list, revnum)
 
             if changes.changes_path(revpaths, path, True):
+                assert isinstance(revnum, int)
                 yield (revpaths, revnum, revprops)
                 i += 1
                 if limit != 0 and i == limit:
@@ -193,7 +194,11 @@
             if next is None:
                 break
 
+            assert (ascending and next[1] > revnum) or \
+                   (not ascending and next[1] < revnum)
             (path, revnum) = next
+            assert isinstance(path, str)
+            assert isinstance(revnum, int)
 
     def get_previous(self, path, revnum):
         """Return path,revnum pair specified pair was derived from.
@@ -247,9 +252,11 @@
 
         :param to_revnum: End of range to fetch information for
         """
+        assert isinstance(self.saved_revnum, int)
         if to_revnum <= self.saved_revnum:
             return
         latest_revnum = self.actual._transport.get_latest_revnum()
+        assert isinstance(latest_revnum, int)
         to_revnum = max(latest_revnum, to_revnum)
 
         pb = ui.ui_factory.nested_progress_bar()

=== modified file 'mapping.py'
--- a/mapping.py	2008-06-22 08:08:39 +0000
+++ b/mapping.py	2008-06-22 08:45:53 +0000
@@ -21,7 +21,6 @@
 
 from bzrlib.plugins.svn import core, errors, properties, version_info
 import calendar
-import svn
 import time
 import urllib
 

=== modified file 'mapping3/__init__.py'
--- a/mapping3/__init__.py	2008-06-17 22:52:33 +0000
+++ b/mapping3/__init__.py	2008-06-22 08:45:53 +0000
@@ -71,6 +71,7 @@
             return self.repository.transport.check_path(path, revnum) == NODE_DIR
         def find_children(path):
             try:
+                assert not path.startswith("/")
                 dirents = self.repository.transport.get_dir(path, revnum)[0]
             except SubversionException, (msg, num):
                 if num in (ERR_FS_NOT_DIRECTORY, ERR_FS_NOT_FOUND, ERR_RA_DAV_PATH_NOT_FOUND):

=== modified file 'setup.py'
--- a/setup.py	2008-06-22 08:08:39 +0000
+++ b/setup.py	2008-06-22 08:45:53 +0000
@@ -44,7 +44,7 @@
       ext_modules=[
           Extension("core", ["core.c", "util.c"], libraries=["svn_subr-1"], 
                     include_dirs=[apr_include_dir(), svn_include_dir()]), 
-          Extension("client", ["client.c", "util.c"], libraries=["svn_client-1"], 
+          Extension("client", ["client.c", "editor.c", "util.c", "ra.c", "wc.c"], libraries=["svn_client-1"], 
                     include_dirs=[apr_include_dir(), svn_include_dir()]), 
           Extension("ra", ["ra.c", "util.c", "editor.c"], libraries=["svn_ra-1"], 
                     include_dirs=[apr_include_dir(), svn_include_dir()]), 

=== modified file 'tests/test_errors.py'
--- a/tests/test_errors.py	2008-06-15 02:48:51 +0000
+++ b/tests/test_errors.py	2008-06-22 08:45:53 +0000
@@ -19,8 +19,8 @@
                            UnexpectedEndOfContainerError)
 from bzrlib.tests import TestCase
 
+from bzrlib.plugins.svn.core import SubversionException
 from bzrlib.plugins.svn.errors import *
-from bzrlib.plugins.svn.core import SubversionException
 
 class TestConvertError(TestCase):
     def test_decorator_unknown(self):

=== modified file 'wc.c'
--- a/wc.c	2008-06-22 05:13:11 +0000
+++ b/wc.c	2008-06-22 08:45:53 +0000
@@ -452,7 +452,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;
@@ -461,8 +461,9 @@
 	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,
+	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "sO|bbbO", kwnames, &path, &reporter, &restore_files, &recurse, &use_commit_times,
 						  &notify_func))
 		return NULL;
 
@@ -605,7 +606,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-22 06:04:20 +0000
+++ b/workingtree.py	2008-06-22 08:45:53 +0000
@@ -218,7 +218,7 @@
         assert isinstance(path, str)
 
         rp = self.branch.unprefix(path)
-        entry = self.base_tree.id_map[rp]
+        entry = self.basis_tree().id_map[rp]
         assert entry[0] is not None
         assert isinstance(entry[0], str), "fileid %r for %r is not a string" % (entry[0], path)
         return entry
@@ -660,6 +660,32 @@
 
         return []
 
+    def path_content_summary(self, path, _lstat=os.lstat,
+        _mapper=osutils.file_kind_from_stat_mode):
+        """See Tree.path_content_summary."""
+        abspath = self.abspath(path)
+        try:
+            stat_result = _lstat(abspath)
+        except OSError, e:
+            if getattr(e, 'errno', None) == errno.ENOENT:
+                # no file.
+                return ('missing', None, None, None)
+            # propagate other errors
+            raise
+        kind = _mapper(stat_result.st_mode)
+        if kind == 'file':
+            size = stat_result.st_size
+            # try for a stat cache lookup
+            executable = self._is_executable_from_path_and_stat(path, stat_result)
+            return (kind, size, executable, self._sha_from_stat(
+                path, stat_result))
+        elif kind == 'directory':
+            return kind, None, None, None
+        elif kind == 'symlink':
+            return ('symlink', None, None, os.readlink(abspath))
+        else:
+            return (kind, None, None, None)
+
     def _reset_data(self):
         pass
 
@@ -713,7 +739,10 @@
         self.local_path = transport.local_abspath(".")
         
         # Open related remote repository + branch
-        wc = WorkingCopy(None, self.local_path)
+        try:
+            wc = WorkingCopy(None, self.local_path)
+        except SubversionException, (msg, ERR_WC_UNSUPPORTED_FORMAT):
+            raise UnsupportedFormatError(msg, kind='workingtree')
         try:
             self.svn_url = wc.entry(self.local_path, True).url
         finally:




More information about the bazaar-commits mailing list