hgext/bookmarks.py
author David Soria Parra <dsp@php.net>
Thu, 18 Dec 2008 10:51:11 +0100
changeset 7550 fead6cf99a09
parent 7489 9b64589b1112
child 7552 a9221c7f51a4
permissions -rw-r--r--
bookmarks: set the current bookmark to the new name if we rename the current bookmark If we rename the current bookmark, we have to set the current bookmark to the new name.
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
#
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
     5
# This software may be used and distributed according to the terms
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
     6
# of the GNU General Public License, incorporated herein by reference.
7252
104a8324798e bookmarks: Avoid long lines
Joel Rosdahl <joel@rosdahl.net>
parents: 7251
diff changeset
     7
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
     8
'''mercurial bookmarks
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
     9
7252
104a8324798e bookmarks: Avoid long lines
Joel Rosdahl <joel@rosdahl.net>
parents: 7251
diff changeset
    10
Mercurial bookmarks are local moveable pointers to changesets. Every
104a8324798e bookmarks: Avoid long lines
Joel Rosdahl <joel@rosdahl.net>
parents: 7251
diff changeset
    11
bookmark points to a changeset identified by its hash. If you commit a
104a8324798e bookmarks: Avoid long lines
Joel Rosdahl <joel@rosdahl.net>
parents: 7251
diff changeset
    12
changeset that is based on a changeset that has a bookmark on it, the
104a8324798e bookmarks: Avoid long lines
Joel Rosdahl <joel@rosdahl.net>
parents: 7251
diff changeset
    13
bookmark is forwarded to the new changeset.
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    14
7252
104a8324798e bookmarks: Avoid long lines
Joel Rosdahl <joel@rosdahl.net>
parents: 7251
diff changeset
    15
It is possible to use bookmark names in every revision lookup (e.g. hg
104a8324798e bookmarks: Avoid long lines
Joel Rosdahl <joel@rosdahl.net>
parents: 7251
diff changeset
    16
merge, hg update).
7481
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    17
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    18
The bookmark extension offers the possiblity to have a more git-like experience
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    19
by adding the following configuration option to your .hgrc:
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    20
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    21
[bookmarks]
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    22
track.current = True
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    23
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    24
This will cause bookmarks to track the bookmark that you are currently on, and
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    25
just updates it. This is similar to git's approach of branching.
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    26
'''
7252
104a8324798e bookmarks: Avoid long lines
Joel Rosdahl <joel@rosdahl.net>
parents: 7251
diff changeset
    27
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    28
from mercurial.commands import templateopts, hex, short
7478
4c3e0ad58c5b bookmarks: Adds support for a --non-bookmarked option to push
Stefan Rusek <stefan@rusek.org>
parents: 7316
diff changeset
    29
from mercurial import extensions
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    30
from mercurial.i18n import _
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    31
from mercurial import cmdutil, util, commands, changelog
7256
df800e004077 bookmarks: Avoid unconditional forwarding of bookmarks for the null revision
Joel Rosdahl <joel@rosdahl.net>
parents: 7255
diff changeset
    32
