diff -r 7e19b640c53e -r d7304434390f mercurial/changegroup.py --- a/mercurial/changegroup.py Sun Sep 08 01:02:34 2019 +0200 +++ b/mercurial/changegroup.py Sun Sep 08 09:42:53 2019 +0200 @@ -270,7 +270,7 @@ def revmap(x): return cl.rev(x) - changesets = files = revisions = 0 + changesets = 0 try: # The transaction may already carry source information. In this @@ -337,23 +337,38 @@ repo.ui.status(_("adding file changes\n")) newrevs, newfiles = _addchangegroupfiles( repo, self, revmap, trp, efiles, needfiles) - revisions += newrevs - files += newfiles + + # making sure the value exists + tr.changes.setdefault('changegroup-count-changesets', 0) + tr.changes.setdefault('changegroup-count-revisions', 0) + tr.changes.setdefault('changegroup-count-files', 0) + tr.changes.setdefault('changegroup-count-heads', 0) + + # some code use bundle operation for internal purpose. They usually + # set `ui.quiet` to do this outside of user sight. Size the report + # of such operation now happens at the end of the transaction, that + # ui.quiet has not direct effect on the output. + # + # To preserve this intend use an inelegant hack, we fail to report + # the change if `quiet` is set. We should probably move to + # something better, but this is a good first step to allow the "end + # of transaction report" to pass tests. + if not repo.ui.quiet: + tr.changes['changegroup-count-changesets'] += changesets + tr.changes['changegroup-count-revisions'] += newrevs + tr.changes['changegroup-count-files'] += newfiles deltaheads = 0 if oldheads: heads = cl.heads() - deltaheads = len(heads) - len(oldheads) + deltaheads += len(heads) - len(oldheads) for h in heads: if h not in oldheads and repo[h].closesbranch(): deltaheads -= 1 - htext = "" - if deltaheads: - htext = _(" (%+d heads)") % deltaheads - repo.ui.status(_("added %d changesets" - " with %d changes to %d files%s\n") - % (changesets, revisions, files, htext)) + # see previous comment about checking ui.quiet + if not repo.ui.quiet: + tr.changes['changegroup-count-heads'] += deltaheads repo.invalidatevolatilesets() if changesets > 0: