contrib/casesmash.py
author Pierre-Yves David <pierre-yves.david@fb.com>
Tue, 24 Jun 2014 16:57:16 +0100
changeset 22189 cde6b489365c
parent 19378 9de689d20230
child 28351 42a7301fb4d5
permissions -rw-r--r--
revert: drop special case handling for file unknown in parent We had a special case for file not caught by any categories. It was aimed at files missing in wc and wc's parent but existing in the target revision. This is now properly handled using status information.

import os, __builtin__
from mercurial import util

def lowerwrap(scope, funcname):
    f = getattr(scope, funcname)
    def wrap(fname, *args, **kwargs):
        d, base = os.path.split(fname)
        try:
            files = os.listdir(d or '.')
        except OSError:
            files = []
        if base in files:
            return f(fname, *args, **kwargs)
        for fn in files:
            if fn.lower() == base.lower():
                return f(os.path.join(d, fn), *args, **kwargs)
        return f(fname, *args, **kwargs)
    scope.__dict__[funcname] = wrap

def normcase(path):
    return path.lower()

os.path.normcase = normcase

for f in 'file open'.split():
    lowerwrap(__builtin__, f)

for f in "chmod chown open lstat stat remove unlink".split():
    lowerwrap(os, f)

for f in "exists lexists".split():
    lowerwrap(os.path, f)

lowerwrap(util, 'posixfile')