Mercurial > hg
changeset 9148:b7837f0ed9fe
localrepo: factor updatetags() out of readtags() (issue548).
author | Greg Ward <greg-hg@gerg.ca> |
---|---|
date | Thu, 16 Jul 2009 10:39:41 -0400 |
parents | 234a230cc33b |
children | abb7d4d43a5f |
files | mercurial/localrepo.py |
diffstat | 1 files changed, 20 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/localrepo.py Thu Jul 16 10:39:41 2009 -0400 +++ b/mercurial/localrepo.py Thu Jul 16 10:39:41 2009 -0400 @@ -258,10 +258,13 @@ # be one tagtype for all such "virtual" tags? Or is the status # quo fine? - 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 last 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 @@ -287,15 +290,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: @@ -334,13 +343,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