Mercurial > evolve
annotate contrib/nopushpublish.py @ 5221:af9f40236037 stable
topics: fix auto-publish=abort with servers publishing bare branches
Before this change, servers that automatically publish bare branches were
detected as "non publishing" and the check for automatic publishing on push
assumed nothing was to be published. Now we signal the server-side config to
clients via a new capability so that they can adjust their behavior.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Mon, 06 Apr 2020 05:05:07 +0200 |
parents | 4f5e915ddb71 |
children |
rev | line source |
---|---|
401 | 1 # Extension which prevent changeset to be turn public by push operation |
413
984be08ef504
nopushpublish: add license en copyright notice
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
402
diff
changeset
|
2 # |
984be08ef504
nopushpublish: add license en copyright notice
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
402
diff
changeset
|
3 # Copyright 2011 Logilab SA <contact@logilab.fr> |
984be08ef504
nopushpublish: add license en copyright notice
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
402
diff
changeset
|
4 # |
984be08ef504
nopushpublish: add license en copyright notice
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
402
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
984be08ef504
nopushpublish: add license en copyright notice
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
402
diff
changeset
|
6 # GNU General Public License version 2 or any later version. |
984be08ef504
nopushpublish: add license en copyright notice
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
402
diff
changeset
|
7 |
400 | 8 |
9 from mercurial import extensions, util | |
10 from mercurial import discovery | |
11 | |
12 def checkpublish(orig, repo, remote, outgoing, *args): | |
13 | |
14 # is remote publishing? | |
15 publish = True | |
16 if 'phases' in remote.listkeys('namespaces'): | |
17 remotephases = remote.listkeys('phases') | |
18 publish = remotephases.get('publishing', False) | |
19 | |
20 npublish = 0 | |
21 if publish: | |
22 for rev in outgoing.missing: | |
23 if repo[rev].phase(): | |
24 npublish += 1 | |
25 if npublish: | |
26 repo.ui.warn("Push would publish %s changesets" % npublish) | |
27 | |
28 ret = orig(repo, remote, outgoing, *args) | |
29 if npublish: | |
1670 | 30 raise util.Abort("Publishing push forbidden", |
400 | 31 hint="Use `hg phase -p <rev>` to manually publish them") |
32 | |
33 return ret | |
34 | |
35 def uisetup(ui): | |
36 extensions.wrapfunction(discovery, 'checkheads', checkpublish) |