hgext/bookmarks.py
author Steve Borho <steve@borho.org>
Thu, 01 Jul 2010 12:53:37 -0500
branchstable
changeset 11491 159233cc9c14
parent 11444 b9a46acdfe1f
child 11561 e5aaaef91a27
permissions -rw-r--r--
wix: pick up new help topics added between 1.5 and 1.6 These files are not included the 1.6.0 installer, but will be picked up by nightly builds as soon as this makes it to the stable branch.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
     1
# Mercurial extension to provide the 'hg bookmark' command
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
     2
#
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
     3
# Copyright 2008 David Soria Parra <dsp@php.net>
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
     4
#
8225
46293a0c7e9f updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents: 8087
diff changeset
     5
# This software may be used and distributed according to the terms of the
10263
25e572394f5c Update license to GPLv2+
Matt Mackall <mpm@selenic.com>
parents: 9643
diff changeset
     6
# GNU General Public License version 2 or any later version.
7252
104a8324798e bookmarks: Avoid long lines
Joel Rosdahl <joel@rosdahl.net>
parents: 7251
diff changeset
     7
8894
868670dbc237 extensions: improve the consistency of synopses
Cédric Duval <cedricduval@free.fr>
parents: 8892
diff changeset
     8
'''track a line of development with movable markers
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
     9
9251
6bddba3973bc bookmarks: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9202
diff changeset
    10
Bookmarks are local movable markers to changesets. Every bookmark
6bddba3973bc bookmarks: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9202
diff changeset
    11
points to a changeset identified by its hash. If you commit a
6bddba3973bc bookmarks: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9202
diff changeset
    12
changeset that is based on a changeset that has a bookmark on it, the
6bddba3973bc bookmarks: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9202
diff changeset
    13
bookmark shifts to the new changeset.
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    14
11193
687c7d395f20 Use our custom hg reStructuredText role some more
Martin Geisler <mg@aragost.com>
parents: 10973
diff changeset
    15
It is possible to use bookmark names in every revision lookup (e.g.
687c7d395f20 Use our custom hg reStructuredText role some more
Martin Geisler <mg@aragost.com>
parents: 10973
diff changeset
    16
:hg:`merge`, :hg:`update`).
7481
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    17
9251
6bddba3973bc bookmarks: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9202
diff changeset
    18
By default, when several bookmarks point to the same changeset, they
6bddba3973bc bookmarks: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9202
diff changeset
    19
will all move forward together. It is possible to obtain a more
6bddba3973bc bookmarks: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9202
diff changeset
    20
git-like experience by adding the following configuration option to
6bddba3973bc bookmarks: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9202
diff changeset
    21
your .hgrc::
7481
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    22
8892
30b25ebaa63b bookmarks: help improvements
Cédric Duval <cedricduval@free.fr>
parents: 8862
diff changeset
    23
  [bookmarks]
30b25ebaa63b bookmarks: help improvements
Cédric Duval <cedricduval@free.fr>
parents: 8862
diff changeset
    24
  track.current = True
7481
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    25
9251
6bddba3973bc bookmarks: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9202
diff changeset
    26
This will cause Mercurial to track the bookmark that you are currently
6bddba3973bc bookmarks: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9202
diff changeset
    27
using, and only update it. This is similar to git's approach to
6bddba3973bc bookmarks: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9202
diff changeset
    28
branching.
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    29
'''
7252
104a8324798e bookmarks: Avoid long lines
Joel Rosdahl <joel@rosdahl.net>
parents: 7251
diff changeset
    30
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    31
from mercurial.i18n import _
7638
f83a2b1d1a71 bookmarks; clean up imports and function wrapping
Matt Mackall <mpm@selenic.com>
parents: 7637
diff changeset
    32
from mercurial.node import nullid, nullrev, hex, short
11431
cac256790aa4 bookmarks: Add -B option to incoming/outgoing to compare bookmarks
David Soria Parra <dsp@php.net>
parents: 11379
diff changeset
    33
from mercurial import util, commands, repair, extensions, pushkey, hg, url
7638
f83a2b1d1a71 bookmarks; clean up imports and function wrapping
Matt Mackall <mpm@selenic.com>
parents: 7637
diff changeset
    34
import os
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    35
10106
cb3f6da91646 bookmarks: write() can simply access repo._bookmarks
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10105
diff changeset
    36
def write(repo):
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    37
    '''Write bookmarks
7250
352627bcafc3 bookmarks: Remove trailing space
Joel Rosdahl <joel@rosdahl.net>
parents: 7239
diff changeset
    38
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    39
    Write the given bookmark => hash dictionary to the .hg/bookmarks file
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    40
    in a format equal to those of localtags.
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    41
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    42
    We also store a backup of the previous state in undo.bookmarks that
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    43
    can be copied back on rollback.
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    44
    '''
10106
cb3f6da91646 bookmarks: write() can simply access repo._bookmarks
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10105
diff changeset
    45
    refs = repo._bookmarks
7253
8b81d1e2dc04 bookmarks: Only save undo.bookmarks if bookmarks exist
Joel Rosdahl <joel@rosdahl.net>
parents: 7252
diff changeset
    46
    if os.path.exists(repo.join('bookmarks')):
8b81d1e2dc04 bookmarks: Only save undo.bookmarks if bookmarks exist
Joel Rosdahl <joel@rosdahl.net>
parents: 7252
diff changeset
    47
        util.copyfile(repo.join('bookmarks'), repo.join('undo.bookmarks'))
10107
c03f467423f3 bookmarks: repo._bookmarkcurrent should be a propertycache
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10106
diff changeset
    48
    if repo._bookmarkcurrent not in refs:
7481
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    49
        setcurrent(repo, None)
8862
cd96f159a2d3 bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents: 8762
diff changeset
    50
    wlock = repo.wlock()
cd96f159a2d3 bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents: 8762
diff changeset
    51
    try:
cd96f159a2d3 bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents: 8762
diff changeset
    52
        file = repo.opener('bookmarks', 'w', atomictemp=True)
cd96f159a2d3 bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents: 8762
diff changeset
    53
        for refspec, node in refs.iteritems():
cd96f159a2d3 bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents: 8762
diff changeset
    54
            file.write("%s %s\n" % (hex(node), refspec))
cd96f159a2d3 bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents: 8762
diff changeset
    55
        file.rename()
11440
5fe4302cfd72 bookmarks: touch changelog on write to force hgweb reload
Matt Mackall <mpm@selenic.com>
parents: 11434
diff changeset
    56
5fe4302cfd72 bookmarks: touch changelog on write to force hgweb reload
Matt Mackall <mpm@selenic.com>
parents: 11434
diff changeset
    57
        # touch 00changelog.i so hgweb reloads bookmarks (no lock needed)
5fe4302cfd72 bookmarks: touch changelog on write to force hgweb reload
Matt Mackall <mpm@selenic.com>
parents: 11434
diff changeset
    58
        try:
5fe4302cfd72 bookmarks: touch changelog on write to force hgweb reload
Matt Mackall <mpm@selenic.com>
parents: 11434
diff changeset
    59
            os.utime(repo.sjoin('00changelog.i'), None)
5fe4302cfd72 bookmarks: touch changelog on write to force hgweb reload
Matt Mackall <mpm@selenic.com>
parents: 11434
diff changeset
    60
        except OSError:
5fe4302cfd72 bookmarks: touch changelog on write to force hgweb reload
Matt Mackall <mpm@selenic.com>
parents: 11434
diff changeset
    61
            pass
5fe4302cfd72 bookmarks: touch changelog on write to force hgweb reload
Matt Mackall <mpm@selenic.com>
parents: 11434
diff changeset
    62
8862
cd96f159a2d3 bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents: 8762
diff changeset
    63
    finally:
cd96f159a2d3 bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents: 8762
diff changeset
    64
        wlock.release()
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    65
7481
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    66
def setcurrent(repo, mark):
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    67
    '''Set the name of the bookmark that we are currently on
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    68
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    69
    Set the name of the bookmark that we are on (hg update <bookmark>).
8087
6dcf425cc2a6 bookmarks: fix typo
Wagner Bruna <wbruna@yahoo.com>
parents: 7984
diff changeset
    70
    The name is recorded in .hg/bookmarks.current
7481
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    71
    '''
10107
c03f467423f3 bookmarks: repo._bookmarkcurrent should be a propertycache
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10106
diff changeset
    72
    current = repo._bookmarkcurrent
