Sun May 24 01:16:26 2020 UTC ()
Merge a number of patches already committed or under review for issues
found in the NetBSD deployment. Bump revision.


(joerg)
diff -r1.40 -r1.41 pkgsrc/devel/py-mercurial/Makefile
diff -r1.87 -r1.88 pkgsrc/devel/py-mercurial/distinfo
diff -r0 -r1.1 pkgsrc/devel/py-mercurial/patches/patch-D8480
diff -r0 -r1.1 pkgsrc/devel/py-mercurial/patches/patch-D8481
diff -r0 -r1.1 pkgsrc/devel/py-mercurial/patches/patch-D8487
diff -r0 -r1.1 pkgsrc/devel/py-mercurial/patches/patch-D8490
diff -r0 -r1.1 pkgsrc/devel/py-mercurial/patches/patch-D8505
diff -r0 -r1.1 pkgsrc/devel/py-mercurial/patches/patch-D8522
diff -r0 -r1.1 pkgsrc/devel/py-mercurial/patches/patch-D8574
diff -r0 -r1.1 pkgsrc/devel/py-mercurial/patches/patch-D8575

cvs diff -r1.40 -r1.41 pkgsrc/devel/py-mercurial/Makefile (expand / switch to unified diff)

--- pkgsrc/devel/py-mercurial/Makefile 2020/05/05 12:12:47 1.40
+++ pkgsrc/devel/py-mercurial/Makefile 2020/05/24 01:16:26 1.41
@@ -1,17 +1,18 @@ @@ -1,17 +1,18 @@
1# $NetBSD: Makefile,v 1.40 2020/05/05 12:12:47 wiz Exp $ 1# $NetBSD: Makefile,v 1.41 2020/05/24 01:16:26 joerg Exp $
2 2
3DISTNAME= mercurial-${VERSION} 3DISTNAME= mercurial-${VERSION}
4PKGNAME= ${PYPKGPREFIX}-${DISTNAME} 4PKGNAME= ${PYPKGPREFIX}-${DISTNAME}
 5PKGREVISION= 1
5CATEGORIES= devel scm 6CATEGORIES= devel scm
6MASTER_SITES= https://www.mercurial-scm.org/release/ 7MASTER_SITES= https://www.mercurial-scm.org/release/
7 8
8MAINTAINER= wiz@NetBSD.org 9MAINTAINER= wiz@NetBSD.org
9HOMEPAGE= https://www.mercurial-scm.org/ 10HOMEPAGE= https://www.mercurial-scm.org/
10COMMENT= Fast, lightweight source control management system 11COMMENT= Fast, lightweight source control management system
11LICENSE= gnu-gpl-v2 OR gnu-gpl-v3 # OR newer 12LICENSE= gnu-gpl-v2 OR gnu-gpl-v3 # OR newer
12 13
13# with this dependency, two zip test cases start working 14# with this dependency, two zip test cases start working
14# https://bz.mercurial-scm.org/show_bug.cgi?id=4483 15# https://bz.mercurial-scm.org/show_bug.cgi?id=4483
15# https://bz.mercurial-scm.org/show_bug.cgi?id=4485 16# https://bz.mercurial-scm.org/show_bug.cgi?id=4485
16BUILD_DEPENDS+= unzip-[0-9]*:../../archivers/unzip 17BUILD_DEPENDS+= unzip-[0-9]*:../../archivers/unzip
17DEPENDS+= ${PYPKGPREFIX}-curses-[0-9]*:../../devel/py-curses 18DEPENDS+= ${PYPKGPREFIX}-curses-[0-9]*:../../devel/py-curses

cvs diff -r1.87 -r1.88 pkgsrc/devel/py-mercurial/distinfo (expand / switch to unified diff)

--- pkgsrc/devel/py-mercurial/distinfo 2020/05/05 12:12:47 1.87
+++ pkgsrc/devel/py-mercurial/distinfo 2020/05/24 01:16:26 1.88
@@ -1,6 +1,14 @@ @@ -1,6 +1,14 @@
1$NetBSD: distinfo,v 1.87 2020/05/05 12:12:47 wiz Exp $ 1$NetBSD: distinfo,v 1.88 2020/05/24 01:16:26 joerg Exp $
2 2
3SHA1 (mercurial-5.4.tar.gz) = 652a2c61dec85f5e9eb101425861e9648bd6369a 3SHA1 (mercurial-5.4.tar.gz) = 652a2c61dec85f5e9eb101425861e9648bd6369a
4RMD160 (mercurial-5.4.tar.gz) = 002ccbd67bc903b7e19e470db44503e6cb37a2f2 4RMD160 (mercurial-5.4.tar.gz) = 002ccbd67bc903b7e19e470db44503e6cb37a2f2
5SHA512 (mercurial-5.4.tar.gz) = 5f92d653ab74da4696ba7f1402e6cb219c0c514a5eeecb9d7282ab95aef2c6f16d5c8e3d0149525f3dc694a133c713b671ba92327e1b0dc3ad8701d522986d8d 5SHA512 (mercurial-5.4.tar.gz) = 5f92d653ab74da4696ba7f1402e6cb219c0c514a5eeecb9d7282ab95aef2c6f16d5c8e3d0149525f3dc694a133c713b671ba92327e1b0dc3ad8701d522986d8d
6Size (mercurial-5.4.tar.gz) = 7722447 bytes 6Size (mercurial-5.4.tar.gz) = 7722447 bytes
 7SHA1 (patch-D8480) = dca33fd25007a160cff02054ca659cce2a01511c
 8SHA1 (patch-D8481) = 71dc7d12f1b892d2705dfc900faddf85a917e4c6
 9SHA1 (patch-D8487) = beba279489895c9855f1ca2013c1197ef2f1d86c
 10SHA1 (patch-D8490) = 96a4eefb403919d17f188573b7d1dc34cef28388
 11SHA1 (patch-D8505) = 3244948bd009746941c9bdbfd5844f058c3caf59
 12SHA1 (patch-D8522) = 6bc2d7b6fc40b217339b78ee2745c7ca33073642
 13SHA1 (patch-D8574) = 56cecc1c83558803186e84d90ef67b4dce68f8e9
 14SHA1 (patch-D8575) = 5f414acb04ba5f8c141ceada93f29f6f7d43a833

