[PATCH 5 of 7] localrepo: factor updatetags() out of readtags() and document both

Greg Ward greg at gerg.ca
Fri Jul 3 09:48:29 CDT 2009


# HG changeset patch
# User Greg Ward <greg at gerg.ca>
# Date 1246632310 14400
# Node ID 911e808f60a5359d7717606e648f8d9cd73e0b6e
# Parent  ce4bdfaf2fbd8ce995fc7562a4de48416b55311f
localrepo: factor updatetags() out of readtags() and document both.

diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -253,10 +253,13 @@
         # bookmarkrepo both use it for its return value.  Make up your
         # mind: return value or side effect -- not both!
 
-        alltags = {}                    # map tag name to (node, hist)
-        tagtypes = {}
+        def readtags(lines, fn):
+            '''Read tag definitions from a file (or any source of
+            lines).  Return a mapping from tag name to (node, hist):
+            node is the node id from the latest line read for that name,
+            and hist is the list of node ids previously associated with
+            it (in file order).  All node ids are binary, not hex.'''
 
-        def readtags(lines, fn, tagtype):
             filetags = {}               # map tag name to (node, hist)
             count = 0
 
@@ -282,15 +285,21 @@
                     # silently ignore as pull -r might cause this
                     continue
 
-                # update filetags: map tag name to (node, hist) where
-                # node is the node from the latest line read with
-                # 'name', and hist is the list of nodes previously
-                # associated with 'name'
+                # update filetags
                 hist = []
                 if name in filetags:
                     n, hist = filetags[name]
                     hist.append(n)
                 filetags[name] = (nodebin, hist)
+            return filetags
+
+        alltags = {}                    # map tag name to (node, hist)
+        tagtypes = {}
+
+        def updatetags(filetags, tagtype):
+            '''Incorporate the tag info read from one file into the two
+            dictionaries, alltags and tagtypes, that contain all tag
+            info (global across all heads plus local).'''
 
             for name, nodehist in filetags.iteritems():
                 if name not in alltags:
@@ -329,13 +338,15 @@
 
         # read the tags file from each head, ending with the tip
         for fctx in reversed(ctxs):
-            readtags(fctx.data().splitlines(), fctx, "global")
+            filetags = readtags(fctx.data().splitlines(), fctx)
+            updatetags(filetags, "global")
 
         try:
             data = encoding.fromlocal(self.opener("localtags").read())
             # localtags are stored in the local character set
             # while the internal tag table is stored in UTF-8
-            readtags(data.splitlines(), "localtags", "local")
+            filetags = readtags(data.splitlines(), "localtags")
+            updatetags(filetags, "local")
         except IOError:
             pass
 


More information about the Mercurial-devel mailing list