~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/_walkdirs_win32.pyx

  • Committer: John Arbash Meinel
  • Date: 2010-02-10 17:52:08 UTC
  • mfrom: (5021 +trunk)
  • mto: This revision was merged to the branch mainline in revision 5023.
  • Revision ID: john@arbash-meinel.com-20100210175208-bubuwav4uqigu291
Merge bzr.dev 5021 to resolve NEWS

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2008-2011 Canonical Ltd
 
1
# Copyright (C) 2008 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
69
69
 
70
70
 
71
71
import operator
72
 
import os
73
72
import stat
74
73
 
75
 
from bzrlib import _readdir_py
76
 
 
77
 
cdef object osutils
78
 
osutils = None
 
74
from bzrlib import osutils, _readdir_py
79
75
 
80
76
 
81
77
cdef class _Win32Stat:
174
170
 
175
171
    def top_prefix_to_starting_dir(self, top, prefix=""):
176
172
        """See DirReader.top_prefix_to_starting_dir."""
177
 
        global osutils
178
 
        if osutils is None:
179
 
            from bzrlib import osutils
180
173
        return (osutils.safe_utf8(prefix), None, None, None,
181
174
                osutils.safe_unicode(top))
182
175
 
257
250
                #       earlier Exception, so for now, I'm ignoring this
258
251
        dirblock.sort(key=operator.itemgetter(1))
259
252
        return dirblock
260
 
 
261
 
 
262
 
def lstat(path):
263
 
    """Equivalent to os.lstat, except match Win32ReadDir._get_stat_value.
264
 
    """
265
 
    return wrap_stat(os.lstat(path))
266
 
 
267
 
 
268
 
def fstat(fd):
269
 
    """Like os.fstat, except match Win32ReadDir._get_stat_value
270
 
 
271
 
    :seealso: wrap_stat
272
 
    """
273
 
    return wrap_stat(os.fstat(fd))
274
 
 
275
 
 
276
 
def wrap_stat(st):
277
 
    """Return a _Win32Stat object, based on the given stat result.
278
 
 
279
 
    On Windows, os.fstat(open(fname).fileno()) != os.lstat(fname). This is
280
 
    generally because os.lstat and os.fstat differ in what they put into st_ino
281
 
    and st_dev. What gets set where seems to also be dependent on the python
282
 
    version. So we always set it to 0 to avoid worrying about it.
283
 
    """
284
 
    cdef _Win32Stat statvalue
285
 
    statvalue = _Win32Stat()
286
 
    statvalue.st_mode = st.st_mode
287
 
    statvalue.st_ctime = st.st_ctime
288
 
    statvalue.st_mtime = st.st_mtime
289
 
    statvalue.st_atime = st.st_atime
290
 
    statvalue._st_size = st.st_size
291
 
    statvalue.st_ino = 0
292
 
    statvalue.st_dev = 0
293
 
    return statvalue