Mercurial > public > mercurial-scm > hg
view mercurial/osutil.py @ 7305:c21d236ca897
hgweb: descend empty directories in web view
When a manifest has a series of directories with nothing in them but a single
directory, displaying the entire chain of empty directories allows for
navigation down to the first non-empty directory with a single click.
Because Java links package hierarchy to directory hierarchy, and because Java
conventions include at least three empty directories at the top of this
hierarchy, descending down empty directories is very common in Java web tools.
author | Ry4an Brase <ry4an-hg@ry4an.org> |
---|---|
date | Mon, 03 Nov 2008 10:20:28 +0100 |
parents | 00d76fa3ffba |
children |
line wrap: on
line source
import os import stat as _stat def _mode_to_kind(mode): if _stat.S_ISREG(mode): return _stat.S_IFREG if _stat.S_ISDIR(mode): return _stat.S_IFDIR if _stat.S_ISLNK(mode): return _stat.S_IFLNK if _stat.S_ISBLK(mode): return _stat.S_IFBLK if _stat.S_ISCHR(mode): return _stat.S_IFCHR if _stat.S_ISFIFO(mode): return _stat.S_IFIFO if _stat.S_ISSOCK(mode): return _stat.S_IFSOCK return mode def listdir(path, stat=False, skip=None): '''listdir(path, stat=False) -> list_of_tuples Return a sorted list containing information about the entries in the directory. If stat is True, each element is a 3-tuple: (name, type, stat object) Otherwise, each element is a 2-tuple: (name, type) ''' result = [] prefix = path if not prefix.endswith(os.sep): prefix += os.sep names = os.listdir(path) names.sort() for fn in names: st = os.lstat(prefix + fn) if fn == skip and _stat.S_ISDIR(st.st_mode): return [] if stat: result.append((fn, _mode_to_kind(st.st_mode), st)) else: result.append((fn, _mode_to_kind(st.st_mode))) return result