c03f467423f3 bookmarks: repo._bookmarkcurrent should be a propertycache
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10106
diff changeset
    73
    if current == mark:
7481
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    74
        return
7484
167853c7e54a bookmarks: do not overwrite bookmarks.current if not necessary
David Soria Parra <dsp@php.net>
parents: 7483
diff changeset
    75
10105
dc5b5cc5ca34 bookmarks: turn repo._bookmarks into a propertycache
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 9643
diff changeset
    76
    refs = repo._bookmarks
7484
167853c7e54a bookmarks: do not overwrite bookmarks.current if not necessary
David Soria Parra <dsp@php.net>
parents: 7483
diff changeset
    77
7491
b95ff487870e bookmarks: this is a comment, not a string
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 7489
diff changeset
    78
    # do not update if we do update to a rev equal to the current bookmark
7817
cb516e788238 bookmarks: fixes bug where a deleted bookmark may still be treated as current when track.current option is set
Alex Unden <alu@zpuppet.org>
parents: 7816
diff changeset
    79
    if (mark and mark not in refs and
10107
c03f467423f3 bookmarks: repo._bookmarkcurrent should be a propertycache
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10106
diff changeset
    80
        current and refs[current] == repo.changectx('.').node()):
7484
167853c7e54a bookmarks: do not overwrite bookmarks.current if not necessary
David Soria Parra <dsp@php.net>
parents: 7483
diff changeset
    81
        return
7481
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    82
    if mark not in refs:
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    83
        mark = ''
8862
cd96f159a2d3 bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents: 8762
diff changeset
    84
    wlock = repo.wlock()
cd96f159a2d3 bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents: 8762
diff changeset
    85
    try:
cd96f159a2d3 bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents: 8762
diff changeset
    86
        file = repo.opener('bookmarks.current', 'w', atomictemp=True)
cd96f159a2d3 bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents: 8762
diff changeset
    87
        file.write(mark)
cd96f159a2d3 bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents: 8762
diff changeset
    88
        file.rename()
cd96f159a2d3 bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents: 8762
diff changeset
    89
    finally:
cd96f159a2d3 bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents: 8762
diff changeset
    90
        wlock.release()
7481
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    91
    repo._bookmarkcurrent = mark
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    92
7255
69e431ea124d bookmarks: Rename --move to --rename
Joel Rosdahl <joel@rosdahl.net>
parents: 7254
diff changeset
    93
def bookmark(ui, repo, mark=None, rev=None, force=False, delete=False, rename=None):
8894
868670dbc237 extensions: improve the consistency of synopses
Cédric Duval <cedricduval@free.fr>
parents: 8892
diff changeset
    94
    '''track a line of development with movable markers
7250
352627bcafc3 bookmarks: Remove trailing space
Joel Rosdahl <joel@rosdahl.net>
parents: 7239
diff changeset
    95
9251
6bddba3973bc bookmarks: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9202
diff changeset
    96
    Bookmarks are pointers to certain commits that move when
6bddba3973bc bookmarks: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9202
diff changeset
    97
    committing. Bookmarks are local. They can be renamed, copied and
10973
49a07f441496 Use hg role in help strings
Martin Geisler <mg@aragost.com>
parents: 10956
diff changeset
    98
    deleted. It is possible to use bookmark names in :hg:`merge` and
49a07f441496 Use hg role in help strings
Martin Geisler <mg@aragost.com>
parents: 10956
diff changeset
    99
    :hg:`update` to merge and update respectively to a given bookmark.
7250
352627bcafc3 bookmarks: Remove trailing space
Joel Rosdahl <joel@rosdahl.net>
parents: 7239
diff changeset
   100
10973
49a07f441496 Use hg role in help strings
Martin Geisler <mg@aragost.com>
parents: 10956
diff changeset
   101
    You can use :hg:`bookmark NAME` to set a bookmark on the working
9251
6bddba3973bc bookmarks: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9202
diff changeset
   102
    directory's parent revision with the given name. If you specify
6bddba3973bc bookmarks: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9202
diff changeset
   103
    a revision using -r REV (where REV may be an existing bookmark),
6bddba3973bc bookmarks: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9202
diff changeset
   104
    the bookmark is assigned to that revision.
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   105
    '''
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   106
    hexfn = ui.debugflag and hex or short
10105
dc5b5cc5ca34 bookmarks: turn repo._bookmarks into a propertycache
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 9643
diff changeset
   107
    marks = repo._bookmarks
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   108
    cur   = repo.changectx('.').node()
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   109
7255
69e431ea124d bookmarks: Rename --move to --rename
Joel Rosdahl <joel@rosdahl.net>
parents: 7254
diff changeset
   110
    if rename:
69e431ea124d bookmarks: Rename --move to --rename
Joel Rosdahl <joel@rosdahl.net>
parents: 7254
diff changeset
   111
        if rename not in marks:
7251
444d88175e33 bookmarks: Fix spelling and grammar
Joel Rosdahl <joel@rosdahl.net>
parents: 7250
diff changeset
   112
            raise util.Abort(_("a bookmark of this name does not exist"))
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   113
        if mark in marks and not force:
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   114
            raise util.Abort(_("a bookmark of the same name already exists"))
7254
d892211d670e bookmarks: Require new bookmark name when renaming
Joel Rosdahl <joel@rosdahl.net>
parents: 7253
diff changeset
   115
        if mark is None:
d892211d670e bookmarks: Require new bookmark name when renaming
Joel Rosdahl <joel@rosdahl.net>
parents: 7253
diff changeset
   116
            raise util.Abort(_("new bookmark name required"))
7255
69e431ea124d bookmarks: Rename --move to --rename
Joel Rosdahl <joel@rosdahl.net>
parents: 7254
diff changeset
   117
        marks[mark] = marks[rename]
69e431ea124d bookmarks: Rename --move to --rename
Joel Rosdahl <joel@rosdahl.net>
parents: 7254
diff changeset
   118
        del marks[rename]
10107
c03f467423f3 bookmarks: repo._bookmarkcurrent should be a propertycache
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10106
diff changeset
   119
        if repo._bookmarkcurrent == rename:
7550
fead6cf99a09 bookmarks: set the current bookmark to the new name if we rename the current bookmark
David Soria Parra <dsp@php.net>
parents: 7489
diff changeset
   120
            setcurrent(repo, mark)
10106
cb3f6da91646 bookmarks: write() can simply access repo._bookmarks
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10105
diff changeset
   121
        write(repo)
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   122
        return
7250
352627bcafc3 bookmarks: Remove trailing space
Joel Rosdahl <joel@rosdahl.net>
parents: 7239
diff changeset
   123
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   124
    if delete:
8527
f9a80054dd3c use 'x is None' instead of 'x == None'
Martin Geisler <mg@lazybytes.net>
parents: 8225
diff changeset
   125
        if mark is None:
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   126
            raise util.Abort(_("bookmark name required"))
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   127
        if mark not in marks:
7251
444d88175e33 bookmarks: Fix spelling and grammar
Joel Rosdahl <joel@rosdahl.net>
parents: 7250
diff changeset
   128
            raise util.Abort(_("a bookmark of this name does not exist"))
10107
c03f467423f3 bookmarks: repo._bookmarkcurrent should be a propertycache
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10106
diff changeset
   129
        if mark == repo._bookmarkcurrent:
7817
cb516e788238 bookmarks: fixes bug where a deleted bookmark may still be treated as current when track.current option is set
Alex Unden <alu@zpuppet.org>
parents: 7816
diff changeset
   130
            setcurrent(repo, None)
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   131
        del marks[mark]
10106
cb3f6da91646 bookmarks: write() can simply access repo._bookmarks
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10105
diff changeset
   132
        write(repo)
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   133
        return
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   134
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   135
    if mark != None:
7259
18c23375861f bookmarks: Correctly reject newlines in bookmark names
Joel Rosdahl <joel@rosdahl.net>
parents: 7258
diff changeset
   136
        if "\n" in mark:
18c23375861f bookmarks: Correctly reject newlines in bookmark names
Joel Rosdahl <joel@rosdahl.net>
parents: 7258
diff changeset
   137
            raise util.Abort(_("bookmark name cannot contain newlines"))
