diff contrib/casesmash.py @ 14730:f5765353d430 stable

merge with stable
author Matt Mackall <mpm@selenic.com>
date Fri, 24 Jun 2011 13:35:03 -0500
parents
children ff1586a3adc5
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contrib/casesmash.py	Fri Jun 24 13:35:03 2011 -0500
@@ -0,0 +1,34 @@
+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')