Mercurial > hg
changeset 42010:db26dbbee74d
diff: support diffing explicit files in subrepos
Most other commands support implied recursion based on file names already.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Thu, 21 Mar 2019 21:40:22 -0400 |
parents | 8f427f7c1f71 |
children | 22278dae287c |
files | mercurial/help/subrepos.txt mercurial/logcmdutil.py tests/test-subrepo.t |
diffstat | 3 files changed, 30 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/help/subrepos.txt Thu Mar 21 18:27:09 2019 -0700 +++ b/mercurial/help/subrepos.txt Thu Mar 21 21:40:22 2019 -0400 @@ -105,8 +105,10 @@ Subversion subrepositories will print a warning and abort. :diff: diff does not recurse in subrepos unless -S/--subrepos is - specified. Changes are displayed as usual, on the subrepositories - elements. 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 diffed even without + -S/--subrepos being specified. Subversion subrepositories are + currently silently ignored. :files: files does not recurse into subrepos unless -S/--subrepos is specified. However, if you specify the full path of a file or
--- a/mercurial/logcmdutil.py Thu Mar 21 18:27:09 2019 -0700 +++ b/mercurial/logcmdutil.py Thu Mar 21 21:40:22 2019 -0400 @@ -129,19 +129,19 @@ for chunk, label in chunks: ui.write(chunk, label=label) - if listsubrepos: - for subpath, sub in scmutil.itersubrepos(ctx1, ctx2): - tempnode2 = node2 - try: - if node2 is not None: - tempnode2 = ctx2.substate[subpath][1] - except KeyError: - # A subrepo that existed in node1 was deleted between node1 and - # node2 (inclusive). Thus, ctx2's substate won't contain that - # subpath. The best we can do is to ignore it. - tempnode2 = None - submatch = matchmod.subdirmatcher(subpath, match) - subprefix = repo.wvfs.reljoin(prefix, subpath) + for subpath, sub in scmutil.itersubrepos(ctx1, ctx2): + tempnode2 = node2 + try: + if node2 is not None: + tempnode2 = ctx2.substate[subpath][1] + except KeyError: + # A subrepo that existed in node1 was deleted between node1 and + # node2 (inclusive). Thus, ctx2's substate won't contain that + # subpath. The best we can do is to ignore it. + tempnode2 = None + submatch = matchmod.subdirmatcher(subpath, match) + subprefix = repo.wvfs.reljoin(prefix, subpath) + if listsubrepos or match.exact(subpath) or any(submatch.files()): sub.diff(ui, diffopts, tempnode2, submatch, changes=changes, stat=stat, fp=fp, prefix=subprefix)
--- a/tests/test-subrepo.t Thu Mar 21 18:27:09 2019 -0700 +++ b/tests/test-subrepo.t Thu Mar 21 21:40:22 2019 -0400 @@ -1875,6 +1875,19 @@ @@ -0,0 +1,1 @@ +bar + $ hg diff -X '.hgsub*' --nodates s + diff -r 000000000000 s/a + --- /dev/null + +++ b/s/a + @@ -0,0 +1,1 @@ + +a + $ hg diff -X '.hgsub*' --nodates s/a + diff -r 000000000000 s/a + --- /dev/null + +++ b/s/a + @@ -0,0 +1,1 @@ + +a + $ cd .. test for ssh exploit 2017-07-25