7260
eb91b9ce2c19 bookmarks: Strip bookmark names of whitespace, just like tag names
Joel Rosdahl <joel@rosdahl.net>
parents: 7259
diff changeset
   138
        mark = mark.strip()
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   139
        if mark in marks and not force:
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   140
            raise util.Abort(_("a bookmark of the same name already exists"))
7250
352627bcafc3 bookmarks: Remove trailing space
Joel Rosdahl <joel@rosdahl.net>
parents: 7239
diff changeset
   141
        if ((mark in repo.branchtags() or mark == repo.dirstate.branch())
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   142
            and not force):
7252
104a8324798e bookmarks: Avoid long lines
Joel Rosdahl <joel@rosdahl.net>
parents: 7251
diff changeset
   143
            raise util.Abort(
104a8324798e bookmarks: Avoid long lines
Joel Rosdahl <joel@rosdahl.net>
parents: 7251
diff changeset
   144
                _("a bookmark cannot have the name of an existing branch"))
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   145
        if rev:
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   146
            marks[mark] = repo.lookup(rev)
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   147
        else:
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   148
            marks[mark] = repo.changectx('.').node()
7816
f420eafe59cd bookmarks: Set current bookmark if we create a new one on the tip
David Soria Parra <dsp@php.net>
parents: 7795
diff changeset
   149
            setcurrent(repo, mark)
10106
cb3f6da91646 bookmarks: write() can simply access repo._bookmarks
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10105
diff changeset
   150
        write(repo)
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   151
        return
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   152
8527
f9a80054dd3c use 'x is None' instead of 'x == None'
Martin Geisler <mg@lazybytes.net>
parents: 8225
diff changeset
   153
    if mark is None:
7258
9bd051efbdd6 bookmarks: Require a bookmark name when a revision is specified
Joel Rosdahl <joel@rosdahl.net>
parents: 7257
diff changeset
   154
        if rev:
9bd051efbdd6 bookmarks: Require a bookmark name when a revision is specified
Joel Rosdahl <joel@rosdahl.net>
parents: 7257
diff changeset
   155
            raise util.Abort(_("bookmark name required"))
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   156
        if len(marks) == 0:
10510
f77f3383c666 i18n: mark more strings for translation
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10463
diff changeset
   157
            ui.status(_("no bookmarks set\n"))
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   158
        else:
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   159
            for bmark, n in marks.iteritems():
7481
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   160
                if ui.configbool('bookmarks', 'track.current'):
10107
c03f467423f3 bookmarks: repo._bookmarkcurrent should be a propertycache
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10106
diff changeset
   161
                    current = repo._bookmarkcurrent
10820
da809085bc9f bookmark: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10597
diff changeset
   162
                    if bmark == current and n == cur:
da809085bc9f bookmark: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10597
diff changeset
   163
                        prefix, label = '*', 'bookmarks.current'
da809085bc9f bookmark: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10597
diff changeset
   164
                    else:
da809085bc9f bookmark: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10597
diff changeset
   165
                        prefix, label = ' ', ''
7481
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   166
                else:
10820
da809085bc9f bookmark: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10597
diff changeset
   167
                    if n == cur:
da809085bc9f bookmark: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10597
diff changeset
   168
                        prefix, label = '*', 'bookmarks.current'
da809085bc9f bookmark: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10597
diff changeset
   169
                    else:
da809085bc9f bookmark: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10597
diff changeset
   170
                        prefix, label = ' ', ''
7481
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   171
9459
3b283adcc720 bookmarks: support --quiet
Steve Losh <steve@stevelosh.com>
parents: 9282
diff changeset
   172
                if ui.quiet:
10820
da809085bc9f bookmark: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10597
diff changeset
   173
                    ui.write("%s\n" % bmark, label=label)
9459
3b283adcc720 bookmarks: support --quiet
Steve Losh <steve@stevelosh.com>
parents: 9282
diff changeset
   174
                else:
3b283adcc720 bookmarks: support --quiet
Steve Losh <steve@stevelosh.com>
parents: 9282
diff changeset
   175
                    ui.write(" %s %-25s %d:%s\n" % (
10820
da809085bc9f bookmark: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10597
diff changeset
   176
                        prefix, bmark, repo.changelog.rev(n), hexfn(n)),
da809085bc9f bookmark: make use of output labeling
Brodie Rao <brodie@bitheap.org>
parents: 10597
diff changeset
   177
                        label=label)
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   178
        return
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   179
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   180
def _revstostrip(changelog, node):
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   181
    srev = changelog.rev(node)
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   182
    tostrip = [srev]
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   183
    saveheads = []
7283
b19c0200c90b bookmarks: fix strip handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 7280
diff changeset
   184
    for r in xrange(srev, len(changelog)):
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   185
        parents = changelog.parentrevs(r)
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   186
        if parents[0] in tostrip or parents[1] in tostrip:
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   187
            tostrip.append(r)
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   188
            if parents[1] != nullrev:
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   189
                for p in parents:
7283
b19c0200c90b bookmarks: fix strip handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 7280
diff changeset
   190
                    if p not in tostrip and p > srev:
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   191
                        saveheads.append(p)
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   192
    return [r for r in tostrip if r not in saveheads]
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   193
7638
f83a2b1d1a71 bookmarks; clean up imports and function wrapping
Matt Mackall <mpm@selenic.com>
parents: 7637
diff changeset
   194
def strip(oldstrip, ui, repo, node, backup="all"):
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   195
    """Strip bookmarks if revisions are stripped using
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   196
    the mercurial.strip method. This usually happens during
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   197
    qpush and qpop"""
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   198
    revisions = _revstostrip(repo.changelog, node)
10105
dc5b5cc5ca34 bookmarks: turn repo._bookmarks into a propertycache
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 9643
diff changeset
   199
    marks = repo._bookmarks
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   200
    update = []
7622
4dd7b28003d2 use dict.iteritems() rather than dict.items()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7552
diff changeset
   201
    for mark, n in marks.iteritems():
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   202
        if repo.changelog.rev(n) in revisions:
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   203
            update.append(mark)
7280
810ca383da9c remove unused variables
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 7262
diff changeset
   204
    oldstrip(ui, repo, node, backup)
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   205
    if len(update) > 0:
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   206
        for m in update:
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   207
            marks[m] = repo.changectx('.').node()
10106
cb3f6da91646 bookmarks: write() can simply access repo._bookmarks
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10105
diff changeset
   208
        write(repo)
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   209
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   210
def reposetup(ui, repo):
9643
013cc052a926 bookmarks: use API to determine if repo is local
Alexander Solovyov <piranha@piranha.org.ua>
parents: 9459
diff changeset
   211
    if not repo.local():
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   212
        return
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   213
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   214
    class bookmark_repo(repo.__class__):
10105
dc5b5cc5ca34 bookmarks: turn repo._bookmarks into a propertycache
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 9643
diff changeset
   215
dc5b5cc5ca34 bookmarks: turn repo._bookmarks into a propertycache
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 9643
diff changeset
   216
        @util.propertycache
dc5b5cc5ca34 bookmarks: turn repo._bookmarks into a propertycache
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 9643
diff changeset
   217
        def _bookmarks(self):
10109
be041d6714ed bookmarks: move parse() and current() into property definitions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10108
diff changeset
   218
            '''Parse .hg/bookmarks file and return a dictionary
be041d6714ed bookmarks: move parse() and current() into property definitions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10108
diff changeset
   219
be041d6714ed bookmarks: move parse() and current() into property definitions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10108
diff changeset
   220
            Bookmarks are stored as {HASH}\\s{NAME}\\n (localtags format) values
be041d6714ed bookmarks: move parse() and current() into property definitions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10108
diff changeset
   221
            in the .hg/bookmarks file. They are read returned as a dictionary
be041d6714ed bookmarks: move parse() and current() into property definitions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10108
diff changeset
   222
            with name => hash values.
be041d6714ed bookmarks: move parse() and current() into property definitions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10108
diff changeset
   223
            '''
be041d6714ed bookmarks: move parse() and current() into property definitions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10108
diff changeset
   224
            try:
be041d6714ed bookmarks: move parse() and current() into property definitions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10108
diff changeset
   225
                bookmarks = {}
be041d6714ed bookmarks: move parse() and current() into property definitions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10108
diff changeset
   226
                for line in self.opener('bookmarks'):
be041d6714ed bookmarks: move parse() and current() into property definitions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10108
diff changeset
   227
                    sha, refspec = line.strip().split(' ', 1)
