# HG changeset patch # User Anton Shestakov # Date 1625296876 -10800 # Node ID f03e9d30258e5b73f43b73ba770a7b9cdc6b5bdc # Parent 8851acad5906bc70a1258edee81e191dfc76795d exchange: use "served" repo filter to guess what the server will publish Previously, the second push in the added test would say "push would publish 2 changesets" because _checkpublish() was considering secret changesets to be "pushable" when push command had a --rev argument. Without --rev argument to push command, we already filter the repo properly. Differential Revision: https://phab.mercurial-scm.org/D10948 diff -r 8851acad5906 -r f03e9d30258e mercurial/exchange.py --- a/mercurial/exchange.py Thu Jul 01 18:51:18 2021 +0200 +++ b/mercurial/exchange.py Sat Jul 03 10:21:16 2021 +0300 @@ -184,6 +184,10 @@ published = repo.filtered(b'served').revs(b'not public()') else: published = repo.revs(b'::%ln - public()', pushop.revs) + # we want to use pushop.revs in the revset even if they themselves are + # secret, but we don't want to have anything that the server won't see + # in the result of this expression + published &= repo.filtered(b'served') if published: if behavior == b'warn': ui.warn( diff -r 8851acad5906 -r f03e9d30258e tests/test-phases-exchange.t --- a/tests/test-phases-exchange.t Thu Jul 01 18:51:18 2021 +0200 +++ b/tests/test-phases-exchange.t Sat Jul 03 10:21:16 2021 +0300 @@ -1592,6 +1592,26 @@ (use --publish or adjust 'experimental.auto-publish' config) [255] +trying to push a secret changeset doesn't confuse auto-publish + + $ hg phase --secret --force + test-debug-phase: move rev 0: 1 -> 2 + test-debug-phase: move rev 1: 1 -> 2 + + $ hg push --config experimental.auto-publish=abort + pushing to $TESTTMP/auto-publish-orig + abort: push would publish 1 changesets + (use --publish or adjust 'experimental.auto-publish' config) + [255] + $ hg push -r . --config experimental.auto-publish=abort + pushing to $TESTTMP/auto-publish-orig + abort: push would publish 1 changesets + (use --publish or adjust 'experimental.auto-publish' config) + [255] + + $ hg phase --draft + test-debug-phase: move rev 1: 2 -> 1 + --publish flag makes push succeed $ hg push -r '.^' --publish --config experimental.auto-publish=abort