# HG changeset patch # User FUJIWARA Katsunori # Date 1437060136 -32400 # Node ID 5e18f6e39006b3c897d02338508ccf4fc7c4d1f4 # Parent 584044e5ad571c3b4f2f9c2f6201917fd369b1f9 censor: make various path forms available like other Mercurial commands Before this patch, censored file should be exactly "a path relative to repository root" regardless of current working directory, because "hg censor" passes "path" to "repo.file()" directly without any preparations. To make various path forms available like other Mercurial commands, this patch gets a target file path in the way of "hg parents FILE". Getting "wctx" is relocated to reuse "wctx" for efficiency. diff -r 584044e5ad57 -r 5e18f6e39006 hgext/censor.py --- a/hgext/censor.py Tue Jul 14 14:40:56 2015 +0100 +++ b/hgext/censor.py Fri Jul 17 00:22:16 2015 +0900 @@ -47,6 +47,12 @@ if not rev: raise util.Abort(_('must specify revision to censor')) + wctx = repo[None] + + m = scmutil.match(wctx, (path,)) + if m.anypats() or len(m.files()) != 1: + raise util.Abort(_('can only specify an explicit filename')) + path = m.files()[0] flog = repo.file(path) if not len(flog): raise util.Abort(_('cannot censor file with no history')) @@ -70,7 +76,6 @@ raise util.Abort(_('cannot censor file in heads (%s)') % headlist, hint=_('clean/delete and commit first')) - wctx = repo[None] wp = wctx.parents() if ctx.node() in [p.node() for p in wp]: raise util.Abort(_('cannot censor working directory'), diff -r 584044e5ad57 -r 5e18f6e39006 tests/test-censor.t --- a/tests/test-censor.t Tue Jul 14 14:40:56 2015 +0100 +++ b/tests/test-censor.t Fri Jul 17 00:22:16 2015 +0900 @@ -72,7 +72,10 @@ Censor revision with 2 offenses - $ hg censor -r $C2 -t "remove password" target +(this also tests file pattern matching: path relative to cwd case) + + $ mkdir -p foo/bar/baz + $ hg --cwd foo/bar/baz censor -r $C2 -t "remove password" ../../../target $ hg cat -r $H1 target Tainted file is now sanitized $ hg cat -r $H2 target @@ -89,7 +92,9 @@ Censor revision with 1 offense - $ hg censor -r $C1 target +(this also tests file pattern matching: with 'path:' scheme) + + $ hg --cwd foo/bar/baz censor -r $C1 path:target $ hg cat -r $H1 target Tainted file is now sanitized $ hg cat -r $H2 target