File Added: pkgsrc/devel/py-mercurial/patches/Attic/patch-D8480
$NetBSD: patch-D8480,v 1.1 2020/05/24 01:16:26 joerg Exp $

# HG changeset patch
# User Joerg Sonnenberger <joerg@bec.de>
# Date 1587738964 -7200
#      Fri Apr 24 16:36:04 2020 +0200
# Branch stable
# Node ID 8467bb8885f5468abba2ed57d3476d04fd8fb426
# Parent  edffab2cf0ead5140fdaa391c1c827ddc53dfe35
bundle: make obsolescence parts optional

It is useful to ship obsolescence markers as part of clonebundles or
pullbundles, but they shouldn't stop a non-evolution client from
working. Marking the part as optional is enough to ensure this.
This does not affect dynamically created bundles part of the regular
pull/push exchange. Adjust existing test case coverage to ensure this is
visible.

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

diff -r edffab2cf0ea -r 8467bb8885f5 mercurial/bundle2.py
--- mercurial/bundle2.py	Tue May 12 22:20:56 2020 +0200
+++ mercurial/bundle2.py	Fri Apr 24 16:36:04 2020 +0200
@@ -1729,7 +1729,7 @@
 
     if opts.get(b'obsolescence', False):
         obsmarkers = repo.obsstore.relevantmarkers(outgoing.missing)
-        buildobsmarkerspart(bundler, obsmarkers)
+        buildobsmarkerspart(bundler, obsmarkers, False)
 
     if opts.get(b'phases', False):
         headsbyphase = phases.subsetphaseheads(repo, outgoing.missing)
@@ -1852,7 +1852,7 @@
     part.addparam(b'requirements', requirements, mandatory=True)
 
 
