comparison mercurial/streamclone.py @ 5396:5105b119edd2

Add osutil module, containing a listdir function. This is similar to os.listdir, only it returns a sorted list of tuples.
author Bryan O'Sullivan <bos@serpentine.com>
date Fri, 05 Oct 2007 15:01:06 -0700
parents 97b734fb9c6f
children a58d415b272e
comparison
equal deleted inserted replaced
5395:e73a83af7926 5396:5105b119edd2
4 # 4 #
5 # This software may be used and distributed according to the terms 5 # This software may be used and distributed according to the terms
6 # of the GNU General Public License, incorporated herein by reference. 6 # of the GNU General Public License, incorporated herein by reference.
7 7
8 from i18n import _ 8 from i18n import _
9 import os, stat, util, lock 9 import os, osutil, stat, util, lock
10 10
11 # if server supports streaming clone, it advertises "stream" 11 # if server supports streaming clone, it advertises "stream"
12 # capability with value that is version+flags of repo it is serving. 12 # capability with value that is version+flags of repo it is serving.
13 # client only streams if it can read that repo format. 13 # client only streams if it can read that repo format.
14 14
17 walk in natural (sorted) order. 17 walk in natural (sorted) order.
18 yields 2-tuples: name of .d or .i file, size of file.''' 18 yields 2-tuples: name of .d or .i file, size of file.'''
19 19
20 strip_count = len(root) + len(os.sep) 20 strip_count = len(root) + len(os.sep)
21 def walk(path, recurse): 21 def walk(path, recurse):
22 ents = os.listdir(path) 22 for e, kind, st in osutil.listdir(path, stat=True):
23 ents.sort()
24 for e in ents:
25 pe = os.path.join(path, e) 23 pe = os.path.join(path, e)
26 st = os.lstat(pe) 24 if kind == stat.S_IFDIR:
27 if stat.S_ISDIR(st.st_mode):
28 if recurse: 25 if recurse:
29 for x in walk(pe, True): 26 for x in walk(pe, True):
30 yield x 27 yield x
31 else: 28 else:
32 if not stat.S_ISREG(st.st_mode) or len(e) < 2: 29 if kind != stat.S_IFREG or len(e) < 2:
33 continue 30 continue
34 sfx = e[-2:] 31 sfx = e[-2:]
35 if sfx in ('.d', '.i'): 32 if sfx in ('.d', '.i'):
36 yield pe[strip_count:], st.st_size 33 yield pe[strip_count:], st.st_size
37 # write file data first 34 # write file data first