[PATCH] push: config option to control behavior when pushing to a publishing server
Anton Shestakov
av6 at dwimlabs.net
Fri Nov 30 11:36:28 UTC 2018
On Sun, 25 Nov 2018 12:35:17 +0900
Yuya Nishihara <yuya at tcha.org> wrote:
> On Fri, 23 Nov 2018 13:23:43 +0800, Anton Shestakov wrote:
> > # HG changeset patch
> > # User Anton Shestakov <av6 at dwimlabs.net>
> > # Date 1541397139 -28800
> > # Mon Nov 05 13:52:19 2018 +0800
> > # Node ID ea18d94ac7006faff7148cb2eca3b970655955b9
> > # Parent efd0f79246e3e6633dfd06226464a48584f69b19
> > # EXP-Topic push-publish
> > push: config option to control behavior when pushing to a publishing server
>
> > `hg push --publish` can be used to make push succeed even when auto-publish is
> > set to 'abort'.
> >
> > diff --git a/mercurial/configitems.py b/mercurial/configitems.py
> > --- a/mercurial/configitems.py
> > +++ b/mercurial/configitems.py
> > @@ -449,6 +449,9 @@ coreconfigitem('email', 'to',
> > coreconfigitem('experimental', 'archivemetatemplate',
> > default=dynamicdefault,
> > )
> > +coreconfigitem('experimental', 'auto-publish',
> > + default='ignore',
>
> auto-publish=ignore sounds like the push operation will never promote the
> changesets to public. Perhaps, it can be renamed to 'allow'?
I did default=None in V2. 'allow' almost suggests that we can also
have auto-publish=disallow to prevent remote from publishing changesets,
but still receive them on push (which is not true).
> > --- a/mercurial/exchange.py
> > +++ b/mercurial/exchange.py
> > @@ -334,6 +334,30 @@ def _computeoutgoing(repo, heads, common
> > heads = cl.heads()
> > return discovery.outgoing(repo, common, heads)
> >
> > +def _checkpublish(pushop):
> > + repo = pushop.repo
> > + ui = repo.ui
> > + behavior = ui.config('experimental', 'auto-publish')
> > + if pushop.publish or behavior not in ('warn', 'abort'):
> > + return
> > + remotephases = listkeys(pushop.remote, 'phases')
> > + if not remotephases.get('publishing', False):
> > + return
> > +
> > + if pushop.revs is None:
> > + published = repo.filtered('served').revs('not public()')
> > + else:
> > + published = repo.revs('::%ln - public()', pushop.revs)
> > + if published:
> > + if behavior == 'warn':
> > + ui.warn(_('%i changesets about to be published\n')
> > + % len(published))
>
> I don't think 'warn' is useful unless there's a reliable way to interrupt
> the push operation.
I left 'warn' as an option, but there's now 'confirm' too.
> > + elif behavior == 'abort':
> > + msg = _('push would publish %i changesets') % len(published)
> > + hint = _("behavior controlled by 'experimental.auto-publish'"
> > + " config")
>
> Shouldn't we instead suggest "hg push --publish"?
Yep. I've sent V2, sorry for the delay.
More information about the Mercurial-devel
mailing list