annotate hgext/bookmarks.py @ 12237:0ef71bff56b7

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