-def buildobsmarkerspart(bundler, markers):
+def buildobsmarkerspart(bundler, markers, mandatory):
     """add an obsmarker part to the bundler with <markers>
 
     No part is created if markers is empty.
@@ -1866,7 +1866,7 @@
     if version is None:
         raise ValueError(b'bundler does not support common obsmarker format')
     stream = obsolete.encodemarkers(markers, True, version=version)
-    return bundler.newpart(b'obsmarkers', data=stream)
+    return bundler.newpart(b'obsmarkers', data=stream, mandatory=mandatory)
 
 
 def writebundle(
diff -r edffab2cf0ea -r 8467bb8885f5 mercurial/exchange.py
--- mercurial/exchange.py	Tue May 12 22:20:56 2020 +0200
+++ mercurial/exchange.py	Fri Apr 24 16:36:04 2020 +0200
@@ -1157,7 +1157,7 @@
     pushop.stepsdone.add(b'obsmarkers')
     if pushop.outobsmarkers:
         markers = obsutil.sortedmarkers(pushop.outobsmarkers)
-        bundle2.buildobsmarkerspart(bundler, markers)
+        bundle2.buildobsmarkerspart(bundler, markers, True)
 
 
 @b2partsgenerator(b'bookmarks')
@@ -2615,7 +2615,7 @@
         subset = [c.node() for c in repo.set(b'::%ln', heads)]
         markers = repo.obsstore.relevantmarkers(subset)
         markers = obsutil.sortedmarkers(markers)
-        bundle2.buildobsmarkerspart(bundler, markers)
+        bundle2.buildobsmarkerspart(bundler, markers, True)
 
 
 @getbundle2partsgenerator(b'phases')
diff -r edffab2cf0ea -r 8467bb8885f5 tests/test-obsolete-bundle-strip.t
--- tests/test-obsolete-bundle-strip.t	Tue May 12 22:20:56 2020 +0200
+++ tests/test-obsolete-bundle-strip.t	Fri Apr 24 16:36:04 2020 +0200
@@ -1444,3 +1444,35 @@
   # unbundling: new changesets 9ac430e15fca (1 drafts)
   # unbundling: (1 other changesets obsolete on arrival)
   # unbundling: (run 'hg update' to get a working copy)
+
+Test that obsolescence markers in bundles are ignored if unsupported
+
+  $ hg init repo-with-obs
+  $ cd repo-with-obs
+  $ hg debugbuilddag +1
+  $ hg debugobsolete `getid 0`
+  1 new obsolescence markers
+  obsoleted 1 changesets
+  $ hg bundle --config experimental.evolution.bundle-obsmarker=true --all --hidden bundle-with-obs
+  1 changesets found
+  $ cd ..
+  $ hg init repo-without-obs
+  $ cd repo-without-obs
+  $ hg --config experimental.evolution=False unbundle ../repo-with-obs/bundle-with-obs --debug
+  bundle2-input-bundle: 1 params with-transaction
+  bundle2-input-part: "changegroup" (params: 1 mandatory 1 advisory) supported
+  adding changesets
+  add changeset 1ea73414a91b
+  adding manifests
+  adding file changes
+  bundle2-input-part: total payload size 190
+  bundle2-input-part: "cache:rev-branch-cache" (advisory) supported
+  bundle2-input-part: total payload size 39
+  bundle2-input-part: "obsmarkers" (advisory) supported
+  bundle2-input-part: total payload size 50
+  ignoring obsolescence markers, feature not enabled
+  bundle2-input-bundle: 3 parts total
+  updating the branch cache
+  added 1 changesets with 0 changes to 0 files
+  new changesets 1ea73414a91b (1 drafts)
+  (run 'hg update' to get a working copy)
diff -r edffab2cf0ea -r 8467bb8885f5 tests/test-obsolete-changeset-exchange.t
--- tests/test-obsolete-changeset-exchange.t	Tue May 12 22:20:56 2020 +0200
+++ tests/test-obsolete-changeset-exchange.t	Fri Apr 24 16:36:04 2020 +0200
@@ -103,7 +103,7 @@
   changegroup -- {nbchanges: 1, version: 02} (mandatory: True)
       f89bcc95eba5174b1ccc3e33a82e84c96e8338ee
   cache:rev-branch-cache -- {} (mandatory: False)
-  obsmarkers -- {} (mandatory: True)
+  obsmarkers -- {} (mandatory: False)
       version: 1 (70 bytes)
       9d73aac1b2ed7d53835eaeec212ed41ea47da53a f89bcc95eba5174b1ccc3e33a82e84c96e8338ee 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
 
diff -r edffab2cf0ea -r 8467bb8885f5 tests/test-obsolete-distributed.t
--- tests/test-obsolete-distributed.t	Tue May 12 22:20:56 2020 +0200
+++ tests/test-obsolete-distributed.t	Fri Apr 24 16:36:04 2020 +0200
@@ -138,14 +138,42 @@
 
   $ hg up 'desc("ROOT")'
   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-  $ hg pull --confirm --config ui.interactive=True << EOF
+  $ hg pull --debug --confirm --config ui.interactive=True << EOF
   > n
   > EOF
   pulling from $TESTTMP/distributed-chain-building/server
+  query 1; heads
   searching for changes
+  taking quick initial sample
+  query 2; still undecided: 1, sample size is: 1
+  2 total queries in 0.0091s
+  1 changesets found
+  list of changesets:
+  391a2bf12b1b8b05a72400ae36b26d50a091dc22
+  listing keys for "bookmarks"
+  bundle2-output-bundle: "HG20", 5 parts total
+  bundle2-output-part: "changegroup" (params: 1 mandatory 1 advisory) streamed payload
+  bundle2-output-part: "listkeys" (params: 1 mandatory) empty payload
+  bundle2-output-part: "obsmarkers" streamed payload
+  bundle2-output-part: "phase-heads" 48 bytes payload
+  bundle2-output-part: "cache:rev-branch-cache" (advisory) streamed payload
+  bundle2-input-bundle: with-transaction
+  bundle2-input-part: "changegroup" (params: 1 mandatory 1 advisory) supported
   adding changesets
+  add changeset 391a2bf12b1b
   adding manifests
   adding file changes
+  adding c_B1 revisions
+  bundle2-input-part: total payload size 485
+  bundle2-input-part: "listkeys" (params: 1 mandatory) supported
+  bundle2-input-part: "obsmarkers" supported
+  bundle2-input-part: total payload size 143
+  bundle2-input-part: "phase-heads" supported
+  bundle2-input-part: total payload size 48
+  bundle2-input-part: "cache:rev-branch-cache" (advisory) supported
+  bundle2-input-part: total payload size 39
+  bundle2-input-bundle: 5 parts total
+  checking for updated bookmarks
   adding 1 changesets with 1 changes to 1 files (+1 heads)
   1 new obsolescence markers
   obsoleting 1 changesets
diff -r edffab2cf0ea -r 8467bb8885f5 tests/test-obsolete.t
--- tests/test-obsolete.t	Tue May 12 22:20:56 2020 +0200
+++ tests/test-obsolete.t	Fri Apr 24 16:36:04 2020 +0200
@@ -1632,7 +1632,7 @@
       e016b03fd86fcccc54817d120b90b751aaf367d6
       b0551702f918510f01ae838ab03a463054c67b46
   cache:rev-branch-cache -- {} (mandatory: False)
-  obsmarkers -- {} (mandatory: True)
+  obsmarkers -- {} (mandatory: False)
       version: 1 (92 bytes)
       e008cf2834908e5d6b0f792a9d4b0e2272260fb8 b0551702f918510f01ae838ab03a463054c67b46 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'}
   phase-heads -- {} (mandatory: True)

File Added: pkgsrc/devel/py-mercurial/patches/Attic/patch-D8481
$NetBSD: patch-D8481,v 1.1 2020/05/24 01:16:26 joerg Exp $

# HG changeset patch
# User Joerg Sonnenberger <joerg@bec.de>
# Date 1587751225 -7200
#      Fri Apr 24 20:00:25 2020 +0200
# Branch stable
# Node ID 3d5fb6cab832475975c96b6503f66c8adb7b984c
# Parent  ed684a82e29bbea8556c3079f6159a9159689078
pullbundles: use unfiltered repo for head/base matching

The unfiltered view works even when changeset transistion from draft to
hidden phase. The normal visibility is already ensured by discovery as
invisible heads would have been filtered out before. Skipping the
filtering has a positive impact on performance, too.

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

diff -r ed684a82e29b -r 3d5fb6cab832 mercurial/wireprotov1server.py
--- mercurial/wireprotov1server.py	Thu May 07 03:14:52 2020 -0700
+++ mercurial/wireprotov1server.py	Fri Apr 24 20:00:25 2020 +0200
@@ -391,7 +391,7 @@
     res = exchange.filterclonebundleentries(repo, res)
     if not res:
         return None
-    cl = repo.changelog
+    cl = repo.unfiltered().changelog
     heads_anc = cl.ancestors([cl.rev(rev) for rev in heads], inclusive=True)
     common_anc = cl.ancestors([cl.rev(rev) for rev in common], inclusive=True)
     compformats = clientcompressionsupport(proto)
diff -r ed684a82e29b -r 3d5fb6cab832 tests/test-pull-bundle.t
--- tests/test-pull-bundle.t	Thu May 07 03:14:52 2020 -0700
+++ tests/test-pull-bundle.t	Fri Apr 24 20:00:25 2020 +0200
@@ -36,6 +36,8 @@
   $ cat <<EOF > .hg/hgrc
   > [server]
   > pullbundle = True
+  > [experimental]
+  > evolution = True
   > [extensions]
   > blackbox =
   > EOF
@@ -185,3 +187,24 @@
   * sending pullbundle "0.hg" (glob)
   * sending pullbundle "0.hg" (glob)
   $ rm repo/.hg/blackbox.log
+
+Test processing when nodes used in the pullbundle.manifest end up being hidden
+
+  $ hg --repo repo debugobsolete ed1b79f46b9a29f5a6efa59cf12fcfca43bead5a
+  1 new obsolescence markers
+  obsoleted 1 changesets
+  $ hg serve --repo repo --config server.view=visible -p $HGPORT -d --pid-file=hg.pid -E errors.log
+  $ cat hg.pid >> $DAEMON_PIDS
+  $ hg clone http://localhost:$HGPORT repo-obs
+  requesting all changes
+  adding changesets
+  adding manifests
+  adding file changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 2 changesets with 2 changes to 2 files
+  new changesets bbd179dfa0a7:effea6de0384
+  updating to branch default
+  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ killdaemons.py

File Added: pkgsrc/devel/py-mercurial/patches/Attic/patch-D8487
$NetBSD: patch-D8487,v 1.1 2020/05/24 01:16:26 joerg Exp $

# HG changeset patch
# User Joerg Sonnenberger <joerg@bec.de>
# Date 1587944362 -7200
#      Mon Apr 27 01:39:22 2020 +0200
# Branch stable
# Node ID 5d309906ed0e4e2b0ade4d1539cbea7dc2c44771
# Parent  a50f33f1ff24466d6d721685cc65a732cb4c522c
fastexport: downgrade message about already exported changesets to debug

The old warning level is just too noisy for incremental processing.

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

diff -r a50f33f1ff24 -r 5d309906ed0e hgext/fastexport.py
--- hgext/fastexport.py	Sun Apr 26 14:29:47 2020 -0400
+++ hgext/fastexport.py	Mon Apr 27 01:39:22 2020 +0200
@@ -80,7 +80,7 @@
     ctx = repo[rev]
     revid = ctx.hex()
     if revid in marks:
-        ui.warn(_(b"warning: revision %s already exported, skipped\n") % revid)
+        ui.debug(b"warning: revision %s already exported, skipped\n" % revid)
         return
     parents = [p for p in ctx.parents() if p.rev() != nullrev]
     for p in parents:

File Added: pkgsrc/devel/py-mercurial/patches/Attic/patch-D8490
$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$

File Added: pkgsrc/devel/py-mercurial/patches/Attic/patch-D8505
$NetBSD: patch-D8505,v 1.1 2020/05/24 01:16:26 joerg Exp $

# HG changeset patch
# User Joerg Sonnenberger <joerg@bec.de>
# Date 1588887605 -7200
#      Thu May 07 23:40:05 2020 +0200
# Branch stable
# Node ID 9d7d53771e5fa5c17bea578a89258350df6294ac
# Parent  35bb67427f63abeb02be76238ab79afbe1ded034
tests: fix timer scaling in wait-on-file

When using the default test timeouts, wait-on-file would not wait for $n
seconds, but $n/100 seconds. This resulted in easy timeouts on even
moderately busy fast machines. Fix the scaling to apply in all cases.
Adjust the stepping slightly to be nicer to systems with the historic
100Hz time base to ensure that the scheduler actually switches to a
different process and gives them time to work.

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

diff -r 35bb67427f63 -r 9d7d53771e5f tests/testlib/wait-on-file
--- tests/testlib/wait-on-file	Sat May 09 20:25:07 2020 +0200
+++ tests/testlib/wait-on-file	Thu May 07 23:40:05 2020 +0200
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/sh
 #
 # wait up to TIMEOUT seconds until a WAIT_ON_FILE is created.
 #
@@ -11,9 +11,12 @@
 
 timer="$1"
 
-# if the test timeout have been extended, explicitly extend the provided timer
+# Scale the timeout to match the sleep steps below, i.e. 1/0.02.
+timer=$(( 50 * $timer ))
+# If the test timeout have been extended, also scale the timer relative
+# to the normal timing.
 if [ "$HGTEST_TIMEOUT_DEFAULT" -lt "$HGTEST_TIMEOUT" ]; then
-    timer=$(( ( 100 * $timer * $HGTEST_TIMEOUT) / $HGTEST_TIMEOUT_DEFAULT ))
+    timer=$(( ( $timer * $HGTEST_TIMEOUT) / $HGTEST_TIMEOUT_DEFAULT ))
 fi
 
 wait_on="$2"
@@ -30,7 +33,7 @@
 while [ "$timer" -gt 0 ] && [ ! -f "$wait_on" ];
 do
     timer=$(( $timer - 1))
-    sleep 0.01
+    sleep 0.02
 done
 if [ "$timer" -le 0 ]; then
     echo "file not created after $1 seconds: $wait_on" >&2

File Added: pkgsrc/devel/py-mercurial/patches/Attic/patch-D8522
$NetBSD: patch-D8522,v 1.1 2020/05/24 01:16:26 joerg Exp $

# HG changeset patch
# User Joerg Sonnenberger <joerg@bec.de>
# Date 1589314856 -7200
#      Tue May 12 22:20:56 2020 +0200
# Branch stable
# Node ID edffab2cf0ead5140fdaa391c1c827ddc53dfe35
# Parent  f71c8eea7161c6292389339557d9e538e0fcdc51
fastexport: adjust output to be more canonical

For time zones, git doesn't consider +0 and -0 the same timezone, so use
the former canonically. Add a test case to ensure that non-UTC offsets
are handled correctly. The real name part of the committer name is
normally not quoted, so don't enforce that.

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

diff -r f71c8eea7161 -r edffab2cf0ea hgext/fastexport.py
--- hgext/fastexport.py	Mon May 11 08:13:40 2020 +0200
+++ hgext/fastexport.py	Tue May 12 22:20:56 2020 +0200
@@ -53,7 +53,7 @@
 
 def convert_to_git_date(date):
     timestamp, utcoff = date
-    tzsign = b"+" if utcoff < 0 else b"-"
+    tzsign = b"+" if utcoff <= 0 else b"-"
     if utcoff % 60 != 0:
         raise error.Abort(
             _(b"UTC offset in %b is not an integer number of seconds") % (date,)
diff -r f71c8eea7161 -r edffab2cf0ea tests/test-fastexport.t
--- tests/test-fastexport.t	Mon May 11 08:13:40 2020 +0200
+++ tests/test-fastexport.t	Tue May 12 22:20:56 2020 +0200
@@ -10,7 +10,7 @@
   $ hg up -r 10
   13 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg rm nf10
-  $ hg commit -u debugbuilddag --date 'Thu Jan 01 00:00:12 1970 +0000' -m r12
+  $ hg commit -u debugbuilddag --date 'Thu Jan 01 02:30:12 1970 +0230' -m r12
   created new head
   $ hg up -r 11
   4 files updated, 0 files merged, 0 files removed, 0 files unresolved
@@ -20,20 +20,20 @@
   $ hg commit -m debugbuilddag --date 'Thu Jan 01 00:00:13 1970 +0000'
 
   $ hg log -G
-  @    changeset:   13:e5c379648af4
+  @    changeset:   13:5544befcb7ce
   |\   branch:      both
   | |  tag:         tip
   | |  parent:      11:2cbd52c10e88
-  | |  parent:      12:4f31c9604af6
+  | |  parent:      12:66d0c21243be
   | |  user:        test
   | |  date:        Thu Jan 01 00:00:13 1970 +0000
   | |  summary:     debugbuilddag
   | |
-  | o  changeset:   12:4f31c9604af6
+  | o  changeset:   12:66d0c21243be
   | |  branch:      both
   | |  parent:      10:9220596cb068
   | |  user:        debugbuilddag
-  | |  date:        Thu Jan 01 00:00:12 1970 +0000
+  | |  date:        Thu Jan 01 02:30:12 1970 +0230
   | |  summary:     r12
   | |
   o |  changeset:   11:2cbd52c10e88
@@ -150,7 +150,7 @@
   
   commit refs/heads/default
   mark :3
-  committer "debugbuilddag" <debugbuilddag> 0 -0000
+  committer "debugbuilddag" <debugbuilddag> 0 +0000
   data 2
   r0
   M 644 :1 mf
@@ -197,7 +197,7 @@
   
   commit refs/heads/default
   mark :7
-  committer "debugbuilddag" <debugbuilddag> 1 -0000
+  committer "debugbuilddag" <debugbuilddag> 1 +0000
   data 2
   r1
   from :3
@@ -245,7 +245,7 @@
   
   commit refs/heads/name1
   mark :11
-  committer "debugbuilddag" <debugbuilddag> 2 -0000
+  committer "debugbuilddag" <debugbuilddag> 2 +0000
   data 2
   r2
   from :7
@@ -293,7 +293,7 @@
   
   commit refs/heads/name1
   mark :15
-  committer "debugbuilddag" <debugbuilddag> 3 -0000
+  committer "debugbuilddag" <debugbuilddag> 3 +0000
   data 2
   r3
   from :11
@@ -341,7 +341,7 @@
   
   commit refs/heads/name1
   mark :19
-  committer "debugbuilddag" <debugbuilddag> 4 -0000
+  committer "debugbuilddag" <debugbuilddag> 4 +0000
   data 2
   r4
   from :15
@@ -389,7 +389,7 @@
   
   commit refs/heads/name2
   mark :23
-  committer "debugbuilddag" <debugbuilddag> 5 -0000
+  committer "debugbuilddag" <debugbuilddag> 5 +0000
   data 2
   r5
   from :7
@@ -437,7 +437,7 @@
   
   commit refs/heads/name2
   mark :27
-  committer "debugbuilddag" <debugbuilddag> 6 -0000
+  committer "debugbuilddag" <debugbuilddag> 6 +0000
   data 2
   r6
   from :23
@@ -485,7 +485,7 @@
   
   commit refs/heads/name2
   mark :31
-  committer "debugbuilddag" <debugbuilddag> 7 -0000
+  committer "debugbuilddag" <debugbuilddag> 7 +0000
   data 2
   r7
   from :27
@@ -533,7 +533,7 @@
   
   commit refs/heads/name2
   mark :35
-  committer "debugbuilddag" <debugbuilddag> 8 -0000
+  committer "debugbuilddag" <debugbuilddag> 8 +0000
   data 2
   r8
   from :31
@@ -581,7 +581,7 @@
   
   commit refs/heads/both
   mark :39
-  committer "debugbuilddag" <debugbuilddag> 9 -0000
+  committer "debugbuilddag" <debugbuilddag> 9 +0000
   data 2
   r9
   from :35
@@ -633,7 +633,7 @@
   
   commit refs/heads/both
   mark :43
-  committer "debugbuilddag" <debugbuilddag> 10 -0000
+  committer "debugbuilddag" <debugbuilddag> 10 +0000
   data 3
   r10
   from :39
@@ -681,7 +681,7 @@
   
   commit refs/heads/both
   mark :47
-  committer "debugbuilddag" <debugbuilddag> 11 -0000
+  committer "debugbuilddag" <debugbuilddag> 11 +0000
   data 3
   r11
   from :43
@@ -691,7 +691,7 @@
   
   commit refs/heads/both
   mark :48
-  committer "debugbuilddag" <debugbuilddag> 12 -0000
+  committer "debugbuilddag" <debugbuilddag> 12 +0230
   data 3
   r12
   from :43
@@ -699,7 +699,7 @@
   
   commit refs/heads/both
   mark :49
-  committer "test" <test> 13 -0000
+  committer "test" <test> 13 +0000
   data 13
   debugbuilddag
   from :47
@@ -754,8 +754,8 @@
   33fbc651630ffa7ccbebfe4eb91320a873e7291c
   868d828870663d075cdcff502d26cf8445ce068e
   2cbd52c10e88ce604402dc83a869ec4f07765b3d
-  4f31c9604af676986343d775b05695f535e8db5e
-  e5c379648af4c9fa3b5546ab7ee6e61a36082830
+  66d0c21243be072f82ced64aa730ab0367252451
+  5544befcb7ce4a558ed9e19909e16af574a2a3c6
 
   $ hg fastexport --export-marks fastexport.marks2 -r 0
   blob
@@ -793,7 +793,7 @@
   
   commit refs/heads/default
   mark :3
-  committer "debugbuilddag" <debugbuilddag> 0 -0000
+  committer "debugbuilddag" <debugbuilddag> 0 +0000
   data 2
   r0
   M 644 :1 mf
@@ -845,7 +845,7 @@
   
   commit refs/heads/default
   mark :7
-  committer "debugbuilddag" <debugbuilddag> 1 -0000
+  committer "debugbuilddag" <debugbuilddag> 1 +0000
   data 2
   r1
   from :3
@@ -861,5 +861,5 @@
   data 4
   foo
   
-  abort: Unable to parse user into person and email for revision 4f71ca786403919cd16669d94ff7cd1c09437a44
+  abort: Unable to parse user into person and email for revision 65a3f69b9b519de73d755472c1ab05990ab8a7f7
   [255]

File Added: pkgsrc/devel/py-mercurial/patches/Attic/patch-D8574
$NetBSD: patch-D8574,v 1.1 2020/05/24 01:16:26 joerg Exp $

# HG changeset patch
# User Joerg Sonnenberger <joerg@bec.de>
# Date 1589846232 -7200
#      Tue May 19 01:57:12 2020 +0200
# Branch stable
# Node ID 423cb450e7220473e144dc6fb089bec01c8d9d44
# Parent  d658f1dff315336db8525f987af799179a060cbe
hooks: teach reject_new_heads about phase transitions

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

diff -r d658f1dff315 -r 423cb450e722 hgext/hooklib/reject_new_heads.py
--- hgext/hooklib/reject_new_heads.py	Sun May 17 18:33:45 2020 -0400
+++ hgext/hooklib/reject_new_heads.py	Tue May 19 01:57:12 2020 +0200
@@ -4,8 +4,8 @@
 # GNU General Public License version 2 or any later version.
 
 """reject_new_heads is a hook to check that branches touched by new changesets
