2651 if rev_: |
2651 if rev_: |
2652 r = hex(repo.lookup(rev_)) |
2652 r = hex(repo.lookup(rev_)) |
2653 else: |
2653 else: |
2654 r = hex(repo.changelog.tip()) |
2654 r = hex(repo.changelog.tip()) |
2655 |
2655 |
2656 disallowed = (revrangesep, '\r', '\n') |
2656 repo.tag(name, r, opts['local'], opts['message'], opts['user'], |
2657 for c in disallowed: |
2657 opts['date']) |
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)) |
|
2685 |
2658 |
2686 def tags(ui, repo): |
2659 def tags(ui, repo): |
2687 """list repository tags |
2660 """list repository tags |
2688 |
2661 |
2689 List the repository tags. |
2662 List the repository tags. |