from mercurial.node import nullid, nullrev
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    33
from mercurial.repo import RepoError
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    34
import mercurial, mercurial.localrepo, mercurial.repair, os
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    35
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    36
def parse(repo):
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    37
    '''Parse .hg/bookmarks file and return a dictionary
7250
352627bcafc3 bookmarks: Remove trailing space
Joel Rosdahl <joel@rosdahl.net>
parents: 7239
diff changeset
    38
7252
104a8324798e bookmarks: Avoid long lines
Joel Rosdahl <joel@rosdahl.net>
parents: 7251
diff changeset
    39
    Bookmarks are stored as {HASH}\s{NAME}\n (localtags format) values
104a8324798e bookmarks: Avoid long lines
Joel Rosdahl <joel@rosdahl.net>
parents: 7251
diff changeset
    40
    in the .hg/bookmarks file. They are read by the parse() method and
104a8324798e bookmarks: Avoid long lines
Joel Rosdahl <joel@rosdahl.net>
parents: 7251
diff changeset
    41
    returned as a dictionary with name => hash values.
7250
352627bcafc3 bookmarks: Remove trailing space
Joel Rosdahl <joel@rosdahl.net>
parents: 7239
diff changeset
    42
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    43
    The parsed dictionary is cached until a write() operation is done.
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    44
    '''
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    45
    try:
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    46
        if repo._bookmarks:
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    47
            return repo._bookmarks
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    48
        repo._bookmarks = {}
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    49
        for line in repo.opener('bookmarks'):
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    50
            sha, refspec = line.strip().split(' ', 1)
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    51
            repo._bookmarks[refspec] = repo.lookup(sha)
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    52
    except:
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    53
        pass
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    54
    return repo._bookmarks
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    55
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    56
def write(repo, refs):
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    57
    '''Write bookmarks
7250
352627bcafc3 bookmarks: Remove trailing space
Joel Rosdahl <joel@rosdahl.net>
parents: 7239
diff changeset
    58
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    59
    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
    60
    in a format equal to those of localtags.
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    61
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    62
    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
    63
    can be copied back on rollback.
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    64
    '''
7253
8b81d1e2dc04 bookmarks: Only save undo.bookmarks if bookmarks exist
Joel Rosdahl <joel@rosdahl.net>
parents: 7252
diff changeset
    65
    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
    66
        util.copyfile(repo.join('bookmarks'), repo.join('undo.bookmarks'))
7481
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    67
    if current(repo) not in refs:
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    68
        setcurrent(repo, None)
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
    69
    file = repo.opener('bookmarks', 'w+')
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    70
    for refspec, node in refs.items():
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    71
        file.write("%s %s\n" % (hex(node), refspec))
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    72
    file.close()
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
    73
7481
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    74
def current(repo):
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    75
    '''Get the current bookmark
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    76
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    77
    If we use gittishsh branches we have a current bookmark that
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    78
    we are on. This function returns the name of the bookmark. It
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    79
    is stored in .hg/bookmarks.current
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    80
    '''
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    81
    if repo._bookmarkcurrent:
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    82
        return repo._bookmarkcurrent
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    83
    mark = None
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    84
    if os.path.exists(repo.join('bookmarks.current')):
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    85
        file = repo.opener('bookmarks.current')
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    86
        mark = file.readline()
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    87
        if mark == '':
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    88
            mark = None
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    89
        file.close()
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    90
    repo._bookmarkcurrent = mark
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    91
    return mark
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    92
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    93
def setcurrent(repo, mark):
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    94
    '''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
    95
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    96
    Set the name of the bookmark that we are on (hg update <bookmark>).
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    97
    The name is recoreded in .hg/bookmarks.current
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
    98
    '''
7484
167853c7e54a bookmarks: do not overwrite bookmarks.current if not necessary
David Soria Parra <dsp@php.net>
parents: 7483
diff changeset
    99
    if current(repo) == mark:
7481
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   100
        return
7484
167853c7e54a bookmarks: do not overwrite bookmarks.current if not necessary
David Soria Parra <dsp@php.net>
parents: 7483
diff changeset
   101
7481
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   102
    refs = parse(repo)
7484
167853c7e54a bookmarks: do not overwrite bookmarks.current if not necessary
David Soria Parra <dsp@php.net>
parents: 7483
diff changeset
   103
167853c7e54a bookmarks: do not overwrite bookmarks.current if not necessary
David Soria Parra <dsp@php.net>
parents: 7483
diff changeset
   104
    'do not update if we do update to an rev equal to the current bookmark'
167853c7e54a bookmarks: do not overwrite bookmarks.current if not necessary
David Soria Parra <dsp@php.net>
parents: 7483
diff changeset
   105
    if (mark not in refs and
167853c7e54a bookmarks: do not overwrite bookmarks.current if not necessary
David Soria Parra <dsp@php.net>
parents: 7483
diff changeset
   106
        current(repo) and refs[current(repo)] == repo.changectx('.').node()):
167853c7e54a bookmarks: do not overwrite bookmarks.current if not necessary
David Soria Parra <dsp@php.net>
parents: 7483
diff changeset
   107
        return
7481
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   108
    if mark not in refs:
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   109
        mark = ''
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   110
    file = repo.opener('bookmarks.current', 'w+')
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   111
    file.write(mark)
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   112
    file.close()
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   113
    repo._bookmarkcurrent = mark
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   114
7255
69e431ea124d bookmarks: Rename --move to --rename
Joel Rosdahl <joel@rosdahl.net>
parents: 7254
diff changeset
   115
def bookmark(ui, repo, mark=None, rev=None, force=False, delete=False, rename=None):
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   116
    '''mercurial bookmarks
7250
352627bcafc3 bookmarks: Remove trailing space
Joel Rosdahl <joel@rosdahl.net>
parents: 7239
diff changeset
   117
7252
104a8324798e bookmarks: Avoid long lines
Joel Rosdahl <joel@rosdahl.net>
parents: 7251
diff changeset
   118
    Bookmarks are pointers to certain commits that move when
104a8324798e bookmarks: Avoid long lines
Joel Rosdahl <joel@rosdahl.net>
parents: 7251
diff changeset
   119
    commiting. Bookmarks are local. They can be renamed, copied and
104a8324798e bookmarks: Avoid long lines
Joel Rosdahl <joel@rosdahl.net>
parents: 7251
diff changeset
   120
    deleted. It is possible to use bookmark names in 'hg merge' and 'hg
104a8324798e bookmarks: Avoid long lines
Joel Rosdahl <joel@rosdahl.net>
parents: 7251
diff changeset
   121
    update' to update to a given bookmark.
7250
352627bcafc3 bookmarks: Remove trailing space
Joel Rosdahl <joel@rosdahl.net>
parents: 7239
diff changeset
   122
7257
7fb0e130cf14 bookmarks: Improve documentation
Joel Rosdahl <joel@rosdahl.net>
parents: 7256
diff changeset
   123
    You can use 'hg bookmark NAME' to set a bookmark on the current
7fb0e130cf14 bookmarks: Improve documentation
Joel Rosdahl <joel@rosdahl.net>
parents: 7256
diff changeset
   124
    tip with the given name. If you specify a revision using -r REV
7fb0e130cf14 bookmarks: Improve documentation
Joel Rosdahl <joel@rosdahl.net>
parents: 7256
diff changeset
   125
    (where REV may be an existing bookmark), the bookmark is set to
7fb0e130cf14 bookmarks: Improve documentation
Joel Rosdahl <joel@rosdahl.net>
parents: 7256
diff changeset
   126
    that revision.
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   127
    '''
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   128
    hexfn = ui.debugflag and hex or short
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   129
    marks = parse(repo)
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   130
    cur   = repo.changectx('.').node()
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   131
7255
69e431ea124d bookmarks: Rename --move to --rename
Joel Rosdahl <joel@rosdahl.net>
parents: 7254
diff changeset
   132
    if rename:
69e431ea124d bookmarks: Rename --move to --rename
Joel Rosdahl <joel@rosdahl.net>
parents: 7254
diff changeset
   133
        if rename not in marks:
7251
444d88175e33 bookmarks: Fix spelling and grammar
Joel Rosdahl <joel@rosdahl.net>
parents: 7250
diff changeset
   134
            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
   135
        if mark in marks and not force:
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   136
            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
   137
        if mark is None:
d892211d670e bookmarks: Require new bookmark name when renaming
Joel Rosdahl <joel@rosdahl.net>
parents: 7253
diff changeset
   138
            raise util.Abort(_("new bookmark name required"))
7255
69e431ea124d bookmarks: Rename --move to --rename
Joel Rosdahl <joel@rosdahl.net>
parents: 7254
diff changeset
   139
        marks[mark] = marks[rename]