be041d6714ed bookmarks: move parse() and current() into property definitions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10108
diff changeset
   228
                    bookmarks[refspec] = super(bookmark_repo, self).lookup(sha)
be041d6714ed bookmarks: move parse() and current() into property definitions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10108
diff changeset
   229
            except:
be041d6714ed bookmarks: move parse() and current() into property definitions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10108
diff changeset
   230
                pass
be041d6714ed bookmarks: move parse() and current() into property definitions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10108
diff changeset
   231
            return bookmarks
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   232
10107
c03f467423f3 bookmarks: repo._bookmarkcurrent should be a propertycache
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10106
diff changeset
   233
        @util.propertycache
c03f467423f3 bookmarks: repo._bookmarkcurrent should be a propertycache
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10106
diff changeset
   234
        def _bookmarkcurrent(self):
10109
be041d6714ed bookmarks: move parse() and current() into property definitions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10108
diff changeset
   235
            '''Get the current bookmark
be041d6714ed bookmarks: move parse() and current() into property definitions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10108
diff changeset
   236
be041d6714ed bookmarks: move parse() and current() into property definitions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10108
diff changeset
   237
            If we use gittishsh branches we have a current bookmark that
be041d6714ed bookmarks: move parse() and current() into property definitions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10108
diff changeset
   238
            we are on. This function returns the name of the bookmark. It
be041d6714ed bookmarks: move parse() and current() into property definitions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10108
diff changeset
   239
            is stored in .hg/bookmarks.current
be041d6714ed bookmarks: move parse() and current() into property definitions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10108
diff changeset
   240
            '''
be041d6714ed bookmarks: move parse() and current() into property definitions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10108
diff changeset
   241
            mark = None
be041d6714ed bookmarks: move parse() and current() into property definitions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10108
diff changeset
   242
            if os.path.exists(self.join('bookmarks.current')):
be041d6714ed bookmarks: move parse() and current() into property definitions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10108
diff changeset
   243
                file = self.opener('bookmarks.current')
be041d6714ed bookmarks: move parse() and current() into property definitions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10108
diff changeset
   244
                # No readline() in posixfile_nt, reading everything is cheap
be041d6714ed bookmarks: move parse() and current() into property definitions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10108
diff changeset
   245
                mark = (file.readlines() or [''])[0]
be041d6714ed bookmarks: move parse() and current() into property definitions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10108
diff changeset
   246
                if mark == '':
be041d6714ed bookmarks: move parse() and current() into property definitions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10108
diff changeset
   247
                    mark = None
be041d6714ed bookmarks: move parse() and current() into property definitions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10108
diff changeset
   248
                file.close()
be041d6714ed bookmarks: move parse() and current() into property definitions
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10108
diff changeset
   249
            return mark
10107
c03f467423f3 bookmarks: repo._bookmarkcurrent should be a propertycache
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10106
diff changeset
   250
10882
f0bfe42c7b1f rollback: add dry-run argument, emit transaction description
Steve Borho <steve@borho.org>
parents: 10826
diff changeset
   251
        def rollback(self, *args):
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   252
            if os.path.exists(self.join('undo.bookmarks')):
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   253
                util.rename(self.join('undo.bookmarks'), self.join('bookmarks'))
10882
f0bfe42c7b1f rollback: add dry-run argument, emit transaction description
Steve Borho <steve@borho.org>
parents: 10826
diff changeset
   254
            return super(bookmark_repo, self).rollback(*args)
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   255
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   256
        def lookup(self, key):
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   257
            if key in self._bookmarks:
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   258
                key = self._bookmarks[key]
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   259
            return super(bookmark_repo, self).lookup(key)
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   260
10108
b6fcb5c55884 bookmarks: refactor code responsible for updates of bookmarks
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10107
diff changeset
   261
        def _bookmarksupdate(self, parents, node):
10105
dc5b5cc5ca34 bookmarks: turn repo._bookmarks into a propertycache
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 9643
diff changeset
   262
            marks = self._bookmarks
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   263
            update = False
9236
a15b0412de06 bookmarks: Teach addchangset to respect track.current
David Soria Parra <dsp@php.net>
parents: 9235
diff changeset
   264
            if ui.configbool('bookmarks', 'track.current'):
10107
c03f467423f3 bookmarks: repo._bookmarkcurrent should be a propertycache
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10106
diff changeset
   265
                mark = self._bookmarkcurrent
9236
a15b0412de06 bookmarks: Teach addchangset to respect track.current
David Soria Parra <dsp@php.net>
parents: 9235
diff changeset
   266
                if mark and marks[mark] in parents:
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   267
                    marks[mark] = node
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   268
                    update = True
9236
a15b0412de06 bookmarks: Teach addchangset to respect track.current
David Soria Parra <dsp@php.net>
parents: 9235
diff changeset
   269
            else:
a15b0412de06 bookmarks: Teach addchangset to respect track.current
David Soria Parra <dsp@php.net>
parents: 9235
diff changeset
   270
                for mark, n in marks.items():
a15b0412de06 bookmarks: Teach addchangset to respect track.current
David Soria Parra <dsp@php.net>
parents: 9235
diff changeset
   271
                    if n in parents:
a15b0412de06 bookmarks: Teach addchangset to respect track.current
David Soria Parra <dsp@php.net>
parents: 9235
diff changeset
   272
                        marks[mark] = node
a15b0412de06 bookmarks: Teach addchangset to respect track.current
David Soria Parra <dsp@php.net>
parents: 9235
diff changeset
   273
                        update = True
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   274
            if update:
10106
cb3f6da91646 bookmarks: write() can simply access repo._bookmarks
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10105
diff changeset
   275
                write(self)
10108
b6fcb5c55884 bookmarks: refactor code responsible for updates of bookmarks
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10107
diff changeset
   276
9235
dde454349864 bookmarks: Wrap commictx instead of commit (issue 1515)
David Soria Parra <dsp@php.net>
parents: 9202
diff changeset
   277
        def commitctx(self, ctx, error=False):
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   278
            """Add a revision to the repository and
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   279
            move the bookmark"""
8862
cd96f159a2d3 bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents: 8762
diff changeset
   280
            wlock = self.wlock() # do both commit and bookmark with lock held
cd96f159a2d3 bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents: 8762
diff changeset
   281
            try:
9235
dde454349864 bookmarks: Wrap commictx instead of commit (issue 1515)
David Soria Parra <dsp@php.net>
parents: 9202
diff changeset
   282
                node  = super(bookmark_repo, self).commitctx(ctx, error)
8862
cd96f159a2d3 bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents: 8762
diff changeset
   283
                if node is None:
cd96f159a2d3 bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents: 8762
diff changeset
   284
                    return None
8944
dda4ad7c9ea9 bookmarks: Change references to "repo" by references to "self" (issue1611)
Isaac Jurado <diptongo@gmail.com>
parents: 8894
diff changeset
   285
                parents = self.changelog.parents(node)
8862
cd96f159a2d3 bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents: 8762
diff changeset
   286
                if parents[1] == nullid:
cd96f159a2d3 bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents: 8762
diff changeset
   287
                    parents = (parents[0],)
10108
b6fcb5c55884 bookmarks: refactor code responsible for updates of bookmarks
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10107
diff changeset
   288
b6fcb5c55884 bookmarks: refactor code responsible for updates of bookmarks
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10107
diff changeset
   289
                self._bookmarksupdate(parents, node)
8862
cd96f159a2d3 bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents: 8762
diff changeset
   290
                return node
cd96f159a2d3 bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents: 8762
diff changeset
   291
            finally:
cd96f159a2d3 bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents: 8762
diff changeset
   292
                wlock.release()
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   293
11373
306fef8440af bookmarks: pull known bookmarks from server that are newer
Matt Mackall <mpm@selenic.com>
parents: 11372
diff changeset
   294
        def pull(self, remote, heads=None, force=False):
306fef8440af bookmarks: pull known bookmarks from server that are newer
Matt Mackall <mpm@selenic.com>
parents: 11372
diff changeset
   295
            result = super(bookmark_repo, self).pull(remote, heads, force)
306fef8440af bookmarks: pull known bookmarks from server that are newer
Matt Mackall <mpm@selenic.com>
parents: 11372
diff changeset
   296
