$NetBSD: patch-D8490,v 1.1 2020/05/24 01:16:26 joerg Exp $

# HG changeset patch
# User Joerg Sonnenberger <joerg@bec.de>
# Date 1588289528 -7200
#      Fri May 01 01:32:08 2020 +0200
# Branch stable
# Node ID 886c6a1b87bc66671c4e654c2d607800a4a712e9
# Parent  be6401a2572646712aebe80520ee8909562bb0a5
hooks: provide access to transaction changes for internal hooks

External hooks are skipped here as the environment often has a size
limit in the low MBs and that can easily be reached by larger
transactions.

Differential Revision: https://phab.mercurial-scm.org/D8490

diff -r be6401a25726 -r 886c6a1b87bc mercurial/hook.py
--- mercurial/hook.py	Thu May 07 23:54:37 2020 +0200
+++ mercurial/hook.py	Fri May 01 01:32:08 2020 +0200
@@ -158,6 +158,10 @@
     env[b'HG_HOOKNAME'] = name
 
     for k, v in pycompat.iteritems(args):
+        # transaction changes can accumulate MBs of data, so skip it
+        # for external hooks
+        if k == b'changes':
+            continue
         if callable(v):
             v = v()
         if isinstance(v, (dict, list)):
diff -r be6401a25726 -r 886c6a1b87bc mercurial/localrepo.py
--- mercurial/localrepo.py	Thu May 07 23:54:37 2020 +0200
+++ mercurial/localrepo.py	Fri May 01 01:32:08 2020 +0200
@@ -2243,6 +2243,7 @@
 
         tr.hookargs[b'txnid'] = txnid
         tr.hookargs[b'txnname'] = desc
+        tr.hookargs[b'changes'] = tr.changes
         # note: writing the fncache only during finalize mean that the file is
         # outdated when running hooks. As fncache is used for streaming clone,
         # this is not expected to break anything that happen during the hooks.
diff -r be6401a25726 -r 886c6a1b87bc tests/test-hook.t
--- tests/test-hook.t	Thu May 07 23:54:37 2020 +0200
+++ tests/test-hook.t	Fri May 01 01:32:08 2020 +0200
@@ -443,7 +443,7 @@
   HG_PENDING=$TESTTMP/a
   
   transaction abort!
-  txnabort Python hook: txnid,txnname
+  txnabort Python hook: changes,txnid,txnname
   txnabort hook: HG_HOOKNAME=txnabort.1
   HG_HOOKTYPE=txnabort
   HG_TXNID=TXN:$ID$
