Mercurial > hg
comparison mercurial/debugcommands.py @ 38610:3d8ef60569d8
fileset: make debugfileset filter repository files
This prepares for the structural change of the fileset. A computed fileset
will no longer be a set of files, but a boolean function (i.e. matcher) to
test if an input file matches the given fileset expression.
--all-files option is added because some examples in the test need to scan
files across revisions.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sat, 09 Jun 2018 18:58:16 +0900 |
parents | f9805627af1f |
children | 760cc5dc01e8 |
comparison
equal
deleted
inserted
replaced
38609:d474b3b44d4f | 38610:3d8ef60569d8 |
---|---|
873 _(' bug reporting: %s\n'), extbuglink or "") | 873 _(' bug reporting: %s\n'), extbuglink or "") |
874 | 874 |
875 fm.end() | 875 fm.end() |
876 | 876 |
877 @command('debugfileset', | 877 @command('debugfileset', |
878 [('r', 'rev', '', _('apply the filespec on this revision'), _('REV'))], | 878 [('r', 'rev', '', _('apply the filespec on this revision'), _('REV')), |
879 _('[-r REV] FILESPEC')) | 879 ('', 'all-files', False, |
880 _('test files from all revisions and working directory'))], | |
881 _('[-r REV] [--all-files] FILESPEC')) | |
880 def debugfileset(ui, repo, expr, **opts): | 882 def debugfileset(ui, repo, expr, **opts): |
881 '''parse and apply a fileset specification''' | 883 '''parse and apply a fileset specification''' |
882 ctx = scmutil.revsingle(repo, opts.get(r'rev'), None) | 884 opts = pycompat.byteskwargs(opts) |
885 ctx = scmutil.revsingle(repo, opts.get('rev'), None) | |
883 if ui.verbose: | 886 if ui.verbose: |
884 tree = fileset.parse(expr) | 887 tree = fileset.parse(expr) |
885 ui.note(fileset.prettyformat(tree), "\n") | 888 ui.note(fileset.prettyformat(tree), "\n") |
886 | 889 |
887 for f in sorted(ctx.getfileset(expr)): | 890 files = set() |
891 if opts['all_files']: | |
892 for r in repo: | |
893 c = repo[r] | |
894 files.update(c.files()) | |
895 files.update(c.substate) | |
896 if opts['all_files'] or ctx.rev() is None: | |
897 wctx = repo[None] | |
898 files.update(repo.dirstate.walk(scmutil.matchall(repo), | |
899 subrepos=list(wctx.substate), | |
900 unknown=True, ignored=True)) | |
901 files.update(wctx.substate) | |
902 else: | |
903 files.update(ctx.files()) | |
904 files.update(ctx.substate) | |
905 | |
906 m = scmutil.matchfiles(repo, ctx.getfileset(expr)) | |
907 for f in sorted(files): | |
908 if not m(f): | |
909 continue | |
888 ui.write("%s\n" % f) | 910 ui.write("%s\n" % f) |
889 | 911 |
890 @command('debugformat', | 912 @command('debugformat', |
891 [] + cmdutil.formatteropts, | 913 [] + cmdutil.formatteropts, |
892 _('')) | 914 _('')) |