Mercurial > hg
annotate hgext/bookmarks.py @ 9791:8bba9157b30a
rst2man: automatically write sections in uppercase
Man pages have uppercased section titles but other formats do not.
Letting rst2man handle the tranformation allows better reuse of text
between man pages and other formats.
author | Martin Geisler <mg@lazybytes.net> |
---|---|
date | Sun, 08 Nov 2009 11:41:34 +0100 |
parents | 013cc052a926 |
children | dc5b5cc5ca34 25e572394f5c |
rev | line source |
---|---|
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 |
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
8087
diff
changeset
|
6 # GNU General Public License version 2, incorporated herein by reference. |
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 |
9251
6bddba3973bc
bookmarks: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9202
diff
changeset
|
15 It is possible to use bookmark names in every revision lookup (e.g. hg |
6bddba3973bc
bookmarks: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9202
diff
changeset
|
16 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 |
f83a2b1d1a71
bookmarks; clean up imports and function wrapping
Matt Mackall <mpm@selenic.com>
parents:
7637
diff
changeset
|
33 from mercurial import util, commands, localrepo, repair, extensions |
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 |
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 |
7789
e8d62d6133c2
bookmarks: escape literal backslashes in docstring
Martin Geisler <mg@daimi.au.dk>
parents:
7666
diff
changeset
|
39 Bookmarks are stored as {HASH}\\s{NAME}\\n (localtags format) values |
7252
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) |
8862
cd96f159a2d3
bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents:
8762
diff
changeset
|
69 wlock = repo.wlock() |
cd96f159a2d3
bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents:
8762
diff
changeset
|
70 try: |
cd96f159a2d3
bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents:
8762
diff
changeset
|
71 file = repo.opener('bookmarks', 'w', atomictemp=True) |
cd96f159a2d3
bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents:
8762
diff
changeset
|
72 for refspec, node in refs.iteritems(): |
cd96f159a2d3
bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents:
8762
diff
changeset
|
73 file.write("%s %s\n" % (hex(node), refspec)) |
cd96f159a2d3
bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents:
8762
diff
changeset
|
74 file.rename() |
cd96f159a2d3
bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents:
8762
diff
changeset
|
75 finally: |
cd96f159a2d3
bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents:
8762
diff
changeset
|
76 wlock.release() |
7239
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
77 |
7481
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
78 def current(repo): |
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
79 '''Get the current bookmark |
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 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
|
82 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
|
83 is stored in .hg/bookmarks.current |
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
84 ''' |
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
85 if repo._bookmarkcurrent: |
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
86 return repo._bookmarkcurrent |
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
87 mark = None |
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
88 if os.path.exists(repo.join('bookmarks.current')): |
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
89 file = repo.opener('bookmarks.current') |
7666
2ad81e9b075b
bookmarks: work around missing posixfile_nt.readline()
Patrick Mezard <pmezard@gmail.com>
parents:
7638
diff
changeset
|
90 # No readline() in posixfile_nt, reading everything is cheap |
2ad81e9b075b
bookmarks: work around missing posixfile_nt.readline()
Patrick Mezard <pmezard@gmail.com>
parents:
7638
diff
changeset
|
91 mark = (file.readlines() or [''])[0] |
7481
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
92 if mark == '': |
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
93 mark = None |
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
94 file.close() |
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
95 repo._bookmarkcurrent = mark |
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
96 return mark |
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
97 |
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
98 def setcurrent(repo, mark): |
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
99 '''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
|
100 |
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
101 Set the name of the bookmark that we are on (hg update <bookmark>). |
8087 | 102 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
|
103 ''' |
7484
167853c7e54a
bookmarks: do not overwrite bookmarks.current if not necessary
David Soria Parra <dsp@php.net>
parents:
7483
diff
changeset
|
104 if current(repo) == mark: |
7481
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
105 return |
7484
167853c7e54a
bookmarks: do not overwrite bookmarks.current if not necessary
David Soria Parra <dsp@php.net>
parents:
7483
diff
changeset
|
106 |
7481
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
107 refs = parse(repo) |
7484
167853c7e54a
bookmarks: do not overwrite bookmarks.current if not necessary
David Soria Parra <dsp@php.net>
parents:
7483
diff
changeset
|
108 |
7491
b95ff487870e
bookmarks: this is a comment, not a string
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
7489
diff
changeset
|
109 # 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
|
110 if (mark and mark not in refs and |
7484
167853c7e54a
bookmarks: do not overwrite bookmarks.current if not necessary
David Soria Parra <dsp@php.net>
parents:
7483
diff
changeset
|
111 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
|
112 return |
7481
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
113 if mark not in refs: |
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
114 mark = '' |
8862
cd96f159a2d3
bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents:
8762
diff
changeset
|
115 wlock = repo.wlock() |
cd96f159a2d3
bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents:
8762
diff
changeset
|
116 try: |
cd96f159a2d3
bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents:
8762
diff
changeset
|
117 file = repo.opener('bookmarks.current', 'w', atomictemp=True) |
cd96f159a2d3
bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents:
8762
diff
changeset
|
118 file.write(mark) |
cd96f159a2d3
bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents:
8762
diff
changeset
|
119 file.rename() |
cd96f159a2d3
bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents:
8762
diff
changeset
|
120 finally: |
cd96f159a2d3
bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents:
8762
diff
changeset
|
121 wlock.release() |
7481
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
122 repo._bookmarkcurrent = mark |
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
123 |
7255
69e431ea124d
bookmarks: Rename --move to --rename
Joel Rosdahl <joel@rosdahl.net>
parents:
7254
diff
changeset
|
124 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
|
125 '''track a line of development with movable markers |
7250
352627bcafc3
bookmarks: Remove trailing space
Joel Rosdahl <joel@rosdahl.net>
parents:
7239
diff
changeset
|
126 |
9251
6bddba3973bc
bookmarks: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9202
diff
changeset
|
127 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
|
128 committing. Bookmarks are local. They can be renamed, copied and |
6bddba3973bc
bookmarks: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9202
diff
changeset
|
129 deleted. It is possible to use bookmark names in 'hg merge' and |
6bddba3973bc
bookmarks: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9202
diff
changeset
|
130 '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
|
131 |
8725
353b1c160c2d
bookmarks: update docstring
Abderrahim Kitouni <a.kitouni@gmail.com>
parents:
8527
diff
changeset
|
132 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
|
133 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
|
134 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
|
135 the bookmark is assigned to that revision. |
7239
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
136 ''' |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
137 hexfn = ui.debugflag and hex or short |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
138 marks = parse(repo) |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
139 cur = repo.changectx('.').node() |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
140 |
7255
69e431ea124d
bookmarks: Rename --move to --rename
Joel Rosdahl <joel@rosdahl.net>
parents:
7254
diff
changeset
|
141 if rename: |
69e431ea124d
bookmarks: Rename --move to --rename
Joel Rosdahl <joel@rosdahl.net>
parents:
7254
diff
changeset
|
142 if rename not in marks: |
7251
444d88175e33
bookmarks: Fix spelling and grammar
Joel Rosdahl <joel@rosdahl.net>
parents:
7250
diff
changeset
|
143 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
|
144 if mark in marks and not force: |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
145 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
|
146 if mark is None: |
d892211d670e
bookmarks: Require new bookmark name when renaming
Joel Rosdahl <joel@rosdahl.net>
parents:
7253
diff
changeset
|
147 raise util.Abort(_("new bookmark name required")) |
7255
69e431ea124d
bookmarks: Rename --move to --rename
Joel Rosdahl <joel@rosdahl.net>
parents:
7254
diff
changeset
|
148 marks[mark] = marks[rename] |
69e431ea124d
bookmarks: Rename --move to --rename
Joel Rosdahl <joel@rosdahl.net>
parents:
7254
diff
changeset
|
149 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
|
150 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
|
151 setcurrent(repo, mark) |
7239
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 |
7250
352627bcafc3
bookmarks: Remove trailing space
Joel Rosdahl <joel@rosdahl.net>
parents:
7239
diff
changeset
|
154 |
7239
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
155 if delete: |
8527
f9a80054dd3c
use 'x is None' instead of 'x == None'
Martin Geisler <mg@lazybytes.net>
parents:
8225
diff
changeset
|
156 if mark is None: |
7239
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
157 raise util.Abort(_("bookmark name required")) |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
158 if mark not in marks: |
7251
444d88175e33
bookmarks: Fix spelling and grammar
Joel Rosdahl <joel@rosdahl.net>
parents:
7250
diff
changeset
|
159 raise util.Abort(_("a bookmark of this name does not exist")) |
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
|
160 if mark == current(repo): |
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
|
161 setcurrent(repo, None) |
7239
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
162 del marks[mark] |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
163 write(repo, marks) |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
164 return |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
165 |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
166 if mark != None: |
7259
18c23375861f
bookmarks: Correctly reject newlines in bookmark names
Joel Rosdahl <joel@rosdahl.net>
parents:
7258
diff
changeset
|
167 if "\n" in mark: |
18c23375861f
bookmarks: Correctly reject newlines in bookmark names
Joel Rosdahl <joel@rosdahl.net>
parents:
7258
diff
changeset
|
168 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
|
169 mark = mark.strip() |
7239
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
170 if mark in marks and not force: |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
171 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
|
172 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
|
173 and not force): |
7252
104a8324798e
bookmarks: Avoid long lines
Joel Rosdahl <joel@rosdahl.net>
parents:
7251
diff
changeset
|
174 raise util.Abort( |
104a8324798e
bookmarks: Avoid long lines
Joel Rosdahl <joel@rosdahl.net>
parents:
7251
diff
changeset
|
175 _("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
|
176 if rev: |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
177 marks[mark] = repo.lookup(rev) |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
178 else: |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
179 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
|
180 setcurrent(repo, mark) |
7239
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
181 write(repo, marks) |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
182 return |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
183 |
8527
f9a80054dd3c
use 'x is None' instead of 'x == None'
Martin Geisler <mg@lazybytes.net>
parents:
8225
diff
changeset
|
184 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
|
185 if rev: |
9bd051efbdd6
bookmarks: Require a bookmark name when a revision is specified
Joel Rosdahl <joel@rosdahl.net>
parents:
7257
diff
changeset
|
186 raise util.Abort(_("bookmark name required")) |
7239
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
187 if len(marks) == 0: |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
188 ui.status("no bookmarks set\n") |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
189 else: |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
190 for bmark, n in marks.iteritems(): |
7481
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
191 if ui.configbool('bookmarks', 'track.current'): |
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
192 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
|
193 else: |
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
194 prefix = (n == cur) and '*' or ' ' |
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
195 |
9459
3b283adcc720
bookmarks: support --quiet
Steve Losh <steve@stevelosh.com>
parents:
9282
diff
changeset
|
196 if ui.quiet: |
3b283adcc720
bookmarks: support --quiet
Steve Losh <steve@stevelosh.com>
parents:
9282
diff
changeset
|
197 ui.write("%s\n" % bmark) |
3b283adcc720
bookmarks: support --quiet
Steve Losh <steve@stevelosh.com>
parents:
9282
diff
changeset
|
198 else: |
3b283adcc720
bookmarks: support --quiet
Steve Losh <steve@stevelosh.com>
parents:
9282
diff
changeset
|
199 ui.write(" %s %-25s %d:%s\n" % ( |
3b283adcc720
bookmarks: support --quiet
Steve Losh <steve@stevelosh.com>
parents:
9282
diff
changeset
|
200 prefix, bmark, repo.changelog.rev(n), hexfn(n))) |
7239
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
201 return |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
202 |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
203 def _revstostrip(changelog, node): |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
204 srev = changelog.rev(node) |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
205 tostrip = [srev] |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
206 saveheads = [] |
7283
b19c0200c90b
bookmarks: fix strip handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
7280
diff
changeset
|
207 for r in xrange(srev, len(changelog)): |
7239
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
208 parents = changelog.parentrevs(r) |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
209 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
|
210 tostrip.append(r) |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
211 if parents[1] != nullrev: |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
212 for p in parents: |
7283
b19c0200c90b
bookmarks: fix strip handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
7280
diff
changeset
|
213 if p not in tostrip and p > srev: |
7239
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
214 saveheads.append(p) |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
215 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
|
216 |
7638
f83a2b1d1a71
bookmarks; clean up imports and function wrapping
Matt Mackall <mpm@selenic.com>
parents:
7637
diff
changeset
|
217 def strip(oldstrip, ui, repo, node, backup="all"): |
7239
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
218 """Strip bookmarks if revisions are stripped using |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
219 the mercurial.strip method. This usually happens during |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
220 qpush and qpop""" |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
221 revisions = _revstostrip(repo.changelog, node) |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
222 marks = parse(repo) |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
223 update = [] |
7622
4dd7b28003d2
use dict.iteritems() rather than dict.items()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7552
diff
changeset
|
224 for mark, n in marks.iteritems(): |
7239
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
225 if repo.changelog.rev(n) in revisions: |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
226 update.append(mark) |
7280
810ca383da9c
remove unused variables
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
7262
diff
changeset
|
227 oldstrip(ui, repo, node, backup) |
7239
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
228 if len(update) > 0: |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
229 for m in update: |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
230 marks[m] = repo.changectx('.').node() |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
231 write(repo, marks) |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
232 |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
233 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
|
234 if not repo.local(): |
7239
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
235 return |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
236 |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
237 # 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
|
238 # in lookup() |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
239 repo._bookmarks = None |
7481
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
240 repo._bookmarkcurrent = None |
7239
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
241 |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
242 class bookmark_repo(repo.__class__): |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
243 def rollback(self): |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
244 if os.path.exists(self.join('undo.bookmarks')): |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
245 util.rename(self.join('undo.bookmarks'), self.join('bookmarks')) |
7250
352627bcafc3
bookmarks: Remove trailing space
Joel Rosdahl <joel@rosdahl.net>
parents:
7239
diff
changeset
|
246 return super(bookmark_repo, self).rollback() |
7239
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
247 |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
248 def lookup(self, key): |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
249 if self._bookmarks is None: |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
250 self._bookmarks = parse(self) |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
251 if key in self._bookmarks: |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
252 key = self._bookmarks[key] |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
253 return super(bookmark_repo, self).lookup(key) |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
254 |
9235
dde454349864
bookmarks: Wrap commictx instead of commit (issue 1515)
David Soria Parra <dsp@php.net>
parents:
9202
diff
changeset
|
255 def commitctx(self, ctx, error=False): |
7239
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
256 """Add a revision to the repository and |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
257 move the bookmark""" |
8862
cd96f159a2d3
bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents:
8762
diff
changeset
|
258 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
|
259 try: |
9235
dde454349864
bookmarks: Wrap commictx instead of commit (issue 1515)
David Soria Parra <dsp@php.net>
parents:
9202
diff
changeset
|
260 node = super(bookmark_repo, self).commitctx(ctx, error) |
8862
cd96f159a2d3
bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents:
8762
diff
changeset
|
261 if node is None: |
cd96f159a2d3
bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents:
8762
diff
changeset
|
262 return None |
8944
dda4ad7c9ea9
bookmarks: Change references to "repo" by references to "self" (issue1611)
Isaac Jurado <diptongo@gmail.com>
parents:
8894
diff
changeset
|
263 parents = self.changelog.parents(node) |
8862
cd96f159a2d3
bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents:
8762
diff
changeset
|
264 if parents[1] == nullid: |
cd96f159a2d3
bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents:
8762
diff
changeset
|
265 parents = (parents[0],) |
8944
dda4ad7c9ea9
bookmarks: Change references to "repo" by references to "self" (issue1611)
Isaac Jurado <diptongo@gmail.com>
parents:
8894
diff
changeset
|
266 marks = parse(self) |
8862
cd96f159a2d3
bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents:
8762
diff
changeset
|
267 update = False |
9237
abc198bca7c1
bookmarks: optimize update routine in case track.current is set
David Soria Parra <dsp@php.net>
parents:
9236
diff
changeset
|
268 if ui.configbool('bookmarks', 'track.current'): |
abc198bca7c1
bookmarks: optimize update routine in case track.current is set
David Soria Parra <dsp@php.net>
parents:
9236
diff
changeset
|
269 mark = current(self) |
abc198bca7c1
bookmarks: optimize update routine in case track.current is set
David Soria Parra <dsp@php.net>
parents:
9236
diff
changeset
|
270 if mark and marks[mark] in parents: |
abc198bca7c1
bookmarks: optimize update routine in case track.current is set
David Soria Parra <dsp@php.net>
parents:
9236
diff
changeset
|
271 marks[mark] = node |
abc198bca7c1
bookmarks: optimize update routine in case track.current is set
David Soria Parra <dsp@php.net>
parents:
9236
diff
changeset
|
272 update = True |
abc198bca7c1
bookmarks: optimize update routine in case track.current is set
David Soria Parra <dsp@php.net>
parents:
9236
diff
changeset
|
273 else: |
abc198bca7c1
bookmarks: optimize update routine in case track.current is set
David Soria Parra <dsp@php.net>
parents:
9236
diff
changeset
|
274 for mark, n in marks.items(): |
8862
cd96f159a2d3
bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents:
8762
diff
changeset
|
275 if n in parents: |
cd96f159a2d3
bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents:
8762
diff
changeset
|
276 marks[mark] = node |
cd96f159a2d3
bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents:
8762
diff
changeset
|
277 update = True |
cd96f159a2d3
bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents:
8762
diff
changeset
|
278 if update: |
8944
dda4ad7c9ea9
bookmarks: Change references to "repo" by references to "self" (issue1611)
Isaac Jurado <diptongo@gmail.com>
parents:
8894
diff
changeset
|
279 write(self, marks) |
8862
cd96f159a2d3
bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents:
8762
diff
changeset
|
280 return node |
cd96f159a2d3
bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents:
8762
diff
changeset
|
281 finally: |
cd96f159a2d3
bookmarks: add appropriate locking (issue1691)
Matt Mackall <mpm@selenic.com>
parents:
8762
diff
changeset
|
282 wlock.release() |
7239
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
283 |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
284 def addchangegroup(self, source, srctype, url, emptyok=False): |
8944
dda4ad7c9ea9
bookmarks: Change references to "repo" by references to "self" (issue1611)
Isaac Jurado <diptongo@gmail.com>
parents:
8894
diff
changeset
|
285 parents = self.dirstate.parents() |
7239
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
286 |
7252
104a8324798e
bookmarks: Avoid long lines
Joel Rosdahl <joel@rosdahl.net>
parents:
7251
diff
changeset
|
287 result = super(bookmark_repo, self).addchangegroup( |
104a8324798e
bookmarks: Avoid long lines
Joel Rosdahl <joel@rosdahl.net>
parents:
7251
diff
changeset
|
288 source, srctype, url, emptyok) |
7239
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
289 if result > 1: |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
290 # We have more heads than before |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
291 return result |
8944
dda4ad7c9ea9
bookmarks: Change references to "repo" by references to "self" (issue1611)
Isaac Jurado <diptongo@gmail.com>
parents:
8894
diff
changeset
|
292 node = self.changelog.tip() |
dda4ad7c9ea9
bookmarks: Change references to "repo" by references to "self" (issue1611)
Isaac Jurado <diptongo@gmail.com>
parents:
8894
diff
changeset
|
293 marks = parse(self) |
7239
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
294 update = False |
9236
a15b0412de06
bookmarks: Teach addchangset to respect track.current
David Soria Parra <dsp@php.net>
parents:
9235
diff
changeset
|
295 if ui.configbool('bookmarks', 'track.current'): |
a15b0412de06
bookmarks: Teach addchangset to respect track.current
David Soria Parra <dsp@php.net>
parents:
9235
diff
changeset
|
296 mark = current(self) |
a15b0412de06
bookmarks: Teach addchangset to respect track.current
David Soria Parra <dsp@php.net>
parents:
9235
diff
changeset
|
297 if mark and marks[mark] in parents: |
7239
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
298 marks[mark] = node |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
299 update = True |
9236
a15b0412de06
bookmarks: Teach addchangset to respect track.current
David Soria Parra <dsp@php.net>
parents:
9235
diff
changeset
|
300 else: |
a15b0412de06
bookmarks: Teach addchangset to respect track.current
David Soria Parra <dsp@php.net>
parents:
9235
diff
changeset
|
301 for mark, n in marks.items(): |
a15b0412de06
bookmarks: Teach addchangset to respect track.current
David Soria Parra <dsp@php.net>
parents:
9235
diff
changeset
|
302 if n in parents: |
a15b0412de06
bookmarks: Teach addchangset to respect track.current
David Soria Parra <dsp@php.net>
parents:
9235
diff
changeset
|
303 marks[mark] = node |
a15b0412de06
bookmarks: Teach addchangset to respect track.current
David Soria Parra <dsp@php.net>
parents:
9235
diff
changeset
|
304 update = True |
7239
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
305 if update: |
8944
dda4ad7c9ea9
bookmarks: Change references to "repo" by references to "self" (issue1611)
Isaac Jurado <diptongo@gmail.com>
parents:
8894
diff
changeset
|
306 write(self, marks) |
7239
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
307 return result |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
308 |
9145
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9053
diff
changeset
|
309 def _findtags(self): |
7480
31f70804f1b1
bookmarks: Include bookmarks in tags.
Martin Geisler <mg...@daimi.au.dk>
parents:
7479
diff
changeset
|
310 """Merge bookmarks with normal tags""" |
9145
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9053
diff
changeset
|
311 (tags, tagtypes) = super(bookmark_repo, self)._findtags() |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9053
diff
changeset
|
312 tags.update(parse(self)) |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9053
diff
changeset
|
313 return (tags, tagtypes) |
7480
31f70804f1b1
bookmarks: Include bookmarks in tags.
Martin Geisler <mg...@daimi.au.dk>
parents:
7479
diff
changeset
|
314 |
7239
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
315 repo.__class__ = bookmark_repo |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
316 |
7638
f83a2b1d1a71
bookmarks; clean up imports and function wrapping
Matt Mackall <mpm@selenic.com>
parents:
7637
diff
changeset
|
317 def uisetup(ui): |
f83a2b1d1a71
bookmarks; clean up imports and function wrapping
Matt Mackall <mpm@selenic.com>
parents:
7637
diff
changeset
|
318 extensions.wrapfunction(repair, "strip", strip) |
f83a2b1d1a71
bookmarks; clean up imports and function wrapping
Matt Mackall <mpm@selenic.com>
parents:
7637
diff
changeset
|
319 if ui.configbool('bookmarks', 'track.current'): |
f83a2b1d1a71
bookmarks; clean up imports and function wrapping
Matt Mackall <mpm@selenic.com>
parents:
7637
diff
changeset
|
320 extensions.wrapcommand(commands.table, 'update', updatecurbookmark) |
f83a2b1d1a71
bookmarks; clean up imports and function wrapping
Matt Mackall <mpm@selenic.com>
parents:
7637
diff
changeset
|
321 |
7481
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
322 def updatecurbookmark(orig, ui, repo, *args, **opts): |
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
323 '''Set the current bookmark |
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
324 |
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
325 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
|
326 file. |
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
327 ''' |
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
328 res = orig(ui, repo, *args, **opts) |
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
329 rev = opts['rev'] |
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
330 if not rev and len(args) > 0: |
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
331 rev = args[0] |
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
332 setcurrent(repo, rev) |
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
333 return res |
5f681a143ede
bookmarks: more git-like branches
David Soria Parra <dsp@php.net>
parents:
7480
diff
changeset
|
334 |
7239
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
335 cmdtable = { |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
336 "bookmarks": |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
337 (bookmark, |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
338 [('f', 'force', False, _('force')), |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
339 ('r', 'rev', '', _('revision')), |
135003a470f3
Bookmarks: Add the bookmarks extension
David Soria Parra <dsp@php.net>
parents:
diff
changeset
|
340 ('d', 'delete', False, _('delete a given bookmark')), |
7255
69e431ea124d
bookmarks: Rename --move to --rename
Joel Rosdahl <joel@rosdahl.net>
parents:
7254
diff
changeset
|
341 ('m', 'rename', '', _('rename a given bookmark'))], |
7818
b6b9065c20b3
bookmarks: change NAME to REV
Benoit Allard <benoit@aeteurope.nl>
parents:
7817
diff
changeset
|
342 _('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
|
343 } |