-have at most one open head. It can be used to enforce policies for
-merge-before-push or rebase-before-push. It does not handle pre-existing
+or phase transitions have at most one open head. It can be used to enforce policies
+for merge-before-push or rebase-before-push. It does not handle pre-existing
 hydras.
 
 Usage:
@@ -30,9 +30,14 @@
         )
     ctx = repo.unfiltered()[node]
     branches = set()
-    for rev in repo.changelog.revs(start=ctx.rev()):
-        rev = repo[rev]
-        branches.add(rev.branch())
+    if ctx.rev():
+        for rev in repo.changelog.revs(start=ctx.rev()):
+            rev = repo[rev]
+            branches.add(rev.branch())
+    for revs, (old, new) in kwargs.get('changes', {b'phases': []})[b'phases']:
+        for rev in revs:
+            branches.add(repo.unfiltered()[rev].branch())
+
     for branch in branches:
         if len(repo.revs("head() and not closed() and branch(%s)", branch)) > 1:
             raise error.Abort(
diff -r d658f1dff315 -r 423cb450e722 tests/test-hooklib-reject_new_heads.t
--- tests/test-hooklib-reject_new_heads.t	Sun May 17 18:33:45 2020 -0400
+++ tests/test-hooklib-reject_new_heads.t	Tue May 19 01:57:12 2020 +0200
@@ -5,6 +5,7 @@
   > [phases]
   > publish = False
   > EOF
+
   $ hg init a
   $ hg --cwd a debugbuilddag '.:parent.*parent'
   $ hg --cwd a log -G
@@ -26,6 +27,7 @@
      date:        Thu Jan 01 00:00:00 1970 +0000
      summary:     r0
   
+
   $ hg init b
   $ cat <<EOF >> b/.hg/hgrc
   > [hooks]
@@ -43,11 +45,61 @@
   rollback completed
   abort: Changes on branch 'default' resulted in multiple heads
   [255]
-  $ hg --cwd b pull ../a -r 1ea73414a91b
+  $ hg --cwd b pull ../a -r 66f7d451a68b
   pulling from ../a
   adding changesets
   adding manifests
   adding file changes
-  added 1 changesets with 0 changes to 0 files
-  new changesets 1ea73414a91b (1 drafts)
+  added 2 changesets with 0 changes to 0 files
+  new changesets 1ea73414a91b:66f7d451a68b (2 drafts)
   (run 'hg update' to get a working copy)
+
+  $ hg --cwd b phase --public 66f7d451a68b
+  $ hg --cwd b --config hooks.pretxnclose.reject_new_heads= pull ../a
+  pulling from ../a
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 0 changes to 0 files (+1 heads)
+  new changesets fa942426a6fd (1 drafts)
+  (run 'hg heads' to see heads, 'hg merge' to merge)
+
+Test that pushing a draft change to a publishing server having the same
+change already still triggers the check on the phase transition. The
+changeset should remain as draft.
+
+  $ cat <<EOF >> b/.hg/hgrc
+  > [serve]
+  > view = immutable
+  > 
+  > [phases]
+  > publish = True
+  > EOF
+
+  $ cat > web.conf << EOF
+  > [paths]
+  > / = *
+  > 
+  > [web]
+  > push_ssl = false
+  > allow_push = *
+  > EOF
+
+  $ hg --cwd b serve --web-conf ../web.conf -p $HGPORT -d --pid-file ../hg.pid
+  $ cat hg.pid >> $DAEMON_PIDS
+
+  $ hg --cwd a push -f http://localhost:$HGPORT
+  pushing to http://localhost:$HGPORT/
+  searching for changes
+  no changes found
+  remote: error: pretxnclose.reject_new_heads hook failed: Changes on branch 'default' resulted in multiple heads
+  remote: Changes on branch 'default' resulted in multiple heads
+  abort: push failed on remote
+  [255]
+  $ hg phase --cwd b fa942426a6fd
+  2: draft
+
+Cleanup.
+
+  $ killdaemons.py

File Added: pkgsrc/devel/py-mercurial/patches/Attic/patch-D8575
$NetBSD: patch-D8575,v 1.1 2020/05/24 01:16:26 joerg Exp $

# HG changeset patch
# User Joerg Sonnenberger <joerg@bec.de>
# Date 1590077930 -7200
#      Thu May 21 18:18:50 2020 +0200
# Branch stable
# Node ID c6bc304695881f82d7f0803d136678d7d29b193b
# Parent  423cb450e7220473e144dc6fb089bec01c8d9d44
hooklib: fix detection of successors for changeset_obsoleted

Provide a hook for obsutil.getobsolete to be used with either a
transaction or the changes item of the transaction, since hooks only
have access to the latter. Use that to find the correct list of
revisions with obsmarkers, even new ones, and then filter out revisions
with known successors.

Move the processing from pretxnclose to txnclose as the transaction
access itself is no longer necessary. This is more in line with notify
and ensures that sanity checks can abort the transaction first.

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

diff -r 423cb450e722 -r c6bc30469588 hgext/hooklib/changeset_obsoleted.py
--- hgext/hooklib/changeset_obsoleted.py	Tue May 19 01:57:12 2020 +0200
+++ hgext/hooklib/changeset_obsoleted.py	Thu May 21 18:18:50 2020 +0200
@@ -122,10 +122,18 @@
         )
 
 
