Rev 3706: Review feedback. in http://people.ubuntu.com/~robertc/baz2.0/readdir

Robert Collins robertc at robertcollins.net
Wed Sep 24 00:28:33 BST 2008


At http://people.ubuntu.com/~robertc/baz2.0/readdir

------------------------------------------------------------
revno: 3706
revision-id: robertc at robertcollins.net-20080923232827-vpd4xsif8x8op6i3
parent: robertc at robertcollins.net-20080923230253-uckcf2d6z3dw1kni
committer: Robert Collins <robertc at robertcollins.net>
branch nick: readdir
timestamp: Wed 2008-09-24 09:28:27 +1000
message:
  Review feedback.
modified:
  .bzrignore                     bzrignore-20050311232317-81f7b71efa2db11a
  bzrlib/_readdir_py.py          readdir.py-20060609152855-rm6v321vuaqyh9tu-3
  bzrlib/_readdir_pyx.pyx        readdir.pyx-20060609152855-rm6v321vuaqyh9tu-1
  bzrlib/_walkdirs_win32.pyx     _walkdirs_win32.pyx-20080716220454-kweh3tgxez5dvw2l-2
  bzrlib/osutils.py              osutils.py-20050309040759-eeaff12fbf77ac86
  setup.py                       setup.py-20050314065409-02f8a0a6e3f9bc70
=== modified file '.bzrignore'
--- a/.bzrignore	2008-09-03 06:31:11 +0000
+++ b/.bzrignore	2008-09-23 23:28:27 +0000
@@ -47,8 +47,8 @@
 doc/en/developer-guide/HACKING.txt
 doc/en/user-reference/bzr_man.txt
 # built extension modules
