Mercurial > piecrust2
comparison piecrust/commands/builtin/info.py @ 164:4534ccbdd2a3
find: Fix the `find` command, add more options.
The `--endpoint` option doesn't make any sense anymore since page sources
could have non-file-system endpoints. This was replaced with `--name` to match
source names instead.
Also added `--include-theme`, with filtering out theme pages by default, and
`--exact` to explicitely match the given pattern, with matching anything that
contains the pattern by default.
| author | Ludovic Chabant <ludovic@chabant.com> |
|---|---|
| date | Thu, 01 Jan 2015 21:34:06 -0800 |
| parents | 6d23473fab41 |
| children | 56d6b17e057b |
comparison
equal
deleted
inserted
replaced
| 163:6d23473fab41 | 164:4534ccbdd2a3 |
|---|---|
| 110 self.description = "Find pages in the website." | 110 self.description = "Find pages in the website." |
| 111 | 111 |
| 112 def setupParser(self, parser, app): | 112 def setupParser(self, parser, app): |
| 113 parser.add_argument( | 113 parser.add_argument( |
| 114 'pattern', | 114 'pattern', |
| 115 help="The pattern to match with page slugs", | 115 help="The pattern to match with page filenames", |
| 116 nargs='?') | 116 nargs='?') |
| 117 parser.add_argument( | 117 parser.add_argument( |
| 118 '--endpoint', | 118 '-n', '--name', |
| 119 help="The endpoint(s) to look into", | 119 help="Limit the search to sources matching this name") |
| 120 nargs='+') | |
| 121 parser.add_argument( | 120 parser.add_argument( |
| 122 '--full-path', | 121 '--full-path', |
| 123 help="Return full paths instead of root-relative paths", | 122 help="Return full paths instead of root-relative paths", |
| 124 action='store_true') | 123 action='store_true') |
| 125 parser.add_argument( | 124 parser.add_argument( |
| 126 '--metadata', | 125 '--metadata', |
| 127 help="Return metadata about the page instead of just the path", | 126 help="Return metadata about the page instead of just the path", |
| 128 action='store_true') | 127 action='store_true') |
| 128 parser.add_argument( | |
| 129 '--include-theme', | |
| 130 help="Include theme pages to the search", | |
| 131 action='store_true') | |
| 132 parser.add_argument( | |
| 133 '--exact', | |
| 134 help=("Match the exact given pattern, instead of any page " | |
| 135 "containing the pattern"), | |
| 136 action='store_true') | |
| 129 | 137 |
| 130 def run(self, ctx): | 138 def run(self, ctx): |
| 131 pattern = ctx.args.pattern | 139 pattern = ctx.args.pattern |
| 132 sources = list(ctx.app.sources) | 140 sources = list(ctx.app.sources) |
| 133 if ctx.args.endpoint: | 141 if not ctx.args.exact: |
| 134 endpoints = ctx.args.endpoint | 142 pattern = '*%s*' % pattern |
| 135 sources = [s for s in sources if s.endpoint in endpoints] | 143 |
| 136 for src in sources: | 144 for src in sources: |
| 145 if not ctx.args.include_theme and src.is_theme_source: | |
| 146 continue | |
| 147 if ctx.args.name and not fnmatch.fnmatch(src.name, ctx.args.name): | |
| 148 continue | |
| 149 | |
| 137 page_facs = src.getPageFactories() | 150 page_facs = src.getPageFactories() |
| 138 for pf in page_facs: | 151 for pf in page_facs: |
| 139 name = os.path.relpath(pf.path, ctx.app.root_dir) | 152 name = os.path.relpath(pf.path, ctx.app.root_dir) |
| 140 if pattern is None or fnmatch.fnmatch(name, pattern): | 153 if pattern is None or fnmatch.fnmatch(name, pattern): |
| 141 if ctx.args.full_path: | 154 if ctx.args.full_path: |