+def has_successor(repo, rev):
+    return any(
+        r for r in obsutil.allsuccessors(repo.obsstore, [rev]) if r != rev
+    )
+
+
 def hook(ui, repo, hooktype, node=None, **kwargs):
-    if hooktype != b"pretxnclose":
+    if hooktype != b"txnclose":
         raise error.Abort(
             _(b'Unsupported hook type %r') % pycompat.bytestr(hooktype)
         )
-    for rev in obsutil.getobsoleted(repo, repo.currenttransaction()):
-        _report_commit(ui, repo, repo.unfiltered()[rev])
+    for rev in obsutil.getobsoleted(repo, changes=kwargs['changes']):
+        ctx = repo.unfiltered()[rev]
+        if not has_successor(repo, ctx.node()):
+            _report_commit(ui, repo, ctx)
diff -r 423cb450e722 -r c6bc30469588 mercurial/obsutil.py
--- mercurial/obsutil.py	Tue May 19 01:57:12 2020 +0200
+++ mercurial/obsutil.py	Thu May 21 18:18:50 2020 +0200
@@ -481,14 +481,21 @@
     return effects
 
 
-def getobsoleted(repo, tr):
-    """return the set of pre-existing revisions obsoleted by a transaction"""
+def getobsoleted(repo, tr=None, changes=None):
+    """return the set of pre-existing revisions obsoleted by a transaction
+
+    Either the transaction or changes item of the transaction (for hooks)
+    must be provided, but not both.
+    """
+    assert (tr is None) != (changes is None)
     torev = repo.unfiltered().changelog.index.get_rev
     phase = repo._phasecache.phase
     succsmarkers = repo.obsstore.successors.get
     public = phases.public