306fef8440af bookmarks: pull known bookmarks from server that are newer
Matt Mackall <mpm@selenic.com>
parents: 11372
diff changeset
   297
            self.ui.debug("checking for updated bookmarks\n")
306fef8440af bookmarks: pull known bookmarks from server that are newer
Matt Mackall <mpm@selenic.com>
parents: 11372
diff changeset
   298
            rb = remote.listkeys('bookmarks')
306fef8440af bookmarks: pull known bookmarks from server that are newer
Matt Mackall <mpm@selenic.com>
parents: 11372
diff changeset
   299
            changes = 0
306fef8440af bookmarks: pull known bookmarks from server that are newer
Matt Mackall <mpm@selenic.com>
parents: 11372
diff changeset
   300
            for k in rb.keys():
306fef8440af bookmarks: pull known bookmarks from server that are newer
Matt Mackall <mpm@selenic.com>
parents: 11372
diff changeset
   301
                if k in self._bookmarks:
306fef8440af bookmarks: pull known bookmarks from server that are newer
Matt Mackall <mpm@selenic.com>
parents: 11372
diff changeset
   302
                    nr, nl = rb[k], self._bookmarks[k]
306fef8440af bookmarks: pull known bookmarks from server that are newer
Matt Mackall <mpm@selenic.com>
parents: 11372
diff changeset
   303
                    if nr in self:
306fef8440af bookmarks: pull known bookmarks from server that are newer
Matt Mackall <mpm@selenic.com>
parents: 11372
diff changeset
   304
                        cr = self[nr]
306fef8440af bookmarks: pull known bookmarks from server that are newer
Matt Mackall <mpm@selenic.com>
parents: 11372
diff changeset
   305
                        cl = self[nl]
306fef8440af bookmarks: pull known bookmarks from server that are newer
Matt Mackall <mpm@selenic.com>
parents: 11372
diff changeset
   306
                        if cl.rev() >= cr.rev():
306fef8440af bookmarks: pull known bookmarks from server that are newer
Matt Mackall <mpm@selenic.com>
parents: 11372
diff changeset
   307
                            continue
306fef8440af bookmarks: pull known bookmarks from server that are newer
Matt Mackall <mpm@selenic.com>
parents: 11372
diff changeset
   308
                        if cr in cl.descendants():
306fef8440af bookmarks: pull known bookmarks from server that are newer
Matt Mackall <mpm@selenic.com>
parents: 11372
diff changeset
   309
                            self._bookmarks[k] = cr.node()
306fef8440af bookmarks: pull known bookmarks from server that are newer
Matt Mackall <mpm@selenic.com>
parents: 11372
diff changeset
   310
                            changes += 1
306fef8440af bookmarks: pull known bookmarks from server that are newer
Matt Mackall <mpm@selenic.com>
parents: 11372
diff changeset
   311
                            self.ui.status(_("updating bookmark %s\n") % k)
306fef8440af bookmarks: pull known bookmarks from server that are newer
Matt Mackall <mpm@selenic.com>
parents: 11372
diff changeset
   312
                        else:
306fef8440af bookmarks: pull known bookmarks from server that are newer
Matt Mackall <mpm@selenic.com>
parents: 11372
diff changeset
   313
                            self.ui.warn(_("not updating divergent"
306fef8440af bookmarks: pull known bookmarks from server that are newer
Matt Mackall <mpm@selenic.com>
parents: 11372
diff changeset
   314
                                           " bookmark %s\n") % k)
306fef8440af bookmarks: pull known bookmarks from server that are newer
Matt Mackall <mpm@selenic.com>
parents: 11372
diff changeset
   315
            if changes:
306fef8440af bookmarks: pull known bookmarks from server that are newer
Matt Mackall <mpm@selenic.com>
parents: 11372
diff changeset
   316
                write(repo)
306fef8440af bookmarks: pull known bookmarks from server that are newer
Matt Mackall <mpm@selenic.com>
parents: 11372
diff changeset
   317
306fef8440af bookmarks: pull known bookmarks from server that are newer
Matt Mackall <mpm@selenic.com>
parents: 11372
diff changeset
   318
            return result
306fef8440af bookmarks: pull known bookmarks from server that are newer
Matt Mackall <mpm@selenic.com>
parents: 11372
diff changeset
   319
11374
e291c039d8ec bookmarks: update known bookmarks on the target on push
Matt Mackall <mpm@selenic.com>
parents: 11373
diff changeset
   320
        def push(self, remote, force=False, revs=None, newbranch=False):
e291c039d8ec bookmarks: update known bookmarks on the target on push
Matt Mackall <mpm@selenic.com>
parents: 11373
diff changeset
   321
            result = super(bookmark_repo, self).push(remote, force, revs,
e291c039d8ec bookmarks: update known bookmarks on the target on push
Matt Mackall <mpm@selenic.com>
parents: 11373
diff changeset
   322
                                                     newbranch)
e291c039d8ec bookmarks: update known bookmarks on the target on push
Matt Mackall <mpm@selenic.com>
parents: 11373
diff changeset
   323
e291c039d8ec bookmarks: update known bookmarks on the target on push
Matt Mackall <mpm@selenic.com>
parents: 11373
diff changeset
   324
            self.ui.debug("checking for updated bookmarks\n")
e291c039d8ec bookmarks: update known bookmarks on the target on push
Matt Mackall <mpm@selenic.com>
parents: 11373
diff changeset
   325
            rb = remote.listkeys('bookmarks')
e291c039d8ec bookmarks: update known bookmarks on the target on push
Matt Mackall <mpm@selenic.com>
parents: 11373
diff changeset
   326
            for k in rb.keys():
e291c039d8ec bookmarks: update known bookmarks on the target on push
Matt Mackall <mpm@selenic.com>
parents: 11373
diff changeset
   327
                if k in self._bookmarks:
e291c039d8ec bookmarks: update known bookmarks on the target on push
Matt Mackall <mpm@selenic.com>
parents: 11373
diff changeset
   328
                    nr, nl = rb[k], self._bookmarks[k]
e291c039d8ec bookmarks: update known bookmarks on the target on push
Matt Mackall <mpm@selenic.com>
parents: 11373
diff changeset
   329
                    if nr in self:
e291c039d8ec bookmarks: update known bookmarks on the target on push
Matt Mackall <mpm@selenic.com>
parents: 11373
diff changeset
   330
                        cr = self[nr]
e291c039d8ec bookmarks: update known bookmarks on the target on push
Matt Mackall <mpm@selenic.com>
parents: 11373
diff changeset
   331
                        cl = self[nl]
e291c039d8ec bookmarks: update known bookmarks on the target on push
Matt Mackall <mpm@selenic.com>
parents: 11373
diff changeset
   332
                        if cl in cr.descendants():
e291c039d8ec bookmarks: update known bookmarks on the target on push
Matt Mackall <mpm@selenic.com>
parents: 11373
diff changeset
   333
                            r = remote.pushkey('bookmarks', k, nr, nl)
e291c039d8ec bookmarks: update known bookmarks on the target on push
Matt Mackall <mpm@selenic.com>
parents: 11373
diff changeset
   334
                            if r:
e291c039d8ec bookmarks: update known bookmarks on the target on push
Matt Mackall <mpm@selenic.com>
parents: 11373
diff changeset
   335
                                self.ui.status(_("updating bookmark %s\n") % k)
e291c039d8ec bookmarks: update known bookmarks on the target on push
Matt Mackall <mpm@selenic.com>
parents: 11373
diff changeset
   336
                            else:
11434
86eea1f97eac bookmarks: Use error message consistently
David Soria Parra <dsp@php.net>
parents: 11431
diff changeset
   337
                                self.ui.warn(_('updating bookmark %s'
86eea1f97eac bookmarks: Use error message consistently
David Soria Parra <dsp@php.net>
parents: 11431
diff changeset
   338
                                               ' failed!\n') % k)
11374
e291c039d8ec bookmarks: update known bookmarks on the target on push
Matt Mackall <mpm@selenic.com>
parents: 11373
diff changeset
   339
e291c039d8ec bookmarks: update known bookmarks on the target on push
Matt Mackall <mpm@selenic.com>
parents: 11373
diff changeset
   340
            return result
e291c039d8ec bookmarks: update known bookmarks on the target on push
Matt Mackall <mpm@selenic.com>
parents: 11373
diff changeset
   341
11442
ee1ed6afac21 addchangegroup: pass in lock to release it before changegroup hook is called
Matt Mackall <mpm@selenic.com>
parents: 11440
diff changeset
   342
        def addchangegroup(self, *args, **kwargs):
