--- a/mercurial/cmdutil.py Wed Mar 27 17:21:46 2024 +0000
+++ b/mercurial/cmdutil.py Wed Mar 27 17:29:48 2024 +0000
@@ -4135,3 +4135,46 @@
with repo.wlock():
graftstate = statemod.cmdstate(repo, b'graftstate')
return abortgraft(ui, repo, graftstate)
+
+
+def postincoming(ui, repo, modheads, optupdate, checkout, brev):
+ """Run after a changegroup has been added via pull/unbundle
+
+ This takes arguments below:
+
+ :modheads: change of heads by pull/unbundle
+ :optupdate: updating working directory is needed or not
+ :checkout: update destination revision (or None to default destination)
+ :brev: a name, which might be a bookmark to be activated after updating
+
+ return True if update raise any conflict, False otherwise.
+ """
+ if modheads == 0:
+ return False
+ if optupdate:
+ # avoid circular import
+ from . import hg
+
+ try:
+ return hg.updatetotally(ui, repo, checkout, brev)
+ except error.UpdateAbort as inst:
+ msg = _(b"not updating: %s") % stringutil.forcebytestr(inst)
+ hint = inst.hint
+ raise error.UpdateAbort(msg, hint=hint)
+ if ui.quiet:
+ pass # we won't report anything so the other clause are useless.
+ elif modheads is not None and modheads > 1:
+ currentbranchheads = len(repo.branchheads())
+ if currentbranchheads == modheads:
+ ui.status(
+ _(b"(run 'hg heads' to see heads, 'hg merge' to merge)\n")
+ )
+ elif currentbranchheads > 1:
+ ui.status(
+ _(b"(run 'hg heads .' to see heads, 'hg merge' to merge)\n")
+ )
+ else:
+ ui.status(_(b"(run 'hg heads' to see heads)\n"))
+ elif not ui.configbool(b'commands', b'update.requiredest'):
+ ui.status(_(b"(run 'hg update' to get a working copy)\n"))
+ return False