view contrib/casesmash.py @ 44450:7d5455b988ec stable

discovery: avoid wrong detection of multiple branch heads (issue6256) This fix the code using obsolescence markers to remove "to be obsoleted" heads during the detection of new head creation from push. The code turned out to not use the branch information at all. This lead changeset from different branch to be detected as new head on unrelated branch. The code fix is actually quite simple. New tests have been added to covers these cases. Differential Revision: https://phab.mercurial-scm.org/D8259
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Fri, 06 Mar 2020 23:27:28 +0100
parents 2372284d9457
children 6000f5b25c9b
line wrap: on
line source

from __future__ import absolute_import
import __builtin__
import os
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')