8944
dda4ad7c9ea9 bookmarks: Change references to "repo" by references to "self" (issue1611)
Isaac Jurado <diptongo@gmail.com>
parents: 8894
diff changeset
   343
            parents = self.dirstate.parents()
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   344
11442
ee1ed6afac21 addchangegroup: pass in lock to release it before changegroup hook is called
Matt Mackall <mpm@selenic.com>
parents: 11440
diff changeset
   345
            result = super(bookmark_repo, self).addchangegroup(*args, **kwargs)
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   346
            if result > 1:
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   347
                # We have more heads than before
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   348
                return result
8944
dda4ad7c9ea9 bookmarks: Change references to "repo" by references to "self" (issue1611)
Isaac Jurado <diptongo@gmail.com>
parents: 8894
diff changeset
   349
            node = self.changelog.tip()
10108
b6fcb5c55884 bookmarks: refactor code responsible for updates of bookmarks
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10107
diff changeset
   350
b6fcb5c55884 bookmarks: refactor code responsible for updates of bookmarks
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10107
diff changeset
   351
            self._bookmarksupdate(parents, node)
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   352
            return result
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   353
9145
6b03f93b8ff3 localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9053
diff changeset
   354
        def _findtags(self):
7480
31f70804f1b1 bookmarks: Include bookmarks in tags.
Martin Geisler <mg...@daimi.au.dk>
parents: 7479
diff changeset
   355
            """Merge bookmarks with normal tags"""
9145
6b03f93b8ff3 localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9053
diff changeset
   356
            (tags, tagtypes) = super(bookmark_repo, self)._findtags()
10105
dc5b5cc5ca34 bookmarks: turn repo._bookmarks into a propertycache
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 9643
diff changeset
   357
            tags.update(self._bookmarks)
9145
6b03f93b8ff3 localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9053
diff changeset
   358
            return (tags, tagtypes)
7480
31f70804f1b1 bookmarks: Include bookmarks in tags.
Martin Geisler <mg...@daimi.au.dk>
parents: 7479
diff changeset
   359
10597
153d688cdd06 bookmarks: add invalidate() to bookmark_repo
Paul Molodowitch <pm@stanfordalumni.org>
parents: 10510
diff changeset
   360
        if hasattr(repo, 'invalidate'):
153d688cdd06 bookmarks: add invalidate() to bookmark_repo
Paul Molodowitch <pm@stanfordalumni.org>
parents: 10510
diff changeset
   361
            def invalidate(self):
153d688cdd06 bookmarks: add invalidate() to bookmark_repo
Paul Molodowitch <pm@stanfordalumni.org>
parents: 10510
diff changeset
   362
                super(bookmark_repo, self).invalidate()
153d688cdd06 bookmarks: add invalidate() to bookmark_repo
Paul Molodowitch <pm@stanfordalumni.org>
parents: 10510
diff changeset
   363
                for attr in ('_bookmarks', '_bookmarkcurrent'):
153d688cdd06 bookmarks: add invalidate() to bookmark_repo
Paul Molodowitch <pm@stanfordalumni.org>
parents: 10510
diff changeset
   364
                    if attr in self.__dict__:
10956
a156ce543a5b bookmarks: complete the missing references from dda4ad7c9ea9 (issue2121)
Isaac Jurado <diptongo@gmail.com>
parents: 10882
diff changeset
   365
                        delattr(self, attr)
10597
153d688cdd06 bookmarks: add invalidate() to bookmark_repo
Paul Molodowitch <pm@stanfordalumni.org>
parents: 10510
diff changeset
   366
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   367
    repo.__class__ = bookmark_repo
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   368
11372
735f2d561747 bookmarks: add pushkey server-side support
Matt Mackall <mpm@selenic.com>
parents: 11321
diff changeset
   369
def listbookmarks(repo):
735f2d561747 bookmarks: add pushkey server-side support
Matt Mackall <mpm@selenic.com>
parents: 11321
diff changeset
   370
    d = {}
735f2d561747 bookmarks: add pushkey server-side support
Matt Mackall <mpm@selenic.com>
parents: 11321
diff changeset
   371
    for k, v in repo._bookmarks.iteritems():
735f2d561747 bookmarks: add pushkey server-side support
Matt Mackall <mpm@selenic.com>
parents: 11321
diff changeset
   372
        d[k] = hex(v)
735f2d561747 bookmarks: add pushkey server-side support
Matt Mackall <mpm@selenic.com>
parents: 11321
diff changeset
   373
    return d
735f2d561747 bookmarks: add pushkey server-side support
Matt Mackall <mpm@selenic.com>
parents: 11321
diff changeset
   374
735f2d561747 bookmarks: add pushkey server-side support
Matt Mackall <mpm@selenic.com>
parents: 11321
diff changeset
   375
def pushbookmark(repo, key, old, new):
735f2d561747 bookmarks: add pushkey server-side support
Matt Mackall <mpm@selenic.com>
parents: 11321
diff changeset
   376
    w = repo.wlock()
735f2d561747 bookmarks: add pushkey server-side support
Matt Mackall <mpm@selenic.com>
parents: 11321
diff changeset
   377
    try:
735f2d561747 bookmarks: add pushkey server-side support
Matt Mackall <mpm@selenic.com>
parents: 11321
diff changeset
   378
        marks = repo._bookmarks
735f2d561747 bookmarks: add pushkey server-side support
Matt Mackall <mpm@selenic.com>
parents: 11321
diff changeset
   379
        if hex(marks.get(key, '')) != old:
735f2d561747 bookmarks: add pushkey server-side support
Matt Mackall <mpm@selenic.com>
parents: 11321
diff changeset
   380
            return False
735f2d561747 bookmarks: add pushkey server-side support
Matt Mackall <mpm@selenic.com>
parents: 11321
diff changeset
   381
        if new == '':
735f2d561747 bookmarks: add pushkey server-side support
Matt Mackall <mpm@selenic.com>
parents: 11321
diff changeset
   382
            del marks[key]
735f2d561747 bookmarks: add pushkey server-side support
Matt Mackall <mpm@selenic.com>
parents: 11321
diff changeset
   383
        else:
735f2d561747 bookmarks: add pushkey server-side support
Matt Mackall <mpm@selenic.com>
parents: 11321
diff changeset
   384
            if new not in repo:
735f2d561747 bookmarks: add pushkey server-side support
Matt Mackall <mpm@selenic.com>
parents: 11321
diff changeset
   385
                return False
735f2d561747 bookmarks: add pushkey server-side support
Matt Mackall <mpm@selenic.com>
parents: 11321
diff changeset
   386
            marks[key] = repo[new].node()
735f2d561747 bookmarks: add pushkey server-side support
Matt Mackall <mpm@selenic.com>
parents: 11321
diff changeset
   387
        write(repo)
735f2d561747 bookmarks: add pushkey server-side support
Matt Mackall <mpm@selenic.com>
parents: 11321
diff changeset
   388
        return True
735f2d561747 bookmarks: add pushkey server-side support
Matt Mackall <mpm@selenic.com>
parents: 11321
diff changeset
   389
    finally:
735f2d561747 bookmarks: add pushkey server-side support
Matt Mackall <mpm@selenic.com>
parents: 11321
diff changeset
   390
        w.release()
735f2d561747 bookmarks: add pushkey server-side support
Matt Mackall <mpm@selenic.com>
parents: 11321
diff changeset
   391
11378
cb21fb1b55ba bookmarks: add support for pull --bookmark to import remote bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11374
diff changeset
   392
def pull(oldpull, ui, repo, source="default", **opts):
cb21fb1b55ba bookmarks: add support for pull --bookmark to import remote bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11374
diff changeset
   393
    # translate bookmark args to rev args for actual pull
cb21fb1b55ba bookmarks: add support for pull --bookmark to import remote bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11374
diff changeset
   394
    if opts.get('bookmark'):
cb21fb1b55ba bookmarks: add support for pull --bookmark to import remote bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11374
diff changeset
   395
        # this is an unpleasant hack as pull will do this internally
cb21fb1b55ba bookmarks: add support for pull --bookmark to import remote bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11374
diff changeset
   396
        source, branches = hg.parseurl(ui.expandpath(source),
cb21fb1b55ba bookmarks: add support for pull --bookmark to import remote bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11374
diff changeset
   397
                                       opts.get('branch'))
