view contrib/casesmash.py @ 16708:4a02cf4fbb2e

merge: respect bookmarks during merge Bookmarks will behave more like named branches when merge tries to pick a revision to merge. Bookmarks now to respect the current bookmarks. Bookmarks will not accidentally merged with unnamed heads or other bookmarks. However merge can pick heads with diverging bookmarks and pick those automatically. We end up with two cases for picking a revision to merge: (1) In case of an current bookmark, merge can pick a branch head that has a diverged bookmark (2) In case of no current bookmark, merge can pick a branch head that does not have a bookmark.
author David Soria Parra <dsp@php.net>
date Sun, 13 May 2012 11:55:42 +0200
parents f5765353d430
children ff1586a3adc5
line wrap: on
line source

import sys, 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, inst:
            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')