[PATCH 1 of 2] cmdutil: rename a to A on Mac and Windows succeeds (issue1717)

Simon Heimberg simohe at besonet.ch
Wed Jul 22 08:22:36 CDT 2009


# HG changeset patch
# User Simon Heimberg <simohe at besonet.ch>
# Date 1248259922 -7200
# Node ID ca876099803a9e71497d9deaee3c9fb7ff47ee81
# Parent  87df4249b626f412be634df807da1849cdab135b
cmdutil: rename a to A on Mac and Windows succeeds (issue1717)

diff -r 87df4249b626 -r ca876099803a mercurial/cmdutil.py
--- a/mercurial/cmdutil.py	Fre Jul 17 12:23:15 2009 +0200
+++ b/mercurial/cmdutil.py	Mit Jul 22 12:52:02 2009 +0200
@@ -388,10 +388,25 @@
                      repo.pathto(prevsrc, cwd)))
             return
 
+        def samepath(file1, file2):
+            if len(file1) <> len(file2):
+                return False
+            if hasattr(os.path, 'samefile'):
+                return os.path.samefile(file1, file2)
+            return os.path.normcase(file1) == os.path.normcase(file2)
+
         # check for overwrites
         exists = os.path.exists(target)
+        changecase = False
         if not after and exists or after and state in 'mn':
-            if not opts['force']:
+            if opts['force']:
+                pass
+            elif not after and samepath(src, target):
+                #case change on case insensitive filesystems
+                if not dryrun:
+                    os.rename(src, target)
+                changecase = True
+            else:
                 ui.warn(_('%s: not overwriting - file exists\n') %
                         reltarget)
                 return
@@ -399,7 +414,7 @@
         if after:
             if not exists:
                 return
-        elif not dryrun:
+        elif not dryrun and not changecase:
             try:
                 if exists:
                     os.unlink(target)
@@ -439,7 +454,7 @@
             elif not dryrun:
                 repo.copy(origsrc, abstarget)
 
-        if rename and not dryrun:
+        if rename and not dryrun and not changecase:
             repo.remove([abssrc], not after)
 
     # pat: ossep


More information about the Mercurial-devel mailing list