[PATCH 6 of 7] localrepo: change readtags() from a closure in _findtags() to a method
Greg Ward
greg at gerg.ca
Fri Jul 3 09:48:30 CDT 2009
# HG changeset patch
# User Greg Ward <greg at gerg.ca>
# Date 1246632310 14400
# Node ID 28f7005c067ff1380c262283c71ba5327ee29614
# Parent 911e808f60a5359d7717606e648f8d9cd73e0b6e
localrepo: change readtags() from a closure in _findtags() to a method.
diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -253,46 +253,6 @@
# bookmarkrepo both use it for its return value. Make up your
# mind: return value or side effect -- not both!
- 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.'''
-
- filetags = {} # map tag name to (node, hist)
- count = 0
-
- def warn(msg):
- self.ui.warn(_("%s, line %s: %s\n") % (fn, count, msg))
-
- for line in lines:
- count += 1
- if not line:
- continue
- try:
- (nodehex, name) = line.split(" ", 1)
- except ValueError:
- warn(_("cannot parse entry"))
- continue
- name = encoding.tolocal(name.strip()) # stored in UTF-8
- try:
- nodebin = bin(nodehex)
- except TypeError:
- warn(_("node '%s' is not well formed") % nodehex)
- continue
- if nodebin not in self.changelog.nodemap:
- # silently ignore as pull -r might cause this
- continue
-
- # 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 = {}
@@ -338,14 +298,14 @@
# read the tags file from each head, ending with the tip
for fctx in reversed(ctxs):
- filetags = readtags(fctx.data().splitlines(), fctx)
+ filetags = self._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
- filetags = readtags(data.splitlines(), "localtags")
+ filetags = self._readtags(data.splitlines(), "localtags")
updatetags(filetags, "local")
except IOError:
pass
@@ -360,6 +320,46 @@
self._tags['tip'] = self.changelog.tip()
return self._tags
+ def _readtags(self, 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.'''
+
+ filetags = {} # map tag name to (node, hist)
+ count = 0
+
+ def warn(msg):
+ self.ui.warn(_("%s, line %s: %s\n") % (fn, count, msg))
+
+ for line in lines:
+ count += 1
+ if not line:
+ continue
+ try:
+ (nodehex, name) = line.split(" ", 1)
+ except ValueError:
+ warn(_("cannot parse entry"))
+ continue
+ name = encoding.tolocal(name.strip()) # stored in UTF-8
+ try:
+ nodebin = bin(nodehex)
+ except TypeError:
+ warn(_("node '%s' is not well formed") % nodehex)
+ continue
+ if nodebin not in self.changelog.nodemap:
+ # silently ignore as pull -r might cause this
+ continue
+
+ # update filetags
+ hist = []
+ if name in filetags:
+ n, hist = filetags[name]
+ hist.append(n)
+ filetags[name] = (nodebin, hist)
+ return filetags
+
def tagtype(self, tagname):
'''
return the type of the given tag. result can be:
More information about the Mercurial-devel
mailing list