diff hgext/largefiles/overrides.py @ 24006:42fa7eeb858e

largefiles: use the core file copy logic to validate the destination path The destination is validated by pathutil.canonpath() for illegal components, and that it is in the repository. The logic for creating the standin directory tree was calling this before cmdutil.copy(), but without the destination file name component. The cmdutil.copy() logic also calls pathutil.canonpath(), but with the file name component. By always calling the core logic first, the error message is always consistent. Specifically, the old behavior for these tests was to say '.hg' contains an illegal component, and '..' is not under root. A user wasn't likely to notice the discrepancy, but this eliminates a needless difference when running the test suite with --config extensions.largefiles=.
author Matt Harbison <matt_harbison@yahoo.com>
date Sat, 31 Jan 2015 00:13:29 -0500
parents 344939126579
children e1dbe0b215ae
line wrap: on
line diff
--- a/hgext/largefiles/overrides.py	Fri Jan 16 15:40:59 2015 -0800
+++ b/hgext/largefiles/overrides.py	Sat Jan 31 00:13:29 2015 -0500
@@ -559,16 +559,6 @@
         # this isn't legal, let the original function deal with it
         return orig(ui, repo, pats, opts, rename)
 
-    def makestandin(relpath):
-        path = pathutil.canonpath(repo.root, repo.getcwd(), relpath)
-        return os.path.join(repo.wjoin(lfutil.standin(path)))
-
-    fullpats = scmutil.expandpats(pats)
-    dest = fullpats[-1]
-
-    if os.path.isdir(dest):
-        if not os.path.isdir(makestandin(dest)):
-            os.makedirs(makestandin(dest))
     # This could copy both lfiles and normal files in one command,
     # but we don't want to do that. First replace their matcher to
     # only match normal files and run it, then replace it to just
@@ -595,6 +585,17 @@
     except OSError:
         return result
 
+    def makestandin(relpath):
+        path = pathutil.canonpath(repo.root, repo.getcwd(), relpath)
+        return os.path.join(repo.wjoin(lfutil.standin(path)))
+
+    fullpats = scmutil.expandpats(pats)
+    dest = fullpats[-1]
+
+    if os.path.isdir(dest):
+        if not os.path.isdir(makestandin(dest)):
+            os.makedirs(makestandin(dest))
+
     try:
         try:
             # When we call orig below it creates the standins but we don't add