author | Anton Shestakov <av6@dwimlabs.net> |
Thu, 07 May 2020 01:29:24 +0200 | |
changeset 5348 | a9f9edb168a1 |
parent 5288 | 5cfec61b872b |
permissions | -rw-r--r-- |
2286
a4c5744a7b93
safeguard: add an option to disable automatic publishing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
1 |
# Code dedicated to adding various "safeguard" around evolution |
a4c5744a7b93
safeguard: add an option to disable automatic publishing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
2 |
# |
a4c5744a7b93
safeguard: add an option to disable automatic publishing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
3 |
# Some of these will be pollished and upstream when mature. Some other will be |
a4c5744a7b93
safeguard: add an option to disable automatic publishing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
4 |
# replaced by better alternative later. |
a4c5744a7b93
safeguard: add an option to disable automatic publishing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
5 |
# |
a4c5744a7b93
safeguard: add an option to disable automatic publishing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
6 |
# Copyright 2017 Pierre-Yves David <pierre-yves.david@ens-lyon.org> |
a4c5744a7b93
safeguard: add an option to disable automatic publishing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
7 |
# |
a4c5744a7b93
safeguard: add an option to disable automatic publishing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
8 |
# This software may be used and distributed according to the terms of the |
a4c5744a7b93
safeguard: add an option to disable automatic publishing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
9 |
# GNU General Public License version 2 or any later version. |
a4c5744a7b93
safeguard: add an option to disable automatic publishing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
10 |
|
4287
b7b6a4524ef7
safeguard: don't reimplement auto-publish if it's in core (will be in 4.9)
Anton Shestakov <av6@dwimlabs.net>
parents:
4286
diff
changeset
|
11 |
from mercurial.i18n import _ |
2286
a4c5744a7b93
safeguard: add an option to disable automatic publishing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
12 |
|
4287
b7b6a4524ef7
safeguard: don't reimplement auto-publish if it's in core (will be in 4.9)
Anton Shestakov <av6@dwimlabs.net>
parents:
4286
diff
changeset
|
13 |
from mercurial import ( |
b7b6a4524ef7
safeguard: don't reimplement auto-publish if it's in core (will be in 4.9)
Anton Shestakov <av6@dwimlabs.net>
parents:
4286
diff
changeset
|
14 |
configitems, |
b7b6a4524ef7
safeguard: don't reimplement auto-publish if it's in core (will be in 4.9)
Anton Shestakov <av6@dwimlabs.net>
parents:
4286
diff
changeset
|
15 |
error, |
b7b6a4524ef7
safeguard: don't reimplement auto-publish if it's in core (will be in 4.9)
Anton Shestakov <av6@dwimlabs.net>
parents:
4286
diff
changeset
|
16 |
) |
2286
a4c5744a7b93
safeguard: add an option to disable automatic publishing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
17 |
|
a4c5744a7b93
safeguard: add an option to disable automatic publishing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
18 |
from . import exthelper |
a4c5744a7b93
safeguard: add an option to disable automatic publishing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
19 |
|
a4c5744a7b93
safeguard: add an option to disable automatic publishing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
20 |
eh = exthelper.exthelper() |
a4c5744a7b93
safeguard: add an option to disable automatic publishing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
21 |
|
5277
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
4814
diff
changeset
|
22 |
# hg <= 4.8 (33d30fb1e4ae) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4324
diff
changeset
|
23 |
if b'auto-publish' not in configitems.coreitems.get(b'experimental', {}): |
4287
b7b6a4524ef7
safeguard: don't reimplement auto-publish if it's in core (will be in 4.9)
Anton Shestakov <av6@dwimlabs.net>
parents:
4286
diff
changeset
|
24 |
|
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4324
diff
changeset
|
25 |
eh.configitem(b'experimental', b'auto-publish', b'publish') |
3080
461c9d940519
evolve: registed configitems if available
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
26 |
|
5277
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
4814
diff
changeset
|
27 |
def _checkpublish(pushop): |
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
4814
diff
changeset
|
28 |
repo = pushop.repo |
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
4814
diff
changeset
|
29 |
ui = repo.ui |
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
4814
diff
changeset
|
30 |
behavior = ui.config(b'experimental', b'auto-publish') |
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
4814
diff
changeset
|
31 |
nocheck = behavior not in (b'warn', b'abort') |
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
4814
diff
changeset
|
32 |
if nocheck or getattr(pushop, 'publish', False): |
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
4814
diff
changeset
|
33 |
return |
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
4814
diff
changeset
|
34 |
remotephases = pushop.remote.listkeys(b'phases') |
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
4814
diff
changeset
|
35 |
publishing = remotephases.get(b'publishing', False) |
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
4814
diff
changeset
|
36 |
if publishing: |
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
4814
diff
changeset
|
37 |
if pushop.revs is None: |
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
4814
diff
changeset
|
38 |
published = repo.filtered(b'served').revs(b"not public()") |
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
4814
diff
changeset
|
39 |
else: |
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
4814
diff
changeset
|
40 |
published = repo.revs(b"::%ln - public()", pushop.revs) |
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
4814
diff
changeset
|
41 |
if published: |
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
4814
diff
changeset
|
42 |
if behavior == b'warn': |
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
4814
diff
changeset
|
43 |
ui.warn(_(b'%i changesets about to be published\n') |
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
4814
diff
changeset
|
44 |
% len(published)) |
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
4814
diff
changeset
|
45 |
elif behavior == b'abort': |
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
4814
diff
changeset
|
46 |
msg = _(b'push would publish 1 changesets') |
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
4814
diff
changeset
|
47 |
hint = _(b"behavior controlled by " |
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
4814
diff
changeset
|
48 |
b"'experimental.auto-publish' config") |
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
4814
diff
changeset
|
49 |
raise error.Abort(msg, hint=hint) |
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
4814
diff
changeset
|
50 |
|
4287
b7b6a4524ef7
safeguard: don't reimplement auto-publish if it's in core (will be in 4.9)
Anton Shestakov <av6@dwimlabs.net>
parents:
4286
diff
changeset
|
51 |
@eh.reposetup |
b7b6a4524ef7
safeguard: don't reimplement auto-publish if it's in core (will be in 4.9)
Anton Shestakov <av6@dwimlabs.net>
parents:
4286
diff
changeset
|
52 |
def setuppublishprevention(ui, repo): |
2286
a4c5744a7b93
safeguard: add an option to disable automatic publishing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
53 |
|
4287
b7b6a4524ef7
safeguard: don't reimplement auto-publish if it's in core (will be in 4.9)
Anton Shestakov <av6@dwimlabs.net>
parents:
4286
diff
changeset
|
54 |
class noautopublishrepo(repo.__class__): |
2286
a4c5744a7b93
safeguard: add an option to disable automatic publishing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
55 |
|
4287
b7b6a4524ef7
safeguard: don't reimplement auto-publish if it's in core (will be in 4.9)
Anton Shestakov <av6@dwimlabs.net>
parents:
4286
diff
changeset
|
56 |
def checkpush(self, pushop): |
b7b6a4524ef7
safeguard: don't reimplement auto-publish if it's in core (will be in 4.9)
Anton Shestakov <av6@dwimlabs.net>
parents:
4286
diff
changeset
|
57 |
super(noautopublishrepo, self).checkpush(pushop) |
5277
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
4814
diff
changeset
|
58 |
_checkpublish(pushop) |
2286
a4c5744a7b93
safeguard: add an option to disable automatic publishing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
59 |
|
4287
b7b6a4524ef7
safeguard: don't reimplement auto-publish if it's in core (will be in 4.9)
Anton Shestakov <av6@dwimlabs.net>
parents:
4286
diff
changeset
|
60 |
repo.__class__ = noautopublishrepo |