Rev 2533: Make sure to set basename_len. With that patch, the tests pass. in http://bzr.arbash-meinel.com/branches/bzr/0.17-dev/dirstate_pyrex

John Arbash Meinel john at arbash-meinel.com
Wed Jul 11 22:49:39 BST 2007


At http://bzr.arbash-meinel.com/branches/bzr/0.17-dev/dirstate_pyrex

------------------------------------------------------------
revno: 2533
revision-id: john at arbash-meinel.com-20070711214905-e2cxwnuoxr9r1o9r
parent: john at arbash-meinel.com-20070711000154-4et8yf8si3jgxmgc
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: dirstate_pyrex
timestamp: Wed 2007-07-11 16:49:05 -0500
message:
  Make sure to set basename_len. With that patch, the tests pass.
modified:
  bzrlib/_dirstate_helpers_c.pyx dirstate_helpers.pyx-20070503201057-u425eni465q4idwn-3
  bzrlib/_dirstate_helpers_py.py _dirstate_helpers_py-20070710145033-90nz6cqglsk150jy-1
-------------- next part --------------
=== modified file 'bzrlib/_dirstate_helpers_c.pyx'
--- a/bzrlib/_dirstate_helpers_c.pyx	2007-07-11 00:01:54 +0000
+++ b/bzrlib/_dirstate_helpers_c.pyx	2007-07-11 21:49:05 +0000
@@ -199,8 +199,8 @@
                                  PyString_Size(path2))
 
 
-cdef _cmp_path_by_dirblock(char *path1, int path1_len,
-                           char *path2, int path2_len):
+cdef int _cmp_path_by_dirblock(char *path1, int path1_len,
+                               char *path2, int path2_len):
     cdef char *dirname1
     cdef int dirname1_len
     cdef char *dirname2
@@ -212,12 +212,6 @@
     cdef int cur_len
     cdef int cmp_val
 
-    dirname1 = path1
-    dirname1_len = path1_len
-
-    dirname2 = path2
-    dirname2_len = path2_len
-
     if path1_len == 0 and path2_len == 0:
         return 0
 
@@ -227,29 +221,31 @@
     if path2_len == 0:
         return 1
 
-    basename1 = <char*>_my_memrchr(dirname1, c'/', dirname1_len)
+    basename1 = <char*>_my_memrchr(path1, c'/', path1_len)
 
     if basename1 == NULL:
-        basename1 = dirname1
+        basename1 = path1
+        basename1_len = path1_len
         dirname1 = ''
         dirname1_len = 0
     else:
-        cur_len = basename1 - dirname1
+        dirname1 = path1
+        dirname1_len = basename1 - path1
         basename1 = basename1 + 1
-        basename1_len = dirname1_len - cur_len - 1
-        dirname1_len = cur_len
+        basename1_len = path1_len - dirname1_len - 1
 
-    basename2 = <char*>_my_memrchr(dirname2, c'/', dirname2_len)
+    basename2 = <char*>_my_memrchr(path2, c'/', path2_len)
 
     if basename2 == NULL:
-        basename2 = dirname2
+        basename2 = path2
+        basename2_len = path2_len
         dirname2 = ''
         dirname2_len = 0
     else:
-        cur_len = basename2 - dirname2
+        dirname2 = path2
+        dirname2_len = basename2 - path2
         basename2 = basename2 + 1
-        basename2_len = dirname2_len - cur_len - 1
-        dirname2_len = cur_len
+        basename2_len = path2_len - dirname2_len - 1
 
     cmp_val = _cmp_by_dirs(dirname1, dirname1_len,
                            dirname2, dirname2_len)
@@ -270,6 +266,16 @@
     return 1
 
 
+cdef object _pystr(char *s, int length):
+    if s == NULL:
+        if length == 0:
+            return ''
+        else:
+            return None
+    else:
+        return PyString_FromStringAndSize(s, length)
+
+
 def bisect_path_left_c(paths, path):
     """Return the index where to insert path into paths.
 
@@ -346,7 +352,6 @@
     cdef char *cur_str
     cdef int cur_size
     cdef void *cur
-    cdef int cmp_val
 
     if not PyList_CheckExact(paths):
         raise TypeError('you must pass a python list for paths')
@@ -364,12 +369,7 @@
         cur = PyList_GetItem_object_void(paths, _mid)
         cur_str = PyString_AS_STRING_void(cur)
         cur_size = PyString_GET_SIZE_void(cur)
-        cmp_val = _cmp_path_by_dirblock(path_str, path_size, cur_str, cur_size)
-        print 'c_left mid: %d, cmp_val %d, cur_str %r, path_str %r' % (
-            _mid, cmp_val,
-            PyString_FromStringAndSize(cur_str, cur_size),
-            PyString_FromStringAndSize(path_str, path_size))
-        if cmp_val < 0:
+        if _cmp_path_by_dirblock(path_str, path_size, cur_str, cur_size) < 0:
             _hi = _mid
         else:
             _lo = _mid + 1

=== modified file 'bzrlib/_dirstate_helpers_py.py'
--- a/bzrlib/_dirstate_helpers_py.py	2007-07-11 00:01:54 +0000
+++ b/bzrlib/_dirstate_helpers_py.py	2007-07-11 21:49:05 +0000
@@ -58,10 +58,7 @@
         mid = (lo + hi) // 2
         # Grab the dirname for the current dirblock
         cur = paths[mid]
-        cmp_val = cmp_path_by_dirblock_py(cur, path)
-        print 'py_left mid: %d, cmp_val %d, cur_str %r, path_str %r' % (
-            mid, cmp_val, cur, path)
-        if cmp_val < 0:
+        if cmp_path_by_dirblock_py(cur, path) < 0:
             lo = mid + 1
         else:
             hi = mid



More information about the bazaar-commits mailing list