76 |
76 |
77 def tags(self): |
77 def tags(self): |
78 '''return a mapping of tag to node''' |
78 '''return a mapping of tag to node''' |
79 if not self.tagscache: |
79 if not self.tagscache: |
80 self.tagscache = {} |
80 self.tagscache = {} |
81 def addtag(self, k, n): |
81 |
|
82 def parsetag(line, context): |
|
83 if not line: |
|
84 return |
|
85 s = l.split(" ", 1) |
|
86 if len(s) != 2: |
|
87 self.ui.warn(_("%s: ignoring invalid tag\n") % context) |
|
88 return |
|
89 node, key = s |
82 try: |
90 try: |
83 bin_n = bin(n) |
91 bin_n = bin(node) |
84 except TypeError: |
92 except TypeError: |
85 bin_n = '' |
93 self.ui.warn(_("%s: ignoring invalid tag\n") % context) |
86 self.tagscache[k.strip()] = bin_n |
94 return |
87 |
95 if bin_n not in self.changelog.nodemap: |
88 try: |
96 self.ui.warn(_("%s: ignoring invalid tag\n") % context) |
89 # read each head of the tags file, ending with the tip |
97 return |
90 # and add each tag found to the map, with "newer" ones |
98 self.tagscache[key.strip()] = bin_n |
91 # taking precedence |
99 |
92 fl = self.file(".hgtags") |
100 # read each head of the tags file, ending with the tip |
93 h = fl.heads() |
101 # and add each tag found to the map, with "newer" ones |
94 h.reverse() |
102 # taking precedence |
95 for r in h: |
103 fl = self.file(".hgtags") |
96 for l in fl.read(r).splitlines(): |
104 h = fl.heads() |
97 if l: |
105 h.reverse() |
98 n, k = l.split(" ", 1) |
106 for r in h: |
99 addtag(self, k, n) |
107 count = 0 |
100 except KeyError: |
108 for l in fl.read(r).splitlines(): |
101 pass |
109 count += 1 |
|
110 parsetag(l, ".hgtags:%d" % count) |
102 |
111 |
103 try: |
112 try: |
104 f = self.opener("localtags") |
113 f = self.opener("localtags") |
|
114 count = 0 |
105 for l in f: |
115 for l in f: |
106 n, k = l.split(" ", 1) |
116 count += 1 |
107 addtag(self, k, n) |
117 parsetag(l, "localtags:%d" % count) |
108 except IOError: |
118 except IOError: |
109 pass |
119 pass |
110 |
120 |
111 self.tagscache['tip'] = self.changelog.tip() |
121 self.tagscache['tip'] = self.changelog.tip() |
112 |
122 |