[PATCH 2 of 3] transaction-summary: display the summary for all transactions
Martin von Zweigbergk
martinvonz at google.com
Mon Jul 17 13:35:13 EDT 2017
On Sun, Jul 16, 2017 at 2:21 AM, Boris Feld <boris.feld at octobus.net> wrote:
> # HG changeset patch
> # User Boris Feld <boris.feld at octobus.net>
> # Date 1500164406 -7200
> # Sun Jul 16 02:20:06 2017 +0200
> # Node ID 8df908eb63b41ebef19e71f4f3f0085be4e6f8b3
> # Parent ed5dfde9455a023b9b26152ee55ade0085b5516a
> # EXP-Topic tr.report
> transaction-summary: display the summary for all transactions
>
> Now that we records "all" changes happening in a transaction (in tr.changes)
> we will be able to provide better report on various changes (phases turned
> public, changeset obsoleted, branch merged or created, etc..)
>
> This is far too late in the cycle to play with this, but having this existing
> method called more widely will help extensions to play around with various
> options during the 4.4 cycle.
>
> Instead of calling registersummarycallback only for transactions we want, we
> always call it and use the transaction name to decide when to report (eg: we
> do not want `hg amend` to report new obsoleted changesets). Filtering on
> transaction name does not seems great, but seems good enough for the moment.
> We can change the API during the next cycle.
changegroup.apply() uses tr.hookargs['source'] for this. Should we add
a "source" argument to localrepo.transaction() and maybe store it on
the transaction object itself, so we don't have to do this weird
prefix matching here and reaching into hookargs in cg.apply()? OTOH, I
think behaving differently depending on who your caller is is a little
unusual too, so maybe we should find a better way of passing down the
information of what the caller wants (not who the caller is). But I do
see the simplicity of the current approach, so I'm not sure.
>
> The previous manual call during unbundling of the bundle2 "obsmarkers" part is
> no longer necessary and has been dropped.
>
> diff -r ed5dfde9455a -r 8df908eb63b4 mercurial/bundle2.py
> --- a/mercurial/bundle2.py Sun Jul 16 02:38:14 2017 +0200
> +++ b/mercurial/bundle2.py Sun Jul 16 02:20:06 2017 +0200
> @@ -161,7 +161,6 @@
> phases,
> pushkey,
> pycompat,
> - scmutil,
> tags,
> url,
> util,
> @@ -1814,7 +1813,6 @@
> if new:
> op.repo.ui.status(_('%i new obsolescence markers\n') % new)
> op.records.add('obsmarkers', {'new': new})
> - scmutil.registersummarycallback(op.repo, tr)
> if op.reply is not None:
> rpart = op.reply.newpart('reply:obsmarkers')
> rpart.addparam('in-reply-to', str(inpart.id), mandatory=False)
> diff -r ed5dfde9455a -r 8df908eb63b4 mercurial/localrepo.py
> --- a/mercurial/localrepo.py Sun Jul 16 02:38:14 2017 +0200
> +++ b/mercurial/localrepo.py Sun Jul 16 02:20:06 2017 +0200
> @@ -1092,6 +1092,7 @@
> raise error.ProgrammingError('transaction requires locking')
> tr = self.currenttransaction()
> if tr is not None:
> + scmutil.registersummarycallback(self, tr, desc)
> return tr.nest()
>
> # abort here if the journal already exists
> @@ -1247,6 +1248,7 @@
> # to stored data if transaction has no error.
> tr.addpostclose('refresh-filecachestats', self._refreshfilecachestats)
> self._transref = weakref.ref(tr)
> + scmutil.registersummarycallback(self, tr, desc)
> return tr
>
> def _journalfiles(self):
> diff -r ed5dfde9455a -r 8df908eb63b4 mercurial/scmutil.py
> --- a/mercurial/scmutil.py Sun Jul 16 02:38:14 2017 +0200
> +++ b/mercurial/scmutil.py Sun Jul 16 02:20:06 2017 +0200
> @@ -1080,14 +1080,25 @@
> with self.vfs(self.path, mode='wb', atomictemp=True) as fp:
> fp.write(''.join(lines))
>
> -def registersummarycallback(repo, otr):
> +_reportobsoletedsource = [
> + 'pull',
> + 'push',
> + 'serve',
> + 'unbundle',
> +]
> +
> +def registersummarycallback(repo, otr, txnname=''):
> """register a callback to issue a summary after the transaction is closed
> """
> - reporef = weakref.ref(repo)
> - def reportsummary(tr):
> - """the actual callback reporting the summary"""
> - repo = reporef()
> - obsoleted = obsutil.getobsoleted(repo, tr)
> - if obsoleted:
> - repo.ui.status(_('obsoleted %i changesets\n') % len(obsoleted))
> - otr.addpostclose('00-txnreport', reportsummary)
> + for source in _reportobsoletedsource:
> + if txnname.startswith(source):
> + reporef = weakref.ref(repo)
> + def reportsummary(tr):
> + """the actual callback reporting the summary"""
> + repo = reporef()
> + obsoleted = obsutil.getobsoleted(repo, tr)
> + if obsoleted:
> + repo.ui.status(_('obsoleted %i changesets\n')
> + % len(obsoleted))
> + otr.addpostclose('00-txnreport', reportsummary)
> + break
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list