cb21fb1b55ba bookmarks: add support for pull --bookmark to import remote bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11374
diff changeset
   398
        other = hg.repository(hg.remoteui(repo, opts), source)
cb21fb1b55ba bookmarks: add support for pull --bookmark to import remote bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11374
diff changeset
   399
        rb = other.listkeys('bookmarks')
cb21fb1b55ba bookmarks: add support for pull --bookmark to import remote bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11374
diff changeset
   400
cb21fb1b55ba bookmarks: add support for pull --bookmark to import remote bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11374
diff changeset
   401
        for b in opts['bookmark']:
cb21fb1b55ba bookmarks: add support for pull --bookmark to import remote bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11374
diff changeset
   402
            if b not in rb:
cb21fb1b55ba bookmarks: add support for pull --bookmark to import remote bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11374
diff changeset
   403
                raise util.Abort(_('remote bookmark %s not found!') % b)
cb21fb1b55ba bookmarks: add support for pull --bookmark to import remote bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11374
diff changeset
   404
            opts.setdefault('rev', []).append(b)
cb21fb1b55ba bookmarks: add support for pull --bookmark to import remote bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11374
diff changeset
   405
cb21fb1b55ba bookmarks: add support for pull --bookmark to import remote bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11374
diff changeset
   406
    result = oldpull(ui, repo, source, **opts)
cb21fb1b55ba bookmarks: add support for pull --bookmark to import remote bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11374
diff changeset
   407
cb21fb1b55ba bookmarks: add support for pull --bookmark to import remote bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11374
diff changeset
   408
    # update specified bookmarks
cb21fb1b55ba bookmarks: add support for pull --bookmark to import remote bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11374
diff changeset
   409
    if opts.get('bookmark'):
cb21fb1b55ba bookmarks: add support for pull --bookmark to import remote bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11374
diff changeset
   410
        for b in opts['bookmark']:
cb21fb1b55ba bookmarks: add support for pull --bookmark to import remote bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11374
diff changeset
   411
            # explicit pull overrides local bookmark if any
cb21fb1b55ba bookmarks: add support for pull --bookmark to import remote bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11374
diff changeset
   412
            ui.status(_("importing bookmark %s\n") % b)
cb21fb1b55ba bookmarks: add support for pull --bookmark to import remote bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11374
diff changeset
   413
            repo._bookmarks[b] = repo[rb[b]].node()
cb21fb1b55ba bookmarks: add support for pull --bookmark to import remote bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11374
diff changeset
   414
        write(repo)
cb21fb1b55ba bookmarks: add support for pull --bookmark to import remote bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11374
diff changeset
   415
cb21fb1b55ba bookmarks: add support for pull --bookmark to import remote bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11374
diff changeset
   416
    return result
cb21fb1b55ba bookmarks: add support for pull --bookmark to import remote bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11374
diff changeset
   417
11379
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   418
def push(oldpush, ui, repo, dest=None, **opts):
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   419
    dopush = True
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   420
    if opts.get('bookmark'):
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   421
        dopush = False
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   422
        for b in opts['bookmark']:
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   423
            if b in repo._bookmarks:
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   424
                dopush = True
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   425
                opts.setdefault('rev', []).append(b)
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   426
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   427
    result = 0
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   428
    if dopush:
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   429
        result = oldpush(ui, repo, dest, **opts)
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   430
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   431
    if opts.get('bookmark'):
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   432
        # this is an unpleasant hack as push will do this internally
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   433
        dest = ui.expandpath(dest or 'default-push', dest or 'default')
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   434
        dest, branches = hg.parseurl(dest, opts.get('branch'))
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   435
        other = hg.repository(hg.remoteui(repo, opts), dest)
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   436
        rb = other.listkeys('bookmarks')
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   437
        for b in opts['bookmark']:
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   438
            # explicit push overrides remote bookmark if any
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   439
            if b in repo._bookmarks:
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   440
                ui.status(_("exporting bookmark %s\n") % b)
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   441
                new = repo[b].hex()
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   442
            else:
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   443
                ui.status(_("deleting remote bookmark %s\n") % b)
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   444
                new = '' # delete
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   445
            old = rb.get(b, '')
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   446
            r = other.pushkey('bookmarks', b, old, new)
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   447
            if not r:
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   448
                ui.warn(_('updating bookmark %s failed!\n') % b)
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   449
                if not result:
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   450
                    result = 2
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   451
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   452
    return result
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   453
11431
cac256790aa4 bookmarks: Add -B option to incoming/outgoing to compare bookmarks
David Soria Parra <dsp@php.net>
parents: 11379
diff changeset
   454
def diffbookmarks(ui, repo, remote):
cac256790aa4 bookmarks: Add -B option to incoming/outgoing to compare bookmarks
David Soria Parra <dsp@php.net>
parents: 11379
diff changeset
   455
    ui.status(_("searching for changes\n"))
cac256790aa4 bookmarks: Add -B option to incoming/outgoing to compare bookmarks
David Soria Parra <dsp@php.net>
parents: 11379
diff changeset
   456
cac256790aa4 bookmarks: Add -B option to incoming/outgoing to compare bookmarks
David Soria Parra <dsp@php.net>
parents: 11379
diff changeset
   457
    lmarks = repo.listkeys('bookmarks')
cac256790aa4 bookmarks: Add -B option to incoming/outgoing to compare bookmarks
David Soria Parra <dsp@php.net>
parents: 11379
diff changeset
   458
    rmarks = remote.listkeys('bookmarks')
cac256790aa4 bookmarks: Add -B option to incoming/outgoing to compare bookmarks
David Soria Parra <dsp@php.net>
parents: 11379
diff changeset
   459
cac256790aa4 bookmarks: Add -B option to incoming/outgoing to compare bookmarks
David Soria Parra <dsp@php.net>
parents: 11379
diff changeset
   460
    diff = set(rmarks) - set(lmarks)
cac256790aa4 bookmarks: Add -B option to incoming/outgoing to compare bookmarks
David Soria Parra <dsp@php.net>
parents: 11379
diff changeset
   461
    for k in diff:
cac256790aa4 bookmarks: Add -B option to incoming/outgoing to compare bookmarks
David Soria Parra <dsp@php.net>
parents: 11379
diff changeset
   462
        ui.write("   %-25s %s\n" % (k, rmarks[k][:12]))
cac256790aa4 bookmarks: Add -B option to incoming/outgoing to compare bookmarks
David Soria Parra <dsp@php.net>
parents: 11379
diff changeset
   463
cac256790aa4 bookmarks: Add -B option to incoming/outgoing to compare bookmarks
David Soria Parra <dsp@php.net>
parents: 11379
diff changeset
   464
    if len(diff) <= 0:
cac256790aa4 bookmarks: Add -B option to incoming/outgoing to compare bookmarks
David Soria Parra <dsp@php.net>
parents: 11379
diff changeset
   465
        ui.status(_("no changes found\n"))
11444
b9a46acdfe1f bookmarks: fix in/out return values
Matt Mackall <mpm@selenic.com>
parents: 11443
diff changeset
   466
        return 1
b9a46acdfe1f bookmarks: fix in/out return values
Matt Mackall <mpm@selenic.com>
parents: 11443
diff changeset
   467
    return 0
11431
cac256790aa4 bookmarks: Add -B option to incoming/outgoing to compare bookmarks
David Soria Parra <dsp@php.net>
parents: 11379
diff changeset
   468
cac256790aa4 bookmarks: Add -B option to incoming/outgoing to compare bookmarks
David Soria Parra <dsp@php.net>
parents: 11379
diff changeset
   469
def incoming(oldincoming, ui, repo, source="default", **opts):
cac256790aa4 bookmarks: Add -B option to incoming/outgoing to compare bookmarks
David Soria Parra <dsp@php.net>
parents: 11379
diff changeset
   470
    if opts.get('bookmarks'):
cac256790aa4 bookmarks: Add -B option to incoming/outgoing to compare bookmarks
David Soria Parra <dsp@php.net>
parents: 11379
diff changeset
   471
        source, branches = hg.parseurl(ui.expandpath(source), opts.get('branch'))
cac256790aa4 bookmarks: Add -B option to incoming/outgoing to compare bookmarks
David Soria Parra <dsp@php.net>
parents: 11379
diff changeset
   472
        other = hg.repository(hg.remoteui(repo, opts), source)
