3663 |
3663 |
3664 Name a particular revision using <name>. |
3664 Name a particular revision using <name>. |
3665 |
3665 |
3666 Tags are used to name particular revisions of the repository and are |
3666 Tags are used to name particular revisions of the repository and are |
3667 very useful to compare different revisions, to go back to significant |
3667 very useful to compare different revisions, to go back to significant |
3668 earlier versions or to mark branch points as releases, etc. |
3668 earlier versions or to mark branch points as releases, etc. Changing |
|
3669 an existing tag is normally disallowed; use -f/--force to override. |
3669 |
3670 |
3670 If no revision is given, the parent of the working directory is |
3671 If no revision is given, the parent of the working directory is |
3671 used, or tip if no revision is checked out. |
3672 used, or tip if no revision is checked out. |
3672 |
3673 |
3673 To facilitate version control, distribution, and merging of tags, |
3674 To facilitate version control, distribution, and merging of tags, |
3674 they are stored as a file named ".hgtags" which is managed |
3675 they are stored as a file named ".hgtags" which is managed similarly |
3675 similarly to other project files and can be hand-edited if |
3676 to other project files and can be hand-edited if necessary. This |
3676 necessary. The file '.hg/localtags' is used for local tags (not |
3677 also means that tagging creates a new commit. The file |
3677 shared among repositories). |
3678 ".hg/localtags" is used for local tags (not shared among |
|
3679 repositories). |
|
3680 |
|
3681 Tag commits are usually made at the head of a branch. If the parent |
|
3682 of the working directory is not a branch head, :hg:`tag` aborts; use |
|
3683 -f/--force to force the tag commit to be based on a non-head |
|
3684 changeset. |
3678 |
3685 |
3679 See :hg:`help dates` for a list of formats valid for -d/--date. |
3686 See :hg:`help dates` for a list of formats valid for -d/--date. |
3680 |
3687 |
3681 Since tag names have priority over branch names during revision |
3688 Since tag names have priority over branch names during revision |
3682 lookup, using an existing branch name as a tag name is discouraged. |
3689 lookup, using an existing branch name as a tag name is discouraged. |
3715 elif not opts.get('force'): |
3722 elif not opts.get('force'): |
3716 for n in names: |
3723 for n in names: |
3717 if n in repo.tags(): |
3724 if n in repo.tags(): |
3718 raise util.Abort(_('tag \'%s\' already exists ' |
3725 raise util.Abort(_('tag \'%s\' already exists ' |
3719 '(use -f to force)') % n) |
3726 '(use -f to force)') % n) |
3720 if not rev_ and repo.dirstate.parents()[1] != nullid: |
3727 if not opts.get('local'): |
3721 raise util.Abort(_('uncommitted merge - please provide a ' |
3728 p1, p2 = repo.dirstate.parents() |
3722 'specific revision')) |
3729 if p2 != nullid: |
|
3730 raise util.Abort(_('uncommitted merge')) |
|
3731 bheads = repo.branchheads() |
|
3732 if not opts.get('force') and bheads and p1 not in bheads: |
|
3733 raise util.Abort(_('not at a branch head (use -f to force)')) |
3723 r = cmdutil.revsingle(repo, rev_).node() |
3734 r = cmdutil.revsingle(repo, rev_).node() |
3724 |
3735 |
3725 if not message: |
3736 if not message: |
3726 # we don't translate commit messages |
3737 # we don't translate commit messages |
3727 message = ('Added tag %s for changeset %s' % |
3738 message = ('Added tag %s for changeset %s' % |
4479 _('list the changed files of a revision'), _('REV')), |
4490 _('list the changed files of a revision'), _('REV')), |
4480 ] + walkopts + subrepoopts, |
4491 ] + walkopts + subrepoopts, |
4481 _('[OPTION]... [FILE]...')), |
4492 _('[OPTION]... [FILE]...')), |
4482 "tag": |
4493 "tag": |
4483 (tag, |
4494 (tag, |
4484 [('f', 'force', None, _('replace existing tag')), |
4495 [('f', 'force', None, _('force tag')), |
4485 ('l', 'local', None, _('make the tag local')), |
4496 ('l', 'local', None, _('make the tag local')), |
4486 ('r', 'rev', '', |
4497 ('r', 'rev', '', |
4487 _('revision to tag'), _('REV')), |
4498 _('revision to tag'), _('REV')), |
4488 ('', 'remove', None, _('remove a tag')), |
4499 ('', 'remove', None, _('remove a tag')), |
4489 # -l/--local is already there, commitopts cannot be used |
4500 # -l/--local is already there, commitopts cannot be used |