69e431ea124d bookmarks: Rename --move to --rename
Joel Rosdahl <joel@rosdahl.net>
parents: 7254
diff changeset
   140
        del marks[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
   141
        if current(repo) == rename:
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
   142
            setcurrent(repo, mark)
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   143
        write(repo, marks)
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   144
        return
7250
352627bcafc3 bookmarks: Remove trailing space
Joel Rosdahl <joel@rosdahl.net>
parents: 7239
diff changeset
   145
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   146
    if delete:
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   147
        if mark == None:
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   148
            raise util.Abort(_("bookmark name required"))
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   149
        if mark not in marks:
7251
444d88175e33 bookmarks: Fix spelling and grammar
Joel Rosdahl <joel@rosdahl.net>
parents: 7250
diff changeset
   150
            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
   151
        del marks[mark]
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   152
        write(repo, marks)
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   153
        return
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   154
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   155
    if mark != None:
7259
18c23375861f bookmarks: Correctly reject newlines in bookmark names
Joel Rosdahl <joel@rosdahl.net>
parents: 7258
diff changeset
   156
        if "\n" in mark:
18c23375861f bookmarks: Correctly reject newlines in bookmark names
Joel Rosdahl <joel@rosdahl.net>
parents: 7258
diff changeset
   157
            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
   158
        mark = mark.strip()
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   159
        if mark in marks and not force:
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   160
            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
   161
        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
   162
            and not force):
