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