-bzrlib/_*_c.dll
-bzrlib/_*_c.so
-bzrlib/_*_c.pyd
+bzrlib/_*.dll
+bzrlib/_*.so
+bzrlib/_*.pyd
 # generated help topics
 doc/en/user-reference/*.txt

=== modified file 'bzrlib/_readdir_py.py'
--- a/bzrlib/_readdir_py.py	2008-09-10 07:42:59 +0000
+++ b/bzrlib/_readdir_py.py	2008-09-23 23:28:27 +0000
@@ -44,7 +44,7 @@
 def _kind_from_mode(stat_mode, _formats=_formats, _unknown='unknown'):
     """Generate a file kind from a stat mode. This is used in walkdirs.
 
-    Its performance is critical: Do not mutate without careful benchmarking.
+    It's performance is critical: Do not mutate without careful benchmarking.
     """
     try:
         return _formats[stat_mode & 0170000]

=== modified file 'bzrlib/_readdir_pyx.pyx'
--- a/bzrlib/_readdir_pyx.pyx	2008-09-13 04:39:02 +0000
+++ b/bzrlib/_readdir_pyx.pyx	2008-09-23 23:28:27 +0000
@@ -37,12 +37,21 @@
     void *malloc(int)
     void free(void *)
 
+
+cdef extern from 'sys/types.h':
+    ctypedef long ssize_t
+    ctypedef unsigned long size_t
+    ctypedef long time_t
+    ctypedef unsigned long ino_t
+    ctypedef unsigned long long off_t
+
+
 cdef extern from 'sys/stat.h':
     cdef struct stat:
         int st_mode
-        int st_size
+        off_t st_size
         int st_dev
-        int st_ino
+        ino_t st_ino
         int st_mtime
         int st_ctime
     int lstat(char *path, stat *buf)
@@ -55,13 +64,6 @@
     int S_ISSOCK(int mode)
 
 
-cdef extern from 'sys/types.h':
-    ctypedef long ssize_t
-    ctypedef unsigned long size_t
-    ctypedef long time_t
-    ctypedef unsigned long ino_t
-
-
 cdef extern from 'Python.h':
     char * PyString_AS_STRING(object)
     ctypedef int Py_ssize_t # Required for older pyrex versions
@@ -168,7 +170,7 @@
         return self._kind_from_mode(mode)
 
     cdef _kind_from_mode(self, int mode):
-        # in order of frequency:
+        # Files and directories are the most common - check them first.
         if S_ISREG(mode):
             return self._file
         if S_ISDIR(mode):
@@ -224,7 +226,8 @@
         for index from 0 <= index < length:
             atuple = PyList_GetItem_object_void(result, index)
             name = <object>PyTuple_GetItem_void_void(atuple, 1)
-            # We have inode, name, None, statvalue, None
+            # We have a tuple with (inode, name, None, statvalue, None)
+            # Now edit it:
             # inode -> path_from_top
             # direct concat - faster than operator +.
             new_val_obj = <PyObject *>relprefix
@@ -235,12 +238,13 @@
                 # at it?
                 raise Exception("failed to strcat")
             PyTuple_SetItem_obj(atuple, 0, new_val_obj)
-            # None -> kind
+            # 1st None -> kind
             newval = self._kind_from_mode(
                 (<_Stat>PyTuple_GetItem_void_void(atuple, 3)).st_mode)
             Py_INCREF(newval)
             PyTuple_SetItem(atuple, 2, newval)
-            # none -> abspath # perhaps only do if its a dir?
+            # 2nd None -> abspath # for all - the caller may need to stat files
+            # etc.
             # direct concat - faster than operator +.
             new_val_obj = <PyObject *>top_slash
             Py_INCREF(top_slash)
@@ -257,7 +261,9 @@
     """Like os.listdir, this reads the contents of a directory.
 
     :param path: the directory to list.
-    :return: a list of (sort_key, basename) tuples.
+    :return: a list of single-owner (the list) tuples ready for editing into
+        the result tuples walkdirs needs to yield. They contain (inode, name,
+        None, statvalue, None).
     """
     cdef DIR *the_dir
     # currently this needs a fixup - the C code says 'dirent' but should say

=== modified file 'bzrlib/_walkdirs_win32.pyx'
--- a/bzrlib/_walkdirs_win32.pyx	2008-09-09 16:13:37 +0000
+++ b/bzrlib/_walkdirs_win32.pyx	2008-09-23 23:28:27 +0000
@@ -71,7 +71,7 @@
 import operator
 import stat
 
-from bzrlib import osutils
+from bzrlib import osutils, _readdir_py
 
 
 cdef class _Win32Stat:
@@ -158,8 +158,8 @@
     cdef object _file_kind
 
     def __init__(self):
-        self._directory_kind = osutils._directory_kind
-        self._file_kind = osutils._formats[stat.S_IFREG]
+        self._directory_kind = _readdir_py._directory
+        self._file_kind = _readdir_py._file
 
     def top_prefix_to_starting_dir(self, top, prefix=""):
         """See DirReader.top_prefix_to_starting_dir."""

=== modified file 'bzrlib/osutils.py'
--- a/bzrlib/osutils.py	2008-09-23 23:02:53 +0000
+++ b/bzrlib/osutils.py	2008-09-23 23:28:27 +0000
@@ -1219,7 +1219,7 @@
 
         :param prefix: A utf8 prefix to be preprended to the path basenames.
         :param top: A natively encoded path to read.
-        :return: A sorted list of the directories contents. Each item contains:
+        :return: A list of the directories contents. Each item contains:
             (utf8_relpath, utf8_name, kind, lstatvalue, native_abspath)
         """
         raise NotImplementedError(self.read_dir)
@@ -1565,7 +1565,7 @@
             file_kind_from_stat_mode = UTF8DirReader().kind_from_mode
         except ImportError:
             from bzrlib._readdir_py import (
-                _kind_from_mode as _file_kind_from_stat_mode
+                _kind_from_mode as file_kind_from_stat_mode
                 )
     return file_kind_from_stat_mode(mode)
 file_kind_from_stat_mode = file_kind_from_stat_mode_thunk

=== modified file 'setup.py'
--- a/setup.py	2008-09-04 12:03:01 +0000
+++ b/setup.py	2008-09-23 23:28:27 +0000
@@ -228,13 +228,14 @@
 add_pyrex_extension('bzrlib._btree_serializer_c')
 add_pyrex_extension('bzrlib._dirstate_helpers_c')
 add_pyrex_extension('bzrlib._knit_load_data_c')
-add_pyrex_extension('bzrlib._readdir_pyx')
 if sys.platform == 'win32':
     # pyrex uses the macro WIN32 to detect the platform, even though it should
     # be using something like _WIN32 or MS_WINDOWS, oh well, we can give it the
     # right value.
     add_pyrex_extension('bzrlib._walkdirs_win32',
                         define_macros=[('WIN32', None)])
+else:
+    add_pyrex_extension('bzrlib._readdir_pyx')
 ext_modules.append(Extension('bzrlib._patiencediff_c', ['bzrlib/_patiencediff_c.c']))
 
 




More information about the bazaar-commits mailing list