Show More
@@ -2653,35 +2653,8 b' def tag(ui, repo, name, rev_=None, **opt' | |||
|
2653 | 2653 | else: |
|
2654 | 2654 | r = hex(repo.changelog.tip()) |
|
2655 | 2655 | |
|
2656 | disallowed = (revrangesep, '\r', '\n') | |
|
2657 | for c in disallowed: | |
|
2658 | if c in name: | |
|
2659 | raise util.Abort(_("%s cannot be used in a tag name") % repr(c)) | |
|
2660 | ||
|
2661 | repo.hook('pretag', throw=True, node=r, tag=name, | |
|
2662 | local=int(not not opts['local'])) | |
|
2663 | ||
|
2664 | if opts['local']: | |
|
2665 | repo.opener("localtags", "a").write("%s %s\n" % (r, name)) | |
|
2666 | repo.hook('tag', node=r, tag=name, local=1) | |
|
2667 | return | |
|
2668 | ||
|
2669 | for x in repo.changes(): | |
|
2670 | if ".hgtags" in x: | |
|
2671 | raise util.Abort(_("working copy of .hgtags is changed " | |
|
2672 | "(please commit .hgtags manually)")) | |
|
2673 | ||
|
2674 | repo.wfile(".hgtags", "ab").write("%s %s\n" % (r, name)) | |
|
2675 | if repo.dirstate.state(".hgtags") == '?': | |
|
2676 | repo.add([".hgtags"]) | |
|
2677 | ||
|
2678 | message = (opts['message'] or | |
|
2679 | _("Added tag %s for changeset %s") % (name, r)) | |
|
2680 | try: | |
|
2681 | repo.commit([".hgtags"], message, opts['user'], opts['date']) | |
|
2682 | repo.hook('tag', node=r, tag=name, local=0) | |
|
2683 | except ValueError, inst: | |
|
2684 | raise util.Abort(str(inst)) | |
|
2656 | repo.tag(name, r, opts['local'], opts['message'], opts['user'], | |
|
2657 | opts['date']) | |
|
2685 | 2658 | |
|
2686 | 2659 | def tags(ui, repo): |
|
2687 | 2660 | """list repository tags |
@@ -162,6 +162,52 b' class localrepository(object):' | |||
|
162 | 162 | r = runhook(hname, cmd) or r |
|
163 | 163 | return r |
|
164 | 164 | |
|
165 | tag_disallowed = ':\r\n' | |
|
166 | ||
|
167 | def tag(self, name, node, local=False, message=None, user=None, date=None): | |
|
168 | '''tag a revision with a symbolic name. | |
|
169 | ||
|
170 | if local is True, the tag is stored in a per-repository file. | |
|
171 | otherwise, it is stored in the .hgtags file, and a new | |
|
172 | changeset is committed with the change. | |
|
173 | ||
|
174 | keyword arguments: | |
|
175 | ||
|
176 | local: whether to store tag in non-version-controlled file | |
|
177 | (default False) | |
|
178 | ||
|
179 | message: commit message to use if committing | |
|
180 | ||
|
181 | user: name of user to use if committing | |
|
182 | ||
|
183 | date: date tuple to use if committing''' | |
|
184 | ||
|
185 | for c in self.tag_disallowed: | |
|
186 | if c in name: | |
|
187 | raise util.Abort(_('%r cannot be used in a tag name') % c) | |
|
188 | ||
|
189 | self.hook('pretag', throw=True, node=node, tag=name, local=local) | |
|
190 | ||
|
191 | if local: | |
|
192 | self.opener('localtags', 'a').write('%s %s\n' % (node, name)) | |
|
193 | self.hook('tag', node=node, tag=name, local=local) | |
|
194 | return | |
|
195 | ||
|
196 | for x in self.changes(): | |
|
197 | if '.hgtags' in x: | |
|
198 | raise util.Abort(_('working copy of .hgtags is changed ' | |
|
199 | '(please commit .hgtags manually)')) | |
|
200 | ||
|
201 | self.wfile('.hgtags', 'ab').write('%s %s\n' % (node, name)) | |
|
202 | if self.dirstate.state('.hgtags') == '?': | |
|
203 | self.add(['.hgtags']) | |
|
204 | ||
|
205 | if not message: | |
|
206 | message = _('Added tag %s for changeset %s') % (name, node) | |
|
207 | ||
|
208 | self.commit(['.hgtags'], message, user, date) | |
|
209 | self.hook('tag', node=node, tag=name, local=local) | |
|
210 | ||
|
165 | 211 | def tags(self): |
|
166 | 212 | '''return a mapping of tag to node''' |
|
167 | 213 | if not self.tagscache: |
@@ -378,6 +378,13 b' def system(cmd, environ={}, cwd=None, on' | |||
|
378 | 378 | if command fails and onerr is None, return status. if ui object, |
|
379 | 379 | print error message and return status, else raise onerr object as |
|
380 | 380 | exception.''' |
|
381 | def py2shell(val): | |
|
382 | 'convert python object into string that is useful to shell' | |
|
383 | if val in (None, False): | |
|
384 | return '0' | |
|
385 | if val == True: | |
|
386 | return '1' | |
|
387 | return str(val) | |
|
381 | 388 | oldenv = {} |
|
382 | 389 | for k in environ: |
|
383 | 390 | oldenv[k] = os.environ.get(k) |
@@ -385,7 +392,7 b' def system(cmd, environ={}, cwd=None, on' | |||
|
385 | 392 | oldcwd = os.getcwd() |
|
386 | 393 | try: |
|
387 | 394 | for k, v in environ.iteritems(): |
|
388 |
os.environ[k] = |
|
|
395 | os.environ[k] = py2shell(v) | |
|
389 | 396 | if cwd is not None and oldcwd != cwd: |
|
390 | 397 | os.chdir(cwd) |
|
391 | 398 | rc = os.system(cmd) |
General Comments 0
You need to be logged in to leave comments.
Login now