view mercurial/osutil.py @ 6179:36ab165abbe2

patch: fix iterhunks() with trailing binary file removal Like some renames or copy operations, binary file removal does not generate any "file" or "hunk" action, but was not tagged as such and let iterhunk() assume no hunk was applied for the deleted file.
author Patrick Mezard <pmezard@gmail.com>
date Thu, 28 Feb 2008 00:07:37 +0100
parents 5105b119edd2
children 0d513661d6c2
line wrap: on
line source

import os, 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):
    '''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 + os.sep
    names = os.listdir(path)
    names.sort()
    for fn in names:
        st = os.lstat(prefix + fn)
        if stat:
            result.append((fn, _mode_to_kind(st.st_mode), st))
        else:
            result.append((fn, _mode_to_kind(st.st_mode)))
    return result