sapling/mercurial
Denis Laxalde e400287a20 revert: do not reverse hunks in interactive when REV is not parent (issue5096)
And introduce a new "apply" operation verb for this case as suggested in
issue5096. This replaces the no longer used "revert" operation.

In interactive revert, when reverting to something else that the parent
revision, display an "apply this change" message with a diff that is not
reversed.

The rationale is that `hg revert -i -r REV` will show hunks of the diff from
the working directory to REV and prompt the user to select them for applying
(to working directory). This contradicts 79cc693b4406 in which it was
decided to have the "direction" of prompted hunks reversed. Later on
[1], there was a broad consensus (but no decision) towards the "as to
be applied direction". Now that --interactive is no longer experimental
(97d754ba45c4), it's time to switch and thus we drop no longer used
"experimental.revertalternateinteractivemode" configuration option.

[1]: https://www.mercurial-scm.org/pipermail/mercurial-devel/2016-November/090142.html


.. feature::

  When interactive revert is run against a revision other than the working
  directory parent, the diff shown is the diff to *apply* to the working directory,
  rather than the diff to *discard* from the working copy. This is in line with
  related user experiences with `git` and appears to be less confusing with
  `ui.interface=curses`.
2017-11-03 14:47:37 +01:00
..
cext parsers: allow clang-format here 2017-10-16 14:53:57 -04:00
cffi codemod: use pycompat.isdarwin 2017-10-12 23:34:34 -07:00
default.d mergetools.rc: find OSX FileMerge in the new location inside Xcode 4.3 2015-10-16 11:37:34 +02:00
help internals: copy-edit "register" -> "registrar" in configitem docs 2017-11-01 13:24:08 -05:00
hgweb diff: also yield file context objects in patch.trydiff() (API) 2017-10-05 21:20:08 +02:00
httpclient httpclient: update to 54868ef054d2 of httpplus 2016-06-27 11:53:50 -04:00
pure codemod: use pycompat.iswindows 2017-10-12 23:30:46 -07:00
templates obsfate: rename obsfate into obsolete in default mapfile 2017-10-19 12:33:53 +02:00
thirdparty thirdparty: vendor attrs 2017-10-01 04:14:16 -07:00
__init__.py python3: don't byte mangle third-party packages 2017-10-01 04:04:18 -07:00
ancestor.py py3: add __bool__ to every class defining __nonzero__ 2017-03-13 12:40:14 -07:00
archival.py archive: add an experimental config to control the metadata file template 2017-07-17 00:49:29 -04:00
bdiff.c bdiff: remove trailing newlines 2017-10-04 10:51:39 -04:00
bdiff.h bdiff: include compat.h in header to define ssize_t 2017-10-13 22:38:24 +09:00
bitmanipulation.h bitmanipulation: reformat with clang-format 2017-10-04 10:52:50 -04:00
bookmarks.py bookmark: add a dedicated txnclose-bookmark hook 2017-10-10 17:53:42 +02:00
branchmap.py branchmap: remove superfluous pass statements 2017-09-30 07:42:59 -04:00
bundle2.py phase: introduce a new 'check:phases' part 2017-10-11 07:13:02 +02:00
bundlerepo.py bundlerepo: update to use new deltaiter api 2017-09-20 09:39:03 -07:00
byterange.py cleanup: use urllibcompat for renamed methods on urllib request objects 2017-10-01 12:14:21 -04:00
changegroup.py devel-warn: add 'warn-' to 'devel.empty-changegroup' config 2017-10-08 21:42:32 +02:00
changelog.py changelog: use a Factory for default value for files 2017-10-02 11:03:53 +01:00
chgserver.py chgserver: do not treat HG as sensitive environ when CHGHG is set 2017-10-18 14:55:39 -07:00
cmdutil.py revert: do not reverse hunks in interactive when REV is not parent (issue5096) 2017-11-03 14:47:37 +01:00
color.py codemod: use pycompat.iswindows 2017-10-12 23:30:46 -07:00
commands.py help: minor copy editing for grammar 2017-10-31 23:09:29 -04:00
commandserver.py style: never use a space before a colon or comma 2017-09-29 15:48:34 +00:00
compat.h encoding: add function to test if a str consists of ASCII characters 2017-04-23 12:59:42 +09:00
config.py config: allow remapping the default section 2017-10-14 17:41:41 +09:00
configitems.py revert: do not reverse hunks in interactive when REV is not parent (issue5096) 2017-11-03 14:47:37 +01:00
context.py statichttprepo: prevent loading dirstate over HTTP on node lookup (issue5717) 2017-10-25 21:58:03 +09:00
copies.py copies: add a config to limit the number of candidates to check in heuristics 2017-10-10 02:25:03 +05:30
crecord.py editor: use an unambiguous path suffix for editor files 2017-08-30 20:25:56 +00:00
dagop.py revset: optimize "draft() & ::x" pattern 2017-08-28 14:49:00 -07:00
dagparser.py py3: iterate bytes as a byte string in dagparser.py 2017-09-03 15:32:45 +09:00
dagutil.py dagutil: use a listcomp instead of a map() 2017-10-15 00:37:24 -04:00
debugcommands.py debug: print parsed bundle2 capabilities with debugcapabilities 2017-10-30 17:09:29 +01:00
destutil.py show: implement "stack" view 2017-07-01 22:38:42 -07:00
dirstate.py dirstate: clean up when restoring identical backups 2017-10-20 05:53:35 -07:00
dirstateguard.py dirstate: update backup functions to take full backup filename 2017-07-12 15:24:07 -07:00
discovery.py discovery: prevent crash caused by prune marker having no parent data 2017-04-19 23:10:05 +09:00
dispatch.py dispatch: when --pager=no is passed, also disable pager on req.repo.ui 2017-10-09 12:42:28 -07:00
dummycert.pem
encoding.py py3: use 'surrogatepass' error handler to process U+DCxx transparently 2017-09-16 22:55:48 +09:00
error.py error: move patch.PatchError so it can easily implement __bytes__ (API) 2017-09-03 16:45:33 +09:00
exchange.py exchange: propagate the subfunctions return 2017-10-19 21:50:14 +02:00
exewrapper.c exewrapper: format with clang-format 2017-10-04 11:04:18 -04:00
extensions.py extensions: always include traceback when extension setup fails 2017-10-17 10:31:44 -07:00
fancyopts.py py3: slice over bytes to prevent getting it's ascii value 2017-06-25 08:36:51 +05:30
filelog.py python3: replace sorted(<dict>.iterkeys()) with sorted(<dict>) 2017-08-22 20:06:58 -04:00
filemerge.py filemerge: pass a default value to _toolstr (issue5718) 2017-10-26 11:07:06 -07:00
fileset.py help: clarify quotes are needed for filesets.size expressions 2016-09-21 16:33:37 +00:00
formatter.py templater: load aliases from [templatealias] section in map file 2017-10-14 18:06:42 +09:00
graphmod.py log: add a "graphwidth" template variable 2017-08-15 10:15:31 -07:00
hbisect.py bisect: move check_state into the bisect module 2016-08-24 04:25:20 +02:00
help.py internals: copy-edit "register" -> "registrar" in configitem docs 2017-11-01 13:24:08 -05:00
hg.py subrepo: implement 'unshare' for Mercurial subrepos 2017-10-17 22:55:33 -04:00
hook.py hook: add a 'hashook' function to test for hook existence 2017-10-08 13:08:31 +02:00
httpconnection.py cleanup: use urllibcompat for renamed methods on urllib request objects 2017-10-01 12:14:21 -04:00
httppeer.py httppeer: always produce native str header keys and values 2017-10-15 00:03:31 -04:00
i18n.py i18n: cache translated messages per encoding 2017-10-13 21:36:10 +09:00
keepalive.py cleanup: use urllibcompat for renamed methods on urllib request objects 2017-10-01 12:14:21 -04:00
localrepo.py sparse-read: skip gaps too small to be worth splitting 2017-10-18 09:07:48 +02:00
lock.py lock: avoid unintentional lock acquisition at failure of readlock 2017-05-01 19:59:13 +09:00
lsprof.py lsprof: use print function 2016-01-02 11:40:53 -08:00
lsprofcalltree.py lsprofcalltree: use print function 2016-01-02 11:45:29 -08:00
mail.py codemod: register core configitems using a script 2017-07-14 14:22:40 -07:00
manifest.py py3: return False early while checking whether None is a key in lazymanifest 2017-09-30 05:22:22 +05:30
match.py match: remove superfluous pass statements 2017-09-30 07:44:45 -04:00
mdiff.py py3: use '%d' for integers instead of '%s' 2017-10-02 04:48:06 +05:30
merge.py merge: add a config option to disable path conflict checking 2017-10-24 11:14:38 -07:00
mergeutil.py checkunresolved: move to new package to help avoid import cycles 2016-11-21 21:31:45 -05:00
minirst.py python3: use our bytes-only version of cgi.escape everywhere 2017-10-05 14:16:20 -04:00
mpatch.c mpatch: switch alignment of wrapped line from tab to spaces with clang-format 2017-10-04 11:00:04 -04:00
mpatch.h mpatch: reformat function prototypes with clang-format 2017-10-04 10:56:33 -04:00
namespaces.py namespaces: record and expose whether namespace is built-in 2017-06-24 14:52:15 -07:00
node.py node: use byte literals to construct nullid and wdirid 2016-03-12 14:04:57 -08:00
obsolete.py config: also gather effect-flags on experimental.evolution 2017-10-19 17:50:20 +02:00
obsutil.py obsfate: fix obsfate_printer with empty date list 2017-10-18 15:38:51 +02:00
parser.py doctest: use print_function and convert bytes to unicode where needed 2017-09-03 14:56:31 +09:00
patch.py revert: do not reverse hunks in interactive when REV is not parent (issue5096) 2017-11-03 14:47:37 +01:00
pathutil.py pathutil: use util.pathto() to calculate relative cwd in canonpath() 2017-11-02 20:35:31 -04:00
peer.py peer: ensure command names are always ascii bytestrs 2017-10-15 00:05:00 -04:00
phases.py phases: pass phase names to hooks instead of internal values 2017-10-18 12:19:53 -05:00
policy.py encoding: add fast path of jsonescape() (issue5533) 2017-04-23 14:47:52 +09:00
posix.py codemod: use pycompat.isdarwin 2017-10-12 23:34:34 -07:00
profiling.py configitems: register the 'profiling.type' config 2017-06-30 03:44:00 +02:00
progress.py configitems: register the 'progress.format' config 2017-10-11 22:53:17 +02:00
pushkey.py pushkey: use absolute_import 2015-08-08 19:57:27 -07:00
pvec.py pvec: use absolute_import 2015-12-21 21:32:58 -08:00
pycompat.py pycompat: define operating system constants 2017-10-12 19:20:04 -07:00
rcutil.py codemod: use pycompat.iswindows 2017-10-12 23:30:46 -07:00
registrar.py registrar: don't i18n ProgrammingError message 2017-10-18 22:10:08 -07:00
repair.py repair: preserve phase also when not using generaldelta (issue5678) 2017-09-14 11:16:57 -07:00
repository.py repository: formalize wire protocol interface 2017-08-13 11:04:42 -07:00
repoview.py repoview: remove incorrect documentation of the function 2017-10-10 23:19:35 +05:30
revlog.py sparse-read: ignore trailing empty revs in each read chunk 2017-10-18 15:28:19 +02:00
revset.py revset: extract a parsefollowlinespattern helper function 2017-10-04 15:27:43 +02:00
revsetlang.py revset: move weight information to predicate 2017-09-01 19:42:09 -07:00
scmposix.py codemod: use pycompat.isdarwin 2017-10-12 23:34:34 -07:00
scmutil.py scmutil: add capability to cleanupnodes to take obsmarker metadata 2017-10-15 14:34:24 +05:30
scmwindows.py pager: use less as a fallback on Unix 2017-04-28 20:51:14 +09:00
selectors2.py selectors2: do not use platform.system() 2017-10-11 17:27:21 -07:00
server.py server: drop executable bit from daemon log file 2017-10-25 21:20:01 +09:00
setdiscovery.py setdiscovery: use iterbatch interface instead of batch 2016-03-01 17:44:41 -05:00
similar.py similar: remove caching from the module level 2017-01-13 11:42:36 -08:00
simplemerge.py simplemerge: remove unused repo parameter 2017-09-01 10:35:43 -07:00
smartset.py py3: fix type of attribute name in smartset.py 2017-09-03 17:14:53 +09:00
sparse.py merge: add merge action 'pr' to rename files during update 2017-10-02 14:05:30 -07:00
sshpeer.py ssh: fix flakey ssh errors on BSD systems 2017-09-11 15:59:18 -07:00
sshserver.py style: never put multiple statements on one line 2017-09-29 15:49:20 +00:00
sslutil.py configitems: register the 'hostsecurity.*:fingerprints' config 2017-10-14 00:29:31 +02:00
statichttprepo.py statichttprepo: do not use platform path separator to build a URL 2017-10-28 17:23:52 +09:00
statprof.py statprof: require input file 2017-01-18 22:45:07 -08:00
store.py py3: iterate bytes as a byte string in store.lowerencode() 2017-09-03 17:28:47 +09:00
streamclone.py codemod: register core configitems using a script 2017-07-14 14:22:40 -07:00
subrepo.py subrepo: implement 'unshare' for Mercurial subrepos 2017-10-17 22:55:33 -04:00
tagmerge.py tagmerge: use workingfilectx to write merged tags 2017-07-11 16:48:15 -07:00
tags.py cachevfs: migration the tags fnode cache to 'cachevfs' 2017-07-15 23:30:25 +02:00
templatefilters.py templatefilters: defend against evil unicode strs in json filter 2017-10-16 22:44:43 -04:00
templatekw.py templatekw: introduce obsfate keyword 2017-10-05 17:42:56 +02:00
templater.py templater: use pycompat.sysbytes to bytes-ify some __name__ attrs 2017-10-17 10:51:43 -04:00
transaction.py util: add base class for transactional context managers 2017-07-28 22:42:10 -07:00
treediscovery.py error: get Abort from 'error' instead of 'util' 2015-10-08 12:55:45 -07:00
txnutil.py
ui.py configitems: relax warning about unwanted default value 2017-10-31 22:37:30 +09:00
unionrepo.py revlog: update signature of dummy addgroup() in bundlerepo and unionrepo 2017-09-15 23:58:45 +09:00
upgrade.py codemod: simplify nested withs 2017-07-13 18:31:35 -07:00
url.py url: add cgi.escape equivalent for bytestrings 2017-10-14 02:57:26 -04:00
urllibcompat.py urllibcompat: move some adapters from pycompat to urllibcompat 2017-10-04 11:58:00 -04:00
util.py codemod: use pycompat.isdarwin 2017-10-12 23:34:34 -07:00
verify.py codemod: register core configitems using a script 2017-07-14 14:22:40 -07:00
vfs.py codemod: use pycompat.iswindows 2017-10-12 23:30:46 -07:00
win32.py win32: work around a WinError problem handling HRESULT types 2017-03-30 00:33:00 -04:00
windows.py ssh: quote parameters using shellquote (SEC) 2017-08-04 23:54:12 -07:00
wireproto.py wireproto: more strkwargs cleanup 2017-10-15 00:39:53 -04:00
worker.py codemod: use pycompat.iswindows 2017-10-12 23:30:46 -07:00