-    addedmarkers = tr.changes[b'obsmarkers']
-    origrepolen = tr.changes[b'origrepolen']
+    if changes is None:
+        changes = tr.changes
+    addedmarkers = changes[b'obsmarkers']
+    origrepolen = changes[b'origrepolen']
     seenrevs = set()
     obsoleted = set()
     for mark in addedmarkers:
diff -r 423cb450e722 -r c6bc30469588 tests/test-hooklib-changeset_obsoleted.t
--- tests/test-hooklib-changeset_obsoleted.t	Tue May 19 01:57:12 2020 +0200
+++ tests/test-hooklib-changeset_obsoleted.t	Thu May 21 18:18:50 2020 +0200
@@ -24,7 +24,7 @@
   $ cat <<EOF >> b/.hg/hgrc
   > [hooks]
   > incoming.notify = python:hgext.notify.hook
-  > pretxnclose.changeset_obsoleted = python:hgext.hooklib.changeset_obsoleted.hook
+  > txnclose.changeset_obsoleted = python:hgext.hooklib.changeset_obsoleted.hook
   > EOF
   $ hg --cwd b pull ../a | "$PYTHON" $TESTDIR/unwrap-message-id.py
   pulling from ../a
@@ -72,6 +72,8 @@
   pushing to ../b
   searching for changes
   no changes found
