121
|
1 # osutil.py - pure Python version of osutil.c
|
|
2 #
|
|
3 # Copyright 2009 Matt Mackall <mpm@selenic.com> and others
|
|
4 #
|
|
5 # This software may be used and distributed according to the terms of the
|
|
6 # GNU General Public License version 2, incorporated herein by reference.
|
|
7
|
|
8 import os
|
|
9 import stat as _stat
|
|
10
|
|
11 posixfile = file
|
|
12
|
|
13 def _mode_to_kind(mode):
|
|
14 if _stat.S_ISREG(mode): return _stat.S_IFREG
|
|
15 if _stat.S_ISDIR(mode): return _stat.S_IFDIR
|
|
16 if _stat.S_ISLNK(mode): return _stat.S_IFLNK
|
|
17 if _stat.S_ISBLK(mode): return _stat.S_IFBLK
|
|
18 if _stat.S_ISCHR(mode): return _stat.S_IFCHR
|
|
19 if _stat.S_ISFIFO(mode): return _stat.S_IFIFO
|
|
20 if _stat.S_ISSOCK(mode): return _stat.S_IFSOCK
|
|
21 return mode
|
|
22
|
|
23 def listdir(path, stat=False, skip=None):
|
|
24 '''listdir(path, stat=False) -> list_of_tuples
|
|
25
|
|
26 Return a sorted list containing information about the entries
|
|
27 in the directory.
|
|
28
|
|
29 If stat is True, each element is a 3-tuple:
|
|
30
|
|
31 (name, type, stat object)
|
|
32
|
|
33 Otherwise, each element is a 2-tuple:
|
|
34
|
|
35 (name, type)
|
|
36 '''
|
|
37 result = []
|
|
38 prefix = path
|
|
39 if not prefix.endswith(os.sep):
|
|
40 prefix += os.sep
|
|
41 names = os.listdir(path)
|
|
42 names.sort()
|
|
43 for fn in names:
|
|
44 st = os.lstat(prefix + fn)
|
|
45 if fn == skip and _stat.S_ISDIR(st.st_mode):
|
|
46 return []
|
|
47 if stat:
|
|
48 result.append((fn, _mode_to_kind(st.st_mode), st))
|
|
49 else:
|
|
50 result.append((fn, _mode_to_kind(st.st_mode)))
|
|
51 return result
|
|
52
|