largefiles: fix cat when using relative paths from subdirectory stable
authorMads Kiilerich <madski@unity3d.com>
Fri, 25 Jan 2013 18:20:13 +0100
branchstable
changeset 18491 b7da9c042b9e
parent 18490 877f80599df0
child 18492 45445187d286
largefiles: fix cat when using relative paths from subdirectory
hgext/largefiles/overrides.py
tests/test-largefiles.t
--- a/hgext/largefiles/overrides.py	Fri Jan 25 16:59:34 2013 +0100
+++ b/hgext/largefiles/overrides.py	Fri Jan 25 18:20:13 2013 +0100
@@ -1149,10 +1149,25 @@
 
 def overridecat(orig, ui, repo, file1, *pats, **opts):
     ctx = scmutil.revsingle(repo, opts.get('rev'))
-    if not lfutil.standin(file1) in ctx:
-        result = orig(ui, repo, file1, *pats, **opts)
-        return result
-    return lfcommands.catlfile(repo, file1, ctx.rev(), opts.get('output'))
+    err = 1
+    notbad = set()
+    m = scmutil.match(ctx, (file1,) + pats, opts)
+    origmatchfn = m.matchfn
+    def lfmatchfn(f):
+        lf = lfutil.splitstandin(f)
+        if lf is None:
+            return origmatchfn(f)
+        notbad.add(lf)
+        return origmatchfn(lf)
+    m.matchfn = lfmatchfn
+    m.bad = lambda f, msg: f not in notbad
+    for f in ctx.walk(m):
+        lf = lfutil.splitstandin(f)
+        if lf is None:
+            err = orig(ui, repo, f, **opts)
+        else:
+            err = lfcommands.catlfile(repo, lf, ctx.rev(), opts.get('output'))
+    return err
 
 def mercurialsinkbefore(orig, sink):
     sink.repo._isconverting = True
--- a/tests/test-largefiles.t	Fri Jan 25 16:59:34 2013 +0100
+++ b/tests/test-largefiles.t	Fri Jan 25 18:20:13 2013 +0100
@@ -1412,8 +1412,10 @@
   normal3-modified
   $ hg cat -r '.^' normal3
   normal3-modified
-  $ hg cat -r '.^' sub/large4
+  $ hg cat -r '.^' sub/large4 doesntexist
   large4-modified
+  doesntexist: no such file in rev a381d2c8c80e
+  [1]
 
 Test that renaming a largefile results in correct output for status
 
@@ -2010,6 +2012,8 @@
   $ echo more >> anotherlarge
   $ hg st .
   M anotherlarge
+  $ hg cat anotherlarge
+  anotherlarge
   $ hg revert anotherlarge
   $ hg st
   ? sub/anotherlarge.orig