~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/_dirstate_helpers_pyx.pyx

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2009-11-17 03:20:35 UTC
  • mfrom: (4792.4.3 456036)
  • Revision ID: pqm@pqm.ubuntu.com-20091117032035-s3sgtlixj1lrminn
(Gordon Tyler) Fix IndexError during 'bzr ignore /' (#456036)

Show diffs side-by-side

added added

removed removed

Lines of Context:
119
119
    # void *memrchr(void *s, int c, size_t len)
120
120
 
121
121
 
122
 
cdef void* _my_memrchr(void *s, int c, size_t n): # cannot_raise
 
122
cdef void* _my_memrchr(void *s, int c, size_t n):
123
123
    # memrchr seems to be a GNU extension, so we have to implement it ourselves
124
124
    cdef char *pos
125
125
    cdef char *start
165
165
    return PyString_FromStringAndSize(s, size)
166
166
 
167
167
 
168
 
cdef int _is_aligned(void *ptr): # cannot_raise
 
168
cdef int _is_aligned(void *ptr):
169
169
    """Is this pointer aligned to an integer size offset?
170
170
 
171
171
    :return: 1 if this pointer is aligned, 0 otherwise.
173
173
    return ((<intptr_t>ptr) & ((sizeof(int))-1)) == 0
174
174
 
175
175
 
176
 
cdef int _cmp_by_dirs(char *path1, int size1, char *path2, int size2): # cannot_raise
 
176
cdef int _cmp_by_dirs(char *path1, int size1, char *path2, int size2):
177
177
    cdef unsigned char *cur1
178
178
    cdef unsigned char *cur2
179
179
    cdef unsigned char *end1
295
295
 
296
296
 
297
297
cdef int _cmp_path_by_dirblock_intern(char *path1, int path1_len,
298
 
                                      char *path2, int path2_len): # cannot_raise
 
298
                                      char *path2, int path2_len):
299
299
    """Compare two paths by what directory they are in.
300
300
 
301
301
    see ``_cmp_path_by_dirblock`` for details.
768
768
    state._dirblock_state = DirState.IN_MEMORY_UNMODIFIED
769
769
 
770
770
 
771
 
cdef int minikind_from_mode(int mode): # cannot_raise
 
771
cdef int minikind_from_mode(int mode):
772
772
    # in order of frequency:
773
773
    if S_ISREG(mode):
774
774
        return c"f"
915
915
    return link_or_sha1
916
916
 
917
917
 
918
 
# TODO: Do we want to worry about exceptions here?
919
 
cdef char _minikind_from_string(object string) except? -1:
 
918
cdef char _minikind_from_string(object string):
920
919
    """Convert a python string to a char."""
921
920
    return PyString_AsString(string)[0]
922
921
 
954
953
    raise KeyError(PyString_FromStringAndSize(_minikind, 1))
955
954
 
956
955
 
957
 
cdef int _versioned_minikind(char minikind): # cannot_raise
 
956
cdef int _versioned_minikind(char minikind):
958
957
    """Return non-zero if minikind is in fltd"""
959
958
    return (minikind == c'f' or
960
959
            minikind == c'd' or
1374
1373
    def iter_changes(self):
1375
1374
        return self
1376
1375
 
1377
 
    cdef int _gather_result_for_consistency(self, result) except -1:
 
1376
    cdef void _gather_result_for_consistency(self, result):
1378
1377
        """Check a result we will yield to make sure we are consistent later.
1379
1378
        
1380
1379
        This gathers result's parents into a set to output later.
1382
1381
        :param result: A result tuple.
1383
1382
        """
1384
1383
        if not self.partial or not result[0]:
1385
 
            return 0
 
1384
            return
1386
1385
        self.seen_ids.add(result[0])
1387
1386
        new_path = result[1][1]
1388
1387
        if new_path:
1392
1391
            # Add the root directory which parent_directories does not
1393
1392
            # provide.
1394
1393
            self.search_specific_file_parents.add('')
1395
 
        return 0
1396
1394
 
1397
 
    cdef int _update_current_block(self) except -1:
 
1395
    cdef void _update_current_block(self):
1398
1396
        if (self.block_index < len(self.state._dirblocks) and
1399
1397
            osutils.is_inside(self.current_root, self.state._dirblocks[self.block_index][0])):
1400
1398
            self.current_block = self.state._dirblocks[self.block_index]
1403
1401
        else:
1404
1402
            self.current_block = None
1405
1403
            self.current_block_list = None
1406
 
        return 0
1407
1404
 
1408
1405
    def __next__(self):
1409
1406
        # Simple thunk to allow tail recursion without pyrex confusion