Patchwork rollback: add a config knob for entirely disabling the command

login
register
mail settings
Submitter Augie Fackler
Date May 3, 2016, 8:33 p.m.
Message ID <f6510f68910519e91665.1462307632@arthedain.pit.corp.google.com>
Download mbox | patch
Permalink /patch/14872/
State Superseded
Headers show

Comments

Augie Fackler - May 3, 2016, 8:33 p.m.
# HG changeset patch
# User Augie Fackler <augie@google.com>
# Date 1462307605 14400
#      Tue May 03 16:33:25 2016 -0400
# Node ID f6510f68910519e91665c098afb59c3d95cfbf8b
# Parent  8eba4cdcfd810d80785c94d770a442c5bd1f9d0f
rollback: add a config knob for entirely disabling the command

This is of pretty high value for organizations that used to use p4 (as
an example), since `p4 rollback` is what we call `hg backout`.
timeless - May 4, 2016, 12:19 a.m.
Augie Fackler <raf@durin42.com> wrote:
> +        raise error.Abort(_('rollback is disabled and unsafe'),

rollback is disabled because it is unsafe

Patch

diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -6377,6 +6377,11 @@  def rollback(ui, repo, **opts):
       commit transaction if it isn't checked out. Use --force to
       override this protection.
 
+      The rollback command can be entirely disabled using the
+      `ui.norollback` configuration setting. If you're here because
+      you want to use rollback and it's disabled, you can re-enable
+      the command by setting `ui.norollback` to `true`.
+
     This command is not intended for use on public repositories. Once
     changes are visible for pull by other users, rolling a transaction
     back locally is ineffective (someone else may already have pulled
@@ -6386,6 +6391,9 @@  def rollback(ui, repo, **opts):
 
     Returns 0 on success, 1 if no rollback data is available.
     """
+    if ui.configbool('ui', 'norollback', False):
+        raise error.Abort(_('rollback is disabled and unsafe'),
+                          hint=('see `hg help -v rollback` for information'))
     return repo.rollback(dryrun=opts.get('dry_run'),
                          force=opts.get('force'))
 
diff --git a/tests/test-rollback.t b/tests/test-rollback.t
--- a/tests/test-rollback.t
+++ b/tests/test-rollback.t
@@ -196,3 +196,15 @@  corrupt journal test
   checking files
   1 files, 2 changesets, 2 total revisions
 
+rollback disabled by config
+  $ cat >> $HGRCPATH <<EOF
+  > [ui]
+  > norollback = true
+  > EOF
+  $ echo narf >> pinky-sayings.txt
+  $ hg add pinky-sayings.txt
+  $ hg ci -m 'First one.'
+  $ hg rollback
+  abort: rollback is disabled and unsafe
+  (see `hg help -v rollback` for information)
+  [255]