subrepo: use root-repo-relative path from `hg files` with ui.relative-paths=no
authorMartin von Zweigbergk <martinvonz@google.com>
Sun, 17 Feb 2019 09:12:30 -0800
changeset 41748 980e05204ed8
parent 41747 31b84c72ada0
child 41749 f96988680afe
subrepo: use root-repo-relative path from `hg files` with ui.relative-paths=no The fix is to pass in a "subuipathfn" as we do everywhere else. Differential Revision: https://phab.mercurial-scm.org/D5978
mercurial/cmdutil.py
mercurial/commands.py
mercurial/subrepo.py
tests/test-subrepo.t
--- a/mercurial/cmdutil.py	Sun Feb 17 09:05:28 2019 -0800
+++ b/mercurial/cmdutil.py	Sun Feb 17 09:12:30 2019 -0800
@@ -2171,11 +2171,10 @@
         forgot.extend(f for f in forget if f not in rejected)
     return bad, forgot
 
-def files(ui, ctx, m, fm, fmt, subrepos):
+def files(ui, ctx, m, uipathfn, fm, fmt, subrepos):
     ret = 1
 
     needsfctx = ui.verbose or {'size', 'flags'} & fm.datahint()
-    uipathfn = scmutil.getuipathfn(ctx.repo(), legacyrelativevalue=True)
     for f in ctx.matches(m):
         fm.startitem()
         fm.context(ctx=ctx)
@@ -2188,11 +2187,13 @@
 
     for subpath in sorted(ctx.substate):
         submatch = matchmod.subdirmatcher(subpath, m)
+        subuipathfn = scmutil.subdiruipathfn(subpath, uipathfn)
         if (subrepos or m.exact(subpath) or any(submatch.files())):
             sub = ctx.sub(subpath)
             try:
                 recurse = m.exact(subpath) or subrepos
-                if sub.printfiles(ui, submatch, fm, fmt, recurse) == 0:
+                if sub.printfiles(ui, submatch, subuipathfn, fm, fmt,
+                                  recurse) == 0:
                     ret = 0
             except error.LookupError:
                 ui.status(_("skipping missing subrepository: %s\n")
--- a/mercurial/commands.py	Sun Feb 17 09:05:28 2019 -0800
+++ b/mercurial/commands.py	Sun Feb 17 09:12:30 2019 -0800
@@ -2213,8 +2213,10 @@
 
     m = scmutil.match(ctx, pats, opts)
     ui.pager('files')
+    uipathfn = scmutil.getuipathfn(ctx.repo(), legacyrelativevalue=True)
     with ui.formatter('files', opts) as fm:
-        return cmdutil.files(ui, ctx, m, fm, fmt, opts.get('subrepos'))
+        return cmdutil.files(ui, ctx, m, uipathfn, fm, fmt,
+                             opts.get('subrepos'))
 
 @command(
     'forget',
--- a/mercurial/subrepo.py	Sun Feb 17 09:05:28 2019 -0800
+++ b/mercurial/subrepo.py	Sun Feb 17 09:12:30 2019 -0800
@@ -325,7 +325,7 @@
         """Resolve the fileset expression for this repo"""
         return matchmod.never(badfn=badfn)
 
-    def printfiles(self, ui, m, fm, fmt, subrepos):
+    def printfiles(self, ui, m, uipathfn, fm, fmt, subrepos):
         """handle the files command for this subrepo"""
         return 1
 
@@ -795,7 +795,7 @@
         return ctx.flags(name)
 
     @annotatesubrepoerror
-    def printfiles(self, ui, m, fm, fmt, subrepos):
+    def printfiles(self, ui, m, uipathfn, fm, fmt, subrepos):
         # If the parent context is a workingctx, use the workingctx here for
         # consistency.
         if self._ctx.rev() is None:
@@ -803,7 +803,7 @@
         else:
             rev = self._state[1]
             ctx = self._repo[rev]
-        return cmdutil.files(ui, ctx, m, fm, fmt, subrepos)
+        return cmdutil.files(ui, ctx, m, uipathfn, fm, fmt, subrepos)
 
     @annotatesubrepoerror
     def matchfileset(self, expr, badfn=None):
--- a/tests/test-subrepo.t	Sun Feb 17 09:05:28 2019 -0800
+++ b/tests/test-subrepo.t	Sun Feb 17 09:12:30 2019 -0800
@@ -36,7 +36,7 @@
   $ hg files -S --config ui.relative-paths=no
   .hgsub
   a
-  a
+  s/a
 
   $ hg -R s ci -Ams0
   $ hg sum