Mercurial > public > mercurial-scm > hg-stable
diff mercurial/exchange.py @ 44555:bd7b2c8d06cc
pull: add `--confirm` flag to confirm before writing changes
This introduces a new flag to pull command `--confirm` and also a config option
named `pull.confirm` which if used will prompt user describing changes which are
pulled and asking whether to accept them or not.
Differential Revision: https://phab.mercurial-scm.org/D8200
author | Pulkit Goyal <7895pulkit@gmail.com> |
---|---|
date | Sat, 29 Feb 2020 12:58:38 +0530 |
parents | 9d2b2df2c2ba |
children | 72feaeb510b3 |
line wrap: on
line diff
--- a/mercurial/exchange.py Sat Feb 29 12:58:13 2020 +0530 +++ b/mercurial/exchange.py Sat Feb 29 12:58:38 2020 +0530 @@ -8,6 +8,7 @@ from __future__ import absolute_import import collections +import weakref from .i18n import _ from .node import ( @@ -1705,6 +1706,25 @@ pullop.rheads = set(pullop.rheads) - pullop.common +def add_confirm_callback(repo, pullop): + """ adds a finalize callback to transaction which can be used to show stats + to user and confirm the pull before committing transaction """ + + tr = pullop.trmanager.transaction() + scmutil.registersummarycallback( + repo, tr, txnname=b'pull', as_validator=True + ) + reporef = weakref.ref(repo.unfiltered()) + + def prompt(tr): + repo = reporef() + cm = _(b'accept incoming changes (yn)?$$ &Yes $$ &No') + if repo.ui.promptchoice(cm): + raise error.Abort("user aborted") + + tr.addvalidator(b'900-pull-prompt', prompt) + + def pull( repo, remote, @@ -1716,6 +1736,7 @@ includepats=None, excludepats=None, depth=None, + confirm=None, ): """Fetch repository data from a remote. @@ -1740,6 +1761,8 @@ ``depth`` is an integer indicating the DAG depth of history we're interested in. If defined, for each revision specified in ``heads``, we will fetch up to this many of its ancestors and data associated with them. + ``confirm`` is a boolean indicating whether the pull should be confirmed + before committing the transaction. This overrides HGPLAIN. Returns the ``pulloperation`` created for this pull. """ @@ -1786,6 +1809,11 @@ if not bookmod.bookmarksinstore(repo): wlock = repo.wlock() with wlock, repo.lock(), pullop.trmanager: + if confirm or ( + repo.ui.configbool(b"pull", b"confirm") and not repo.ui.plain() + ): + add_confirm_callback(repo, pullop) + # Use the modern wire protocol, if available. if remote.capable(b'command-changesetdata'): exchangev2.pull(pullop)