# HG changeset patch # User Gregory Szorc # Date 2018-03-05 05:30:00 # Node ID 6f570c501e3ebc3d9b59920f50ed7523d93cb847 # Parent 6715e8035b4ff9379a80f5413a4e9148114ab256 merge: deprecate accessing update results by index Now that we have named attributes, let's convert the code base to use them. We also add deprecation warnings so legacy consumers are aware of their transgressions. ``stats.unresolvedcount`` is much easier to read than ``stats[3]``, don't you think? Differential Revision: https://phab.mercurial-scm.org/D2694 diff --git a/hgext/histedit.py b/hgext/histedit.py --- a/hgext/histedit.py +++ b/hgext/histedit.py @@ -499,7 +499,7 @@ class histeditaction(object): hg.update(repo, self.state.parentctxnode, quietempty=True) stats = applychanges(repo.ui, repo, rulectx, {}) repo.dirstate.setbranch(rulectx.branch()) - if stats and stats[3] > 0: + if stats.unresolvedcount: buf = repo.ui.popbuffer() repo.ui.write(buf) raise error.InterventionRequired( diff --git a/hgext/rebase.py b/hgext/rebase.py --- a/hgext/rebase.py +++ b/hgext/rebase.py @@ -525,7 +525,7 @@ class rebaseruntime(object): with ui.configoverride(overrides, 'rebase'): stats = rebasenode(repo, rev, p1, base, self.collapsef, dest, wctx=self.wctx) - if stats[3] > 0: + if stats.unresolvedcount > 0: if self.inmemory: raise error.InMemoryMergeConflictsError() else: diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -629,7 +629,7 @@ def _dobackout(ui, repo, node=None, rev= repo.setparents(op1, op2) dsguard.close() hg._showstats(repo, stats) - if stats[3]: + if stats.unresolvedcount: repo.ui.status(_("use 'hg resolve' to retry unresolved " "file merges\n")) return 1 @@ -2311,7 +2311,7 @@ def _dograft(ui, repo, *revs, **opts): finally: repo.ui.setconfig('ui', 'forcemerge', '', 'graft') # report any conflicts - if stats[3] > 0: + if stats.unresolvedcount > 0: # write out state for --continue nodelines = [repo[rev].hex() + "\n" for rev in revs[pos:]] repo.vfs.write('graftstate', ''.join(nodelines)) diff --git a/mercurial/hg.py b/mercurial/hg.py --- a/mercurial/hg.py +++ b/mercurial/hg.py @@ -749,7 +749,7 @@ def clone(ui, peeropts, source, dest=Non return srcpeer, destpeer def _showstats(repo, stats, quietempty=False): - if quietempty and not any(stats): + if quietempty and stats.isempty(): return repo.ui.status(_("%d files updated, %d files merged, " "%d files removed, %d files unresolved\n") % ( @@ -770,9 +770,9 @@ def update(repo, node, quietempty=False, """update the working directory to node""" stats = updaterepo(repo, node, False, updatecheck=updatecheck) _showstats(repo, stats, quietempty) - if stats[3]: + if stats.unresolvedcount: repo.ui.status(_("use 'hg resolve' to retry unresolved file merges\n")) - return stats[3] > 0 + return stats.unresolvedcount > 0 # naming conflict in clone() _update = update @@ -783,7 +783,7 @@ def clean(repo, node, show_stats=True, q repo.vfs.unlinkpath('graftstate', ignoremissing=True) if show_stats: _showstats(repo, stats, quietempty) - return stats[3] > 0 + return stats.unresolvedcount > 0 # naming conflict in updatetotally() _clean = clean @@ -882,12 +882,12 @@ def merge(repo, node, force=None, remind labels=labels) _showstats(repo, stats) - if stats[3]: + if stats.unresolvedcount: repo.ui.status(_("use 'hg resolve' to retry unresolved file merges " "or 'hg merge --abort' to abandon\n")) elif remind and not abort: repo.ui.status(_("(branch merge, don't forget to commit)\n")) - return stats[3] > 0 + return stats.unresolvedcount > 0 def _incoming(displaychlist, subreporecurse, ui, repo, source, opts, buffered=False): diff --git a/mercurial/merge.py b/mercurial/merge.py --- a/mercurial/merge.py +++ b/mercurial/merge.py @@ -1483,9 +1483,15 @@ class updateresult(object): removedcount = attr.ib() unresolvedcount = attr.ib() + def isempty(self): + return (not self.updatedcount and not self.mergedcount + and not self.removedcount and not self.unresolvedcount) + # TODO remove container emulation once consumers switch to new API. def __getitem__(self, x): + util.nouideprecwarn('access merge.update() results by name instead of ' + 'index', '4.6', 2) if x == 0: return self.updatedcount elif x == 1: @@ -1498,6 +1504,8 @@ class updateresult(object): raise IndexError('can only access items 0-3') def __len__(self): + util.nouideprecwarn('access merge.update() results by name instead of ' + 'index', '4.6', 2) return 4 def applyupdates(repo, actions, wctx, mctx, overwrite, labels=None): @@ -2164,7 +2172,8 @@ def update(repo, node, branchmerge, forc sparse.prunetemporaryincludes(repo) if not partial: - repo.hook('update', parent1=xp1, parent2=xp2, error=stats[3]) + repo.hook('update', parent1=xp1, parent2=xp2, + error=stats.unresolvedcount) return stats def graft(repo, ctx, pctx, labels, keepparent=False):