comparison mercurial/commands.py @ 14188:9029b1a38c30

bookmarks: allow to create/move bookmark without making it current (issue2788) Adds a -i/--inactive flag to the bookmarks command to create or move a bookmark without making it the current one. This lets you use a bookmark like a shareable, movable 'tag' and less like a 'branch'. Thanks to Alexander Solovyov <alexander@solovyov.net> for most of the work of implementation, and Matt Mackall <mpm@selenic.com> for suggesting the option name.
author Kevin Bullock <kbullock@ringworld.org>
date Sat, 11 Dec 2010 18:08:55 +0100
parents 135e244776f0
children 328422b0380d
comparison
equal deleted inserted replaced
14187:9bbaafddfa90 14188:9029b1a38c30
481 % (rev, short(node), changesets, tests)) 481 % (rev, short(node), changesets, tests))
482 if not noupdate: 482 if not noupdate:
483 cmdutil.bail_if_changed(repo) 483 cmdutil.bail_if_changed(repo)
484 return hg.clean(repo, node) 484 return hg.clean(repo, node)
485 485
486 def bookmark(ui, repo, mark=None, rev=None, force=False, delete=False, rename=None): 486 def bookmark(ui, repo, mark=None, rev=None, force=False, delete=False,
487 rename=None, inactive=False):
487 '''track a line of development with movable markers 488 '''track a line of development with movable markers
488 489
489 Bookmarks are pointers to certain commits that move when 490 Bookmarks are pointers to certain commits that move when
490 committing. Bookmarks are local. They can be renamed, copied and 491 committing. Bookmarks are local. They can be renamed, copied and
491 deleted. It is possible to use bookmark names in :hg:`merge` and 492 deleted. It is possible to use bookmark names in :hg:`merge` and
512 raise util.Abort(_("bookmark '%s' already exists " 513 raise util.Abort(_("bookmark '%s' already exists "
513 "(use -f to force)") % mark) 514 "(use -f to force)") % mark)
514 if mark is None: 515 if mark is None:
515 raise util.Abort(_("new bookmark name required")) 516 raise util.Abort(_("new bookmark name required"))
516 marks[mark] = marks[rename] 517 marks[mark] = marks[rename]
517 if repo._bookmarkcurrent == rename: 518 if repo._bookmarkcurrent == rename and not inactive:
518 bookmarks.setcurrent(repo, mark) 519 bookmarks.setcurrent(repo, mark)
519 del marks[rename] 520 del marks[rename]
520 bookmarks.write(repo) 521 bookmarks.write(repo)
521 return 522 return
522 523
547 _("a bookmark cannot have the name of an existing branch")) 548 _("a bookmark cannot have the name of an existing branch"))
548 if rev: 549 if rev:
549 marks[mark] = repo.lookup(rev) 550 marks[mark] = repo.lookup(rev)
550 else: 551 else:
551 marks[mark] = repo.changectx('.').node() 552 marks[mark] = repo.changectx('.').node()
552 if repo.changectx('.').node() == marks[mark]: 553 if not inactive and repo.changectx('.').node() == marks[mark]:
553 bookmarks.setcurrent(repo, mark) 554 bookmarks.setcurrent(repo, mark)
554 bookmarks.write(repo) 555 bookmarks.write(repo)
555 return 556 return
556 557
557 if mark is None: 558 if mark is None:
4467 "bookmarks": 4468 "bookmarks":
4468 (bookmark, 4469 (bookmark,
4469 [('f', 'force', False, _('force')), 4470 [('f', 'force', False, _('force')),
4470 ('r', 'rev', '', _('revision'), _('REV')), 4471 ('r', 'rev', '', _('revision'), _('REV')),
4471 ('d', 'delete', False, _('delete a given bookmark')), 4472 ('d', 'delete', False, _('delete a given bookmark')),
4472 ('m', 'rename', '', _('rename a given bookmark'), _('NAME'))], 4473 ('m', 'rename', '', _('rename a given bookmark'), _('NAME')),
4473 _('hg bookmarks [-f] [-d] [-m NAME] [-r REV] [NAME]')), 4474 ('i', 'inactive', False, _('do not mark a new bookmark active'))],
4475 _('hg bookmarks [-f] [-d] [-i] [-m NAME] [-r REV] [NAME]')),
4474 "branch": 4476 "branch":
4475 (branch, 4477 (branch,
4476 [('f', 'force', None, 4478 [('f', 'force', None,
4477 _('set branch name even if it shadows an existing branch')), 4479 _('set branch name even if it shadows an existing branch')),
4478 ('C', 'clean', None, _('reset branch name to parent branch name'))], 4480 ('C', 'clean', None, _('reset branch name to parent branch name'))],