Patchwork [2,of,7,V2] tags: do not feed dictionaries to 'findglobaltags'

login
register
mail settings
Submitter Pierre-Yves David
Date March 28, 2017, 12:03 p.m.
Message ID <07c3b62a75b17a20e0eb.1490702625@nodosa.octopoid.net>
Download mbox | patch
Permalink /patch/19781/
State Accepted
Headers show

Comments

Pierre-Yves David - March 28, 2017, 12:03 p.m.
# HG changeset patch
# User Pierre-Yves David <pierre-yves.david@ens-lyon.org>
# Date 1490674429 -7200
#      Tue Mar 28 06:13:49 2017 +0200
# Node ID 07c3b62a75b17a20e0eb31837560abce53cb6482
# Parent  a710d3c24acd544408fe77243102325514f5f697
# EXP-Topic tags
# Available At https://www.mercurial-scm.org/repo/users/marmoute/mercurial/
#              hg pull https://www.mercurial-scm.org/repo/users/marmoute/mercurial/ -r 07c3b62a75b1
tags: do not feed dictionaries to 'findglobaltags'

The code asserts that these dictionary are empty. So we can be more explicit
and have the function return the dictionaries directly.

Patch

diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -707,10 +707,11 @@  class localrepository(object):
         # be one tagtype for all such "virtual" tags?  Or is the status
         # quo fine?
 
-        alltags = {}                    # map tag name to (node, hist)
-        tagtypes = {}
 
-        tagsmod.findglobaltags(self.ui, self, alltags, tagtypes)
+        globaldata = tagsmod.findglobaltags(self.ui, self)
+        alltags = globaldata[0]   # map tag name to (node, hist)
+        tagtypes = globaldata[1]  # map tag name to tag type
+
         tagsmod.readlocaltags(self.ui, self, alltags, tagtypes)
 
         # Build the return dicts.  Have to re-encode tag names because
diff --git a/mercurial/tags.py b/mercurial/tags.py
--- a/mercurial/tags.py
+++ b/mercurial/tags.py
@@ -78,23 +78,18 @@  from . import (
 # The most recent changeset (in terms of revlog ordering for the head
 # setting it) for each tag is last.
 
-def findglobaltags(ui, repo, alltags, tagtypes):
-    '''Find global tags in a repo.
+def findglobaltags(ui, repo):
+    '''Find global tags in a repo: return (alltags, tagtypes)
 
     "alltags" maps tag name to (node, hist) 2-tuples.
 
     "tagtypes" maps tag name to tag type. Global tags always have the
     "global" tag type.
 
-    The "alltags" and "tagtypes" dicts are updated in place. Empty dicts
-    should be passed in.
-
     The tags cache is read and updated as a side-effect of calling.
     '''
-    # This is so we can be lazy and assume alltags contains only global
-    # tags when we pass it to _writetagcache().
-    assert len(alltags) == len(tagtypes) == 0, \
-           "findglobaltags() should be called first"
+    alltags = {}
+    tagtypes = {}
 
     (heads, tagfnode, valid, cachetags, shouldwrite) = _readtagcache(ui, repo)
     if cachetags is not None:
@@ -103,7 +98,7 @@  def findglobaltags(ui, repo, alltags, ta
         # cases where a global tag should outrank a local tag but won't,
         # because cachetags does not contain rank info?
         _updatetags(cachetags, 'global', alltags, tagtypes)
-        return
+        return alltags, tagtypes
 
     seen = set()  # set of fnode
     fctx = None
@@ -125,6 +120,7 @@  def findglobaltags(ui, repo, alltags, ta
     # and update the cache (if necessary)
     if shouldwrite:
         _writetagcache(ui, repo, valid, alltags)
+    return alltags, tagtypes
 
 def readlocaltags(ui, repo, alltags, tagtypes):
     '''Read local tags in repo. Update alltags and tagtypes.'''