116 if c in name: |
116 if c in name: |
117 raise util.Abort(_('%r cannot be used in a tag name') % c) |
117 raise util.Abort(_('%r cannot be used in a tag name') % c) |
118 |
118 |
119 self.hook('pretag', throw=True, node=hex(node), tag=name, local=local) |
119 self.hook('pretag', throw=True, node=hex(node), tag=name, local=local) |
120 |
120 |
|
121 def writetag(fp, name, munge, prevtags): |
|
122 if prevtags and prevtags[-1] != '\n': |
|
123 fp.write('\n') |
|
124 fp.write('%s %s\n' % (hex(node), munge and munge(name) or name)) |
|
125 fp.close() |
|
126 self.hook('tag', node=hex(node), tag=name, local=local) |
|
127 |
|
128 prevtags = '' |
121 if local: |
129 if local: |
|
130 try: |
|
131 fp = self.opener('localtags', 'r+') |
|
132 except IOError, err: |
|
133 fp = self.opener('localtags', 'a') |
|
134 else: |
|
135 prevtags = fp.read() |
|
136 |
122 # local tags are stored in the current charset |
137 # local tags are stored in the current charset |
123 self.opener('localtags', 'a').write('%s %s\n' % (hex(node), name)) |
138 writetag(fp, name, None, prevtags) |
124 self.hook('tag', node=hex(node), tag=name, local=local) |
|
125 return |
139 return |
126 |
140 |
127 # committed tags are stored in UTF-8 |
|
128 line = '%s %s\n' % (hex(node), util.fromlocal(name)) |
|
129 if use_dirstate: |
141 if use_dirstate: |
130 self.wfile('.hgtags', 'ab').write(line) |
142 try: |
|
143 fp = self.wfile('.hgtags', 'rb+') |
|
144 except IOError, err: |
|
145 fp = self.wfile('.hgtags', 'ab') |
|
146 else: |
|
147 prevtags = fp.read() |
131 else: |
148 else: |
132 try: |
149 try: |
133 ntags = self.filectx('.hgtags', parent).data() |
150 prevtags = self.filectx('.hgtags', parent).data() |
134 except revlog.LookupError: |
151 except revlog.LookupError: |
135 ntags = '' |
152 pass |
136 self.wfile('.hgtags', 'wb').write(ntags + line) |
153 fp = self.wfile('.hgtags', 'wb') |
|
154 |
|
155 # committed tags are stored in UTF-8 |
|
156 writetag(fp, name, util.fromlocal, prevtags) |
|
157 |
137 if use_dirstate and self.dirstate.state('.hgtags') == '?': |
158 if use_dirstate and self.dirstate.state('.hgtags') == '?': |
138 self.add(['.hgtags']) |
159 self.add(['.hgtags']) |
139 |
160 |
140 tagnode = self.commit(['.hgtags'], message, user, date, p1=parent) |
161 tagnode = self.commit(['.hgtags'], message, user, date, p1=parent) |
141 |
162 |