# HG changeset patch # User Matt Harbison # Date 1431916967 14400 # Node ID 63a57a2727b6b63ad8160f54decd7478de1360e9 # Parent fd0f919170d20f8328398de2cca3d8bef160534a files: recurse into subrepos automatically with an explicit path diff -r fd0f919170d2 -r 63a57a2727b6 mercurial/cmdutil.py --- a/mercurial/cmdutil.py Wed May 20 01:06:09 2015 +0900 +++ b/mercurial/cmdutil.py Sun May 17 22:42:47 2015 -0400 @@ -2297,12 +2297,16 @@ fm.write('path', fmt, m.rel(f)) ret = 0 - if subrepos: - for subpath in sorted(ctx.substate): + for subpath in sorted(ctx.substate): + def matchessubrepo(subpath): + return (m.always() or m.exact(subpath) + or any(f.startswith(subpath + '/') for f in m.files())) + + if subrepos or matchessubrepo(subpath): sub = ctx.sub(subpath) try: submatch = matchmod.narrowmatcher(subpath, m) - if sub.printfiles(ui, submatch, fm, fmt) == 0: + if sub.printfiles(ui, submatch, fm, fmt, subrepos) == 0: ret = 0 except error.LookupError: ui.status(_("skipping missing subrepository: %s\n") diff -r fd0f919170d2 -r 63a57a2727b6 mercurial/help/subrepos.txt --- a/mercurial/help/subrepos.txt Wed May 20 01:06:09 2015 +0900 +++ b/mercurial/help/subrepos.txt Sun May 17 22:42:47 2015 -0400 @@ -109,8 +109,10 @@ elements. Subversion subrepositories are currently silently ignored. :files: files does not recurse into subrepos unless -S/--subrepos is - specified. Git and Subversion subrepositories are currently - silently ignored. + specified. However, if you specify the full path of a file or + directory in a subrepo, it will be displayed even without + -S/--subrepos being specified. Git and Subversion subrepositories + are currently silently ignored. :forget: forget currently only handles exact file matches in subrepos. Git and Subversion subrepositories are currently silently ignored. diff -r fd0f919170d2 -r 63a57a2727b6 mercurial/subrepo.py --- a/mercurial/subrepo.py Wed May 20 01:06:09 2015 +0900 +++ b/mercurial/subrepo.py Sun May 17 22:42:47 2015 -0400 @@ -504,7 +504,7 @@ """Resolve the fileset expression for this repo""" return set() - def printfiles(self, ui, m, fm, fmt): + def printfiles(self, ui, m, fm, fmt, subrepos): """handle the files command for this subrepo""" return 1 @@ -904,7 +904,7 @@ return ctx.flags(name) @annotatesubrepoerror - def printfiles(self, ui, m, fm, fmt): + def printfiles(self, ui, m, fm, fmt, subrepos): # If the parent context is a workingctx, use the workingctx here for # consistency. if self._ctx.rev() is None: @@ -912,7 +912,7 @@ else: rev = self._state[1] ctx = self._repo[rev] - return cmdutil.files(ui, ctx, m, fm, fmt, True) + return cmdutil.files(ui, ctx, m, fm, fmt, subrepos) @annotatesubrepoerror def getfileset(self, expr): diff -r fd0f919170d2 -r 63a57a2727b6 tests/test-subrepo-deep-nested-change.t --- a/tests/test-subrepo-deep-nested-change.t Wed May 20 01:06:09 2015 +0900 +++ b/tests/test-subrepo-deep-nested-change.t Sun May 17 22:42:47 2015 -0400 @@ -232,6 +232,18 @@ sub1/sub2/sub2 (glob) sub1/sub2/test.txt (glob) + $ hg files sub1 + sub1/.hgsub (glob) + sub1/.hgsubstate (glob) + sub1/foo (glob) + sub1/sub1 (glob) + sub1/sub2/folder/bar (glob) + sub1/sub2/x.txt (glob) + + $ hg files sub1/sub2 + sub1/sub2/folder/bar (glob) + sub1/sub2/x.txt (glob) + $ hg files -S -r '.^' sub1/sub2/folder sub1/sub2/folder/test.txt (glob) @@ -239,7 +251,7 @@ sub1/sub2/missing: no such file in rev 78026e779ea6 (glob) [1] - $ hg files -S -r '.^' sub1/ + $ hg files -r '.^' sub1/ sub1/.hgsub (glob) sub1/.hgsubstate (glob) sub1/sub1 (glob) @@ -247,7 +259,7 @@ sub1/sub2/sub2 (glob) sub1/sub2/test.txt (glob) - $ hg files -S -r '.^' sub1/sub2 + $ hg files -r '.^' sub1/sub2 sub1/sub2/folder/test.txt (glob) sub1/sub2/sub2 (glob) sub1/sub2/test.txt (glob)