cac256790aa4 bookmarks: Add -B option to incoming/outgoing to compare bookmarks
David Soria Parra <dsp@php.net>
parents: 11379
diff changeset
   473
        ui.status(_('comparing with %s\n') % url.hidepassword(source))
11444
b9a46acdfe1f bookmarks: fix in/out return values
Matt Mackall <mpm@selenic.com>
parents: 11443
diff changeset
   474
        return diffbookmarks(ui, repo, other)
11431
cac256790aa4 bookmarks: Add -B option to incoming/outgoing to compare bookmarks
David Soria Parra <dsp@php.net>
parents: 11379
diff changeset
   475
    else:
11444
b9a46acdfe1f bookmarks: fix in/out return values
Matt Mackall <mpm@selenic.com>
parents: 11443
diff changeset
   476
        return oldincoming(ui, repo, source, **opts)
11431
cac256790aa4 bookmarks: Add -B option to incoming/outgoing to compare bookmarks
David Soria Parra <dsp@php.net>
parents: 11379
diff changeset
   477
11443
9e1bc1aafdb1 bookmarks: fix bogus cut and paste for outgoing
Matt Mackall <mpm@selenic.com>
parents: 11442
diff changeset
   478
def outgoing(oldoutgoing, ui, repo, dest=None, **opts):
11431
cac256790aa4 bookmarks: Add -B option to incoming/outgoing to compare bookmarks
David Soria Parra <dsp@php.net>
parents: 11379
diff changeset
   479
    if opts.get('bookmarks'):
11443
9e1bc1aafdb1 bookmarks: fix bogus cut and paste for outgoing
Matt Mackall <mpm@selenic.com>
parents: 11442
diff changeset
   480
        dest = ui.expandpath(dest or 'default-push', dest or 'default')
9e1bc1aafdb1 bookmarks: fix bogus cut and paste for outgoing
Matt Mackall <mpm@selenic.com>
parents: 11442
diff changeset
   481
        dest, branches = hg.parseurl(dest, opts.get('branch'))
9e1bc1aafdb1 bookmarks: fix bogus cut and paste for outgoing
Matt Mackall <mpm@selenic.com>
parents: 11442
diff changeset
   482
        other = hg.repository(hg.remoteui(repo, opts), dest)
9e1bc1aafdb1 bookmarks: fix bogus cut and paste for outgoing
Matt Mackall <mpm@selenic.com>
parents: 11442
diff changeset
   483
        ui.status(_('comparing with %s\n') % url.hidepassword(dest))
11444
b9a46acdfe1f bookmarks: fix in/out return values
Matt Mackall <mpm@selenic.com>
parents: 11443
diff changeset
   484
        return diffbookmarks(ui, other, repo)
11431
cac256790aa4 bookmarks: Add -B option to incoming/outgoing to compare bookmarks
David Soria Parra <dsp@php.net>
parents: 11379
diff changeset
   485
    else:
11444
b9a46acdfe1f bookmarks: fix in/out return values
Matt Mackall <mpm@selenic.com>
parents: 11443
diff changeset
   486
        return oldoutgoing(ui, repo, dest, **opts)
11431
cac256790aa4 bookmarks: Add -B option to incoming/outgoing to compare bookmarks
David Soria Parra <dsp@php.net>
parents: 11379
diff changeset
   487
7638
f83a2b1d1a71 bookmarks; clean up imports and function wrapping
Matt Mackall <mpm@selenic.com>
parents: 7637
diff changeset
   488
def uisetup(ui):
f83a2b1d1a71 bookmarks; clean up imports and function wrapping
Matt Mackall <mpm@selenic.com>
parents: 7637
diff changeset
   489
    extensions.wrapfunction(repair, "strip", strip)
f83a2b1d1a71 bookmarks; clean up imports and function wrapping
Matt Mackall <mpm@selenic.com>
parents: 7637
diff changeset
   490
    if ui.configbool('bookmarks', 'track.current'):
f83a2b1d1a71 bookmarks; clean up imports and function wrapping
Matt Mackall <mpm@selenic.com>
parents: 7637
diff changeset
   491
        extensions.wrapcommand(commands.table, 'update', updatecurbookmark)
11378
cb21fb1b55ba bookmarks: add support for pull --bookmark to import remote bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11374
diff changeset
   492
cb21fb1b55ba bookmarks: add support for pull --bookmark to import remote bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11374
diff changeset
   493
    entry = extensions.wrapcommand(commands.table, 'pull', pull)
cb21fb1b55ba bookmarks: add support for pull --bookmark to import remote bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11374
diff changeset
   494
    entry[1].append(('B', 'bookmark', [],
cb21fb1b55ba bookmarks: add support for pull --bookmark to import remote bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11374
diff changeset
   495
                     _("bookmark to import")))
11379
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   496
    entry = extensions.wrapcommand(commands.table, 'push', push)
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   497
    entry[1].append(('B', 'bookmark', [],
e1a145eebb6a bookmarks: add support for push --bookmark to export bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11378
diff changeset
   498
                     _("bookmark to export")))
11431
cac256790aa4 bookmarks: Add -B option to incoming/outgoing to compare bookmarks
David Soria Parra <dsp@php.net>
parents: 11379
diff changeset
   499
    entry = extensions.wrapcommand(commands.table, 'incoming', incoming)
cac256790aa4 bookmarks: Add -B option to incoming/outgoing to compare bookmarks
David Soria Parra <dsp@php.net>
parents: 11379
diff changeset
   500
    entry[1].append(('B', 'bookmarks', False,
cac256790aa4 bookmarks: Add -B option to incoming/outgoing to compare bookmarks
David Soria Parra <dsp@php.net>
parents: 11379
diff changeset
   501
                     _("compare bookmark")))
cac256790aa4 bookmarks: Add -B option to incoming/outgoing to compare bookmarks
David Soria Parra <dsp@php.net>
parents: 11379
diff changeset
   502
    entry = extensions.wrapcommand(commands.table, 'outgoing', outgoing)
cac256790aa4 bookmarks: Add -B option to incoming/outgoing to compare bookmarks
David Soria Parra <dsp@php.net>
parents: 11379
diff changeset
   503
    entry[1].append(('B', 'bookmarks', False,
cac256790aa4 bookmarks: Add -B option to incoming/outgoing to compare bookmarks
David Soria Parra <dsp@php.net>
parents: 11379
diff changeset
   504
                     _("compare bookmark")))
11378
cb21fb1b55ba bookmarks: add support for pull --bookmark to import remote bookmarks
Matt Mackall <mpm@selenic.com>
parents: 11374
diff changeset
   505
11372
735f2d561747 bookmarks: add pushkey server-side support
Matt Mackall <mpm@selenic.com>
parents: 11321
diff changeset
   506
    pushkey.register('bookmarks', pushbookmark, listbookmarks)
7638
f83a2b1d1a71 bookmarks; clean up imports and function wrapping
Matt Mackall <mpm@selenic.com>
parents: 7637
diff changeset
   507
7481
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   508
def updatecurbookmark(orig, ui, repo, *args, **opts):
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   509
    '''Set the current bookmark
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   510
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   511
    If the user updates to a bookmark we update the .hg/bookmarks.current
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   512
    file.
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   513
    '''
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   514
    res = orig(ui, repo, *args, **opts)
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   515
    rev = opts['rev']
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   516
    if not rev and len(args) > 0:
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   517
        rev = args[0]
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   518
    setcurrent(repo, rev)
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   519
    return res
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   520
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   521
cmdtable = {
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   522
    "bookmarks":
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   523
        (bookmark,
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   524
         [('f', 'force', False, _('force')),
11321
40c06bbf58be help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 11193
diff changeset
   525
          ('r', 'rev', '', _('revision'), _('REV')),
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   526
          ('d', 'delete', False, _('delete a given bookmark')),
11321
40c06bbf58be help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 11193
diff changeset
   527
          ('m', 'rename', '', _('rename a given bookmark'), _('NAME'))],
7818
b6b9065c20b3 bookmarks: change NAME to REV
Benoit Allard <benoit@aeteurope.nl>
parents: 7817
diff changeset
   528
         _('hg bookmarks [-f] [-d] [-m NAME] [-r REV] [NAME]')),
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   529
}
10826
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10820
diff changeset
   530
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10820
diff changeset
   531
colortable = {'bookmarks.current': 'green'}