# HG changeset patch # User Ryan McElroy # Date 2017-03-15 00:43:18 # Node ID 79d98e1b21a7afc1045a03a1aaf27ee598b8bbb8 # Parent 448acdee91613b1f3dcc14569b164849069cac0f update: add flag to require update destination In some mercurial workflows, the default destination for update does not always work well and can lead to confusing behavior. With this flag enabled, every update command will require passing an explicit destination, eliminating this confusion. diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -5349,6 +5349,11 @@ def update(ui, repo, node=None, rev=None if rev and node: raise error.Abort(_("please specify just one revision")) + if ui.configbool('commands', 'update.requiredest', False): + if not node and not rev and not date: + raise error.Abort(_('you must specify a destination'), + hint=_('for example: hg update ".::"')) + if rev is None or rev == '': rev = node diff --git a/mercurial/help/config.txt b/mercurial/help/config.txt --- a/mercurial/help/config.txt +++ b/mercurial/help/config.txt @@ -414,6 +414,15 @@ effect and style see :hg:`help color`. a different color mode than the pager (activated via the "pager" extension). +``commands`` +---------- + +``update.requiredest`` + Require that the user pass a destination when running ``hg update``. + For example, ``hg update .::`` will be allowed, but a plain ``hg update`` + will be disallowed. + (default: False) + ``committemplate`` ------------------ diff --git a/tests/test-update-names.t b/tests/test-update-names.t --- a/tests/test-update-names.t +++ b/tests/test-update-names.t @@ -88,3 +88,19 @@ Test that warning is printed if cwd is d (consider changing to repo root: $TESTTMP/r1/r4) #endif + + $ cd $TESTTMP + $ cat >> $HGRCPATH < [commands] + > update.requiredest = True + > EOF + $ hg init dest + $ cd dest + $ echo a >> a + $ hg commit -qAm aa + $ hg up + abort: you must specify a destination + (for example: hg update ".::") + [255] + $ hg up . + 0 files updated, 0 files merged, 0 files removed, 0 files unresolved