diff --git a/hgext/uncommit.py b/hgext/uncommit.py --- a/hgext/uncommit.py +++ b/hgext/uncommit.py @@ -140,6 +140,8 @@ @command('uncommit', [('', 'keep', None, _('allow an empty commit after uncommiting')), + ('', 'allow-dirty-working-copy', False, + _('allow uncommit with outstanding changes')) ] + commands.walkopts, _('[OPTION]... [FILE]...'), helpcategory=command.CATEGORY_CHANGE_MANAGEMENT) @@ -160,10 +162,11 @@ m, a, r, d = repo.status()[:4] isdirtypath = any(set(m + a + r + d) & set(pats)) - if not repo.ui.configbool('experimental', 'uncommitondirtywdir') and \ - (not pats or isdirtypath): + allowdirtywcopy = (opts['allow_dirty_working_copy'] or + repo.ui.configbool('experimental', 'uncommitondirtywdir')) + if not allowdirtywcopy and (not pats or isdirtypath): cmdutil.bailifchanged(repo, hint=_('requires ' - 'experimental.uncommitondirtywdir to uncommit')) + '--allow-dirty-working-copy to uncommit')) old = repo['.'] rewriteutil.precheck(repo, [old.rev()], 'uncommit') if len(old.parents()) > 1: diff --git a/tests/test-uncommit.t b/tests/test-uncommit.t --- a/tests/test-uncommit.t +++ b/tests/test-uncommit.t @@ -34,9 +34,10 @@ options ([+] can be repeated): - --keep allow an empty commit after uncommiting - -I --include PATTERN [+] include names matching the given patterns - -X --exclude PATTERN [+] exclude names matching the given patterns + --keep allow an empty commit after uncommiting + --allow-dirty-working-copy allow uncommit with outstanding changes + -I --include PATTERN [+] include names matching the given patterns + -X --exclude PATTERN [+] exclude names matching the given patterns (some details hidden, use --verbose to show complete help) @@ -156,11 +157,11 @@ M files $ hg uncommit abort: uncommitted changes - (requires experimental.uncommitondirtywdir to uncommit) + (requires --allow-dirty-working-copy to uncommit) [255] $ hg uncommit files abort: uncommitted changes - (requires experimental.uncommitondirtywdir to uncommit) + (requires --allow-dirty-working-copy to uncommit) [255] $ cat files abcde @@ -172,7 +173,7 @@ $ echo "bar" >> files $ hg uncommit abort: uncommitted changes - (requires experimental.uncommitondirtywdir to uncommit) + (requires --allow-dirty-working-copy to uncommit) [255] $ hg uncommit --config experimental.uncommitondirtywdir=True $ hg commit -m "files abcde + foo" @@ -395,7 +396,7 @@ $ hg uncommit abort: outstanding uncommitted merge - (requires experimental.uncommitondirtywdir to uncommit) + (requires --allow-dirty-working-copy to uncommit) [255] $ hg uncommit --config experimental.uncommitondirtywdir=True @@ -482,7 +483,7 @@ $ hg unc a $ hg unc b abort: uncommitted changes - (requires experimental.uncommitondirtywdir to uncommit) + (requires --allow-dirty-working-copy to uncommit) [255] $ cat a super critical info! @@ -496,7 +497,7 @@ $ hg ci -Am 'add b' $ echo 'foo bar' > b - $ hg unc --config experimental.uncommitondirtywdir=True b + $ hg unc --allow-dirty-working-copy b $ hg log changeset: 3:30fa958635b2 tag: tip