7252
104a8324798e bookmarks: Avoid long lines
Joel Rosdahl <joel@rosdahl.net>
parents: 7251
diff changeset
   163
            raise util.Abort(
104a8324798e bookmarks: Avoid long lines
Joel Rosdahl <joel@rosdahl.net>
parents: 7251
diff changeset
   164
                _("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
   165
        if rev:
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   166
            marks[mark] = repo.lookup(rev)
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   167
        else:
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   168
            marks[mark] = repo.changectx('.').node()
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   169
        write(repo, marks)
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   170
        return
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   171
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   172
    if mark == None:
7258
9bd051efbdd6 bookmarks: Require a bookmark name when a revision is specified
Joel Rosdahl <joel@rosdahl.net>
parents: 7257
diff changeset
   173
        if rev:
9bd051efbdd6 bookmarks: Require a bookmark name when a revision is specified
Joel Rosdahl <joel@rosdahl.net>
parents: 7257
diff changeset
   174
            raise util.Abort(_("bookmark name required"))
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   175
        if len(marks) == 0:
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   176
            ui.status("no bookmarks set\n")
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   177
        else:
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   178
            for bmark, n in marks.iteritems():
7481
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   179
                if ui.configbool('bookmarks', 'track.current'):
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   180
                    prefix = (bmark == current(repo) and n == cur) and '*' or ' '
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   181
                else:
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   182
                    prefix = (n == cur) and '*' or ' '
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   183
7252
104a8324798e bookmarks: Avoid long lines
Joel Rosdahl <joel@rosdahl.net>
parents: 7251
diff changeset
   184
                ui.write(" %s %-25s %d:%s\n" % (
104a8324798e bookmarks: Avoid long lines
Joel Rosdahl <joel@rosdahl.net>
parents: 7251
diff changeset
   185
                    prefix, bmark, repo.changelog.rev(n), hexfn(n)))
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   186
        return
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   187
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   188
def _revstostrip(changelog, node):
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   189
    srev = changelog.rev(node)
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   190
    tostrip = [srev]
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   191
    saveheads = []
7283
b19c0200c90b bookmarks: fix strip handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 7280
diff changeset
   192
    for r in xrange(srev, len(changelog)):
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   193
        parents = changelog.parentrevs(r)
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   194
        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
   195
            tostrip.append(r)
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   196
            if parents[1] != nullrev:
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   197
                for p in parents:
7283
b19c0200c90b bookmarks: fix strip handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 7280
diff changeset
   198
                    if p not in tostrip and p > srev:
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   199
                        saveheads.append(p)
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   200
    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
   201
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   202
def strip(ui, repo, node, backup="all"):
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   203
    """Strip bookmarks if revisions are stripped using
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   204
    the mercurial.strip method. This usually happens during
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   205
    qpush and qpop"""
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   206
    revisions = _revstostrip(repo.changelog, node)
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   207
    marks = parse(repo)
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   208
    update = []
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   209
    for mark, n in marks.items():
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   210
        if repo.changelog.rev(n) in revisions:
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   211
            update.append(mark)
7280
810ca383da9c remove unused variables
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 7262
diff changeset
   212
    oldstrip(ui, repo, node, backup)
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   213
    if len(update) > 0:
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   214
        for m in update:
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   215
            marks[m] = repo.changectx('.').node()
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   216
        write(repo, marks)
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   217
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   218
oldstrip = mercurial.repair.strip
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   219
mercurial.repair.strip = strip
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   220
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   221
def reposetup(ui, repo):
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   222
    if not isinstance(repo, mercurial.localrepo.localrepository):
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   223
        return
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   224
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   225
    # init a bookmark cache as otherwise we would get a infinite reading
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   226
    # in lookup()
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   227
    repo._bookmarks = None
7481
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   228
    repo._bookmarkcurrent = None
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   229
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   230
    class bookmark_repo(repo.__class__):
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   231
        def rollback(self):
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   232
            if os.path.exists(self.join('undo.bookmarks')):
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   233
                util.rename(self.join('undo.bookmarks'), self.join('bookmarks'))
7250
352627bcafc3 bookmarks: Remove trailing space
Joel Rosdahl <joel@rosdahl.net>
parents: 7239
diff changeset
   234
            return super(bookmark_repo, self).rollback()
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   235
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   236
        def lookup(self, key):
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   237
            if self._bookmarks is None:
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   238
                self._bookmarks = parse(self)
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   239
            if key in self._bookmarks:
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   240
                key = self._bookmarks[key]
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   241
            return super(bookmark_repo, self).lookup(key)
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   242
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   243
        def commit(self, *k, **kw):
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   244
            """Add a revision to the repository and
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   245
            move the bookmark"""
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   246
            node  = super(bookmark_repo, self).commit(*k, **kw)
7262
3cbadcf28a4c bookmarks: do nothing if commit was not successful.
Dmitriy Taychenachev <dimichxp@gmail.com>
parents: 7260
diff changeset
   247
            if node == None:
3cbadcf28a4c bookmarks: do nothing if commit was not successful.
Dmitriy Taychenachev <dimichxp@gmail.com>
parents: 7260
diff changeset
   248
                return None
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   249
            parents = repo.changelog.parents(node)
7256
df800e004077 bookmarks: Avoid unconditional forwarding of bookmarks for the null revision
Joel Rosdahl <joel@rosdahl.net>
parents: 7255
diff changeset
   250
            if parents[1] == nullid:
df800e004077 bookmarks: Avoid unconditional forwarding of bookmarks for the null revision
Joel Rosdahl <joel@rosdahl.net>
parents: 7255
diff changeset
   251
                parents = (parents[0],)
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   252
            marks = parse(repo)
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   253
            update = False
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   254
            for mark, n in marks.items():
7481
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   255
                if ui.configbool('bookmarks', 'track.current'):
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   256
                    if mark == current(repo) and n in parents:
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   257
                        marks[mark] = node
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   258
                        update = True
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   259
                else:
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   260
                    if n in parents:
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   261
                        marks[mark] = node
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   262
                        update = True
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   263
            if update:
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   264
                write(repo, marks)
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   265
            return node
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   266
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   267
        def addchangegroup(self, source, srctype, url, emptyok=False):
7316
9737041646bc bookmarks: Use dirstate to determine the current node in addchangegroup
David Soria Parra <dsp@php.net>
parents: 7283
diff changeset
   268
            parents = repo.dirstate.parents()
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   269
7252
104a8324798e bookmarks: Avoid long lines
Joel Rosdahl <joel@rosdahl.net>
parents: 7251
diff changeset
   270
            result = super(bookmark_repo, self).addchangegroup(
104a8324798e bookmarks: Avoid long lines
Joel Rosdahl <joel@rosdahl.net>
parents: 7251
diff changeset
   271
                source, srctype, url, emptyok)
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   272
            if result > 1:
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   273
                # We have more heads than before
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   274
                return result
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   275
            node = repo.changelog.tip()
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   276
            marks = parse(repo)
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   277
            update = False
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   278
            for mark, n in marks.items():
7316
9737041646bc bookmarks: Use dirstate to determine the current node in addchangegroup
David Soria Parra <dsp@php.net>
parents: 7283
diff changeset
   279
                if n in parents:
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   280
                    marks[mark] = node
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   281
                    update = True
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   282
            if update:
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   283
                write(repo, marks)
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   284
            return result
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   285
7480
31f70804f1b1 bookmarks: Include bookmarks in tags.
Martin Geisler <mg...@daimi.au.dk>
parents: 7479
diff changeset
   286
        def tags(self):
31f70804f1b1 bookmarks: Include bookmarks in tags.
Martin Geisler <mg...@daimi.au.dk>
parents: 7479
diff changeset
   287
            """Merge bookmarks with normal tags"""
31f70804f1b1 bookmarks: Include bookmarks in tags.
Martin Geisler <mg...@daimi.au.dk>
parents: 7479
diff changeset
   288
            if self.tagscache:
31f70804f1b1 bookmarks: Include bookmarks in tags.
Martin Geisler <mg...@daimi.au.dk>
parents: 7479
diff changeset
   289
                return self.tagscache
31f70804f1b1 bookmarks: Include bookmarks in tags.
Martin Geisler <mg...@daimi.au.dk>
parents: 7479
diff changeset
   290
31f70804f1b1 bookmarks: Include bookmarks in tags.
Martin Geisler <mg...@daimi.au.dk>
parents: 7479
diff changeset
   291
            tagscache = super(bookmark_repo, self).tags()
31f70804f1b1 bookmarks: Include bookmarks in tags.
Martin Geisler <mg...@daimi.au.dk>
parents: 7479
diff changeset
   292
            tagscache.update(parse(repo))
31f70804f1b1 bookmarks: Include bookmarks in tags.
Martin Geisler <mg...@daimi.au.dk>
parents: 7479
diff changeset
   293
            return tagscache
31f70804f1b1 bookmarks: Include bookmarks in tags.
Martin Geisler <mg...@daimi.au.dk>
parents: 7479
diff changeset
   294
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   295
    repo.__class__ = bookmark_repo
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   296
7481
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   297
def updatecurbookmark(orig, ui, repo, *args, **opts):
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   298
    '''Set the current bookmark
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   299
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   300
    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
   301
    file.
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   302
    '''
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   303
    res = orig(ui, repo, *args, **opts)
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   304
    rev = opts['rev']
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   305
    if not rev and len(args) > 0:
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   306
        rev = args[0]
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   307
    setcurrent(repo, rev)
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   308
    return res
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   309
7478
4c3e0ad58c5b bookmarks: Adds support for a --non-bookmarked option to push
Stefan Rusek <stefan@rusek.org>
parents: 7316
diff changeset
   310
def uisetup(ui):
4c3e0ad58c5b bookmarks: Adds support for a --non-bookmarked option to push
Stefan Rusek <stefan@rusek.org>
parents: 7316
diff changeset
   311
    'Replace push with a decorator to provide --non-bookmarked option'
7481
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   312
    if ui.configbool('bookmarks', 'track.current'):
5f681a143ede bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents: 7480
diff changeset
   313
        extensions.wrapcommand(commands.table, 'update', updatecurbookmark)
7478
4c3e0ad58c5b bookmarks: Adds support for a --non-bookmarked option to push
Stefan Rusek <stefan@rusek.org>
parents: 7316
diff changeset
   314
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   315
cmdtable = {
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   316
    "bookmarks":
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   317
        (bookmark,
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   318
         [('f', 'force', False, _('force')),
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   319
          ('r', 'rev', '', _('revision')),
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   320
          ('d', 'delete', False, _('delete a given bookmark')),
7255
69e431ea124d bookmarks: Rename --move to --rename
Joel Rosdahl <joel@rosdahl.net>
parents: 7254
diff changeset
   321
          ('m', 'rename', '', _('rename a given bookmark'))],
7239
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   322
         _('hg bookmarks [-d] [-m NAME] [-r NAME] [NAME]')),
135003a470f3 Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff changeset
   323
}