--- 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)