[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