[PATCH 2 of 2 stable] largefiles: fix cat when using relative paths from subdirectory

Mads Kiilerich mads at kiilerich.com
Fri Jan 25 11:34:06 CST 2013


# HG changeset patch
# User Mads Kiilerich <madski at unity3d.com>
# Date 1359134413 -3600
# Branch stable
# Node ID 235c36b2fa6887b601f729b409a7f6673203772a
# Parent  1fa7dfd609ffd5464d2aef473cb1191758b0e073
largefiles: fix cat when using relative paths from subdirectory

diff --git a/hgext/largefiles/overrides.py b/hgext/largefiles/overrides.py
--- a/hgext/largefiles/overrides.py
+++ b/hgext/largefiles/overrides.py
@@ -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
diff --git a/tests/test-largefiles.t b/tests/test-largefiles.t
--- a/tests/test-largefiles.t
+++ b/tests/test-largefiles.t
@@ -1338,8 +1338,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
 
@@ -1865,6 +1867,8 @@
   $ echo more >> anotherlarge
   $ hg st .
   M anotherlarge
+  $ hg cat anotherlarge
+  anotherlarge
   $ hg revert anotherlarge
   $ hg st
   ? sub/anotherlarge.orig


More information about the Mercurial-devel mailing list