+  1 new obsolescence markers
+  obsoleted 1 changesets
   Subject: changeset abandoned
   In-reply-to: <hg.81c297828fd2d5afaadf2775a6a71b74143b6451dfaac09fac939e9107a50d01@example.com>
   Message-Id: <hg.d6329e9481594f0f3c8a84362b3511318bfbce50748ab1123f909eb6fbcab018@example.com>
@@ -80,5 +82,33 @@
   To: baz@example.com
   
   This changeset has been abandoned.
+
+Check that known changesets with known successors do not result in a mail.
+
+  $ hg init c
+  $ hg init d
+  $ cat <<EOF >> d/.hg/hgrc
+  > [hooks]
+  > incoming.notify = python:hgext.notify.hook
+  > txnclose.changeset_obsoleted = python:hgext.hooklib.changeset_obsoleted.hook
+  > EOF
+  $ hg --cwd c debugbuilddag '.:parent.*parent'
+  $ hg --cwd c push ../d -r 1
+  pushing to ../d
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 2 changesets with 0 changes to 0 files
+  $ hg --cwd c debugobsolete $(hg --cwd c log -T '{node}' -r 1) $(hg --cwd c log -T '{node}' -r 2)
   1 new obsolescence markers
   obsoleted 1 changesets
+  $ hg --cwd c push ../d | "$PYTHON" $TESTDIR/unwrap-message-id.py
+  pushing to ../d
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 0 changes to 0 files (+1 heads)
+  1 new obsolescence markers
+  obsoleted 1 changesets