annotate mercurial/bookmarks.py @ 46474:dd926ce1de28 stable

relnote: remove the reference to `debugstrip` The `debug` namespace is not intended for end user and advertising it is a path to confusion and trouble. I think we should wait for the `admin` namespace to exists and the command to be available as `admin--strip` before we advertise it. Differential Revision: https://phab.mercurial-scm.org/D9817
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Mon, 18 Jan 2021 10:20:58 +0100
parents 89a2afe31e82
children 6266d19556ad
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13350
a7376b92caaa bookmarks: move basic io to core
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
1 # Mercurial bookmark support code
a7376b92caaa bookmarks: move basic io to core
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
2 #
a7376b92caaa bookmarks: move basic io to core
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
3 # Copyright 2008 David Soria Parra <dsp@php.net>
a7376b92caaa bookmarks: move basic io to core
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
4 #
a7376b92caaa bookmarks: move basic io to core
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
5 # This software may be used and distributed according to the terms of the
a7376b92caaa bookmarks: move basic io to core
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
6 # GNU General Public License version 2 or any later version.
a7376b92caaa bookmarks: move basic io to core
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
7
25917
aa323b53e3f9 bookmarks: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25743
diff changeset
8 from __future__ import absolute_import
aa323b53e3f9 bookmarks: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25743
diff changeset
9
aa323b53e3f9 bookmarks: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25743
diff changeset
10 import errno
35257
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
11 import struct
25917
aa323b53e3f9 bookmarks: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25743
diff changeset
12
aa323b53e3f9 bookmarks: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25743
diff changeset
13 from .i18n import _
aa323b53e3f9 bookmarks: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25743
diff changeset
14 from .node import (
aa323b53e3f9 bookmarks: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25743
diff changeset
15 bin,
aa323b53e3f9 bookmarks: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25743
diff changeset
16 hex,
32956
4f0a7f604449 commands: move checkconflict to bookmarks module
Sean Farley <sean@farley.io>
parents: 32955
diff changeset
17 short,
35257
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
18 wdirid,
25917
aa323b53e3f9 bookmarks: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25743
diff changeset
19 )
43089
c59eb1560c44 py3: manually import getattr where it is needed
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43077
diff changeset
20 from .pycompat import getattr
25917
aa323b53e3f9 bookmarks: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25743
diff changeset
21 from . import (
aa323b53e3f9 bookmarks: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25743
diff changeset
22 encoding,
29354
af849596752c bookmarks: abort 'push -B .' when no active bookmark
liscju <piotr.listkiewicz@gmail.com>
parents: 29300
diff changeset
23 error,
33146
7017567ebdf2 obsutil: move 'foreground' to the new modules
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 33092
diff changeset
24 obsutil,
33092
d170f59f6f55 py3: fix kwargs handling for `hg bookmarks`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33011
diff changeset
25 pycompat,
32955
70661eeb8ddb commands: move checkformat to bookmarks module
Sean Farley <sean@farley.io>
parents: 32794
diff changeset
26 scmutil,
31052
0332b8fafd05 bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30634
diff changeset
27 txnutil,
25917
aa323b53e3f9 bookmarks: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25743
diff changeset
28 util,
aa323b53e3f9 bookmarks: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25743
diff changeset
29 )
13350
a7376b92caaa bookmarks: move basic io to core
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
30
33009
4b81776baa7a commands: move activebookmarklabel to bookmarks module
Sean Farley <sean@farley.io>
parents: 33007
diff changeset
31 # label constants
4b81776baa7a commands: move activebookmarklabel to bookmarks module
Sean Farley <sean@farley.io>
parents: 33007
diff changeset
32 # until 3.5, bookmarks.current was the advertised name, not
4b81776baa7a commands: move activebookmarklabel to bookmarks module
Sean Farley <sean@farley.io>
parents: 33007
diff changeset
33 # bookmarks.active, so we must use both to avoid breaking old
4b81776baa7a commands: move activebookmarklabel to bookmarks module
Sean Farley <sean@farley.io>
parents: 33007
diff changeset
34 # custom styles
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
35 activebookmarklabel = b'bookmarks.active bookmarks.current'
33009
4b81776baa7a commands: move activebookmarklabel to bookmarks module
Sean Farley <sean@farley.io>
parents: 33007
diff changeset
36
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
37 BOOKMARKS_IN_STORE_REQUIREMENT = b'bookmarksinstore'
42325
526750cdd02d bookmarks: keep bookmarks in .hg/store if new config set
Martin von Zweigbergk <martinvonz@google.com>
parents: 42312
diff changeset
38
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
39
42325
526750cdd02d bookmarks: keep bookmarks in .hg/store if new config set
Martin von Zweigbergk <martinvonz@google.com>
parents: 42312
diff changeset
40 def bookmarksinstore(repo):
526750cdd02d bookmarks: keep bookmarks in .hg/store if new config set
Martin von Zweigbergk <martinvonz@google.com>
parents: 42312
diff changeset
41 return BOOKMARKS_IN_STORE_REQUIREMENT in repo.requirements
526750cdd02d bookmarks: keep bookmarks in .hg/store if new config set
Martin von Zweigbergk <martinvonz@google.com>
parents: 42312
diff changeset
42
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
43
42325
526750cdd02d bookmarks: keep bookmarks in .hg/store if new config set
Martin von Zweigbergk <martinvonz@google.com>
parents: 42312
diff changeset
44 def bookmarksvfs(repo):
526750cdd02d bookmarks: keep bookmarks in .hg/store if new config set
Martin von Zweigbergk <martinvonz@google.com>
parents: 42312
diff changeset
45 return repo.svfs if bookmarksinstore(repo) else repo.vfs
526750cdd02d bookmarks: keep bookmarks in .hg/store if new config set
Martin von Zweigbergk <martinvonz@google.com>
parents: 42312
diff changeset
46
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
47
27186
34d26e22a2b0 bookmarks: hoist getbkfile out of bmstore class
Augie Fackler <augie@google.com>
parents: 27185
diff changeset
48 def _getbkfile(repo):
34d26e22a2b0 bookmarks: hoist getbkfile out of bmstore class
Augie Fackler <augie@google.com>
parents: 27185
diff changeset
49 """Hook so that extensions that mess with the store can hook bm storage.
34d26e22a2b0 bookmarks: hoist getbkfile out of bmstore class
Augie Fackler <augie@google.com>
parents: 27185
diff changeset
50
34d26e22a2b0 bookmarks: hoist getbkfile out of bmstore class
Augie Fackler <augie@google.com>
parents: 27185
diff changeset
51 For core, this just handles wether we should see pending
34d26e22a2b0 bookmarks: hoist getbkfile out of bmstore class
Augie Fackler <augie@google.com>
parents: 27185
diff changeset
52 bookmarks or the committed ones. Other extensions (like share)
34d26e22a2b0 bookmarks: hoist getbkfile out of bmstore class
Augie Fackler <augie@google.com>
parents: 27185
diff changeset
53 may need to tweak this behavior further.
34d26e22a2b0 bookmarks: hoist getbkfile out of bmstore class
Augie Fackler <augie@google.com>
parents: 27185
diff changeset
54 """
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
55 fp, pending = txnutil.trypending(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
56 repo.root, bookmarksvfs(repo), b'bookmarks'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
57 )
31052
0332b8fafd05 bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30634
diff changeset
58 return fp
27186
34d26e22a2b0 bookmarks: hoist getbkfile out of bmstore class
Augie Fackler <augie@google.com>
parents: 27185
diff changeset
59
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
60
37847
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
61 class bmstore(object):
41533
0f64091cc851 global: make some docstrings raw strings
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41365
diff changeset
62 r"""Storage for bookmarks.
17922
7f5dab94e48c bookmarks: introduce a bmstore to manage bookmark persistence
Augie Fackler <raf@durin42.com>
parents: 17918
diff changeset
63
27698
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
64 This object should do all bookmark-related reads and writes, so
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
65 that it's fairly simple to replace the storage underlying
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
66 bookmarks without having to clone the logic surrounding
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
67 bookmarks. This type also should manage the active bookmark, if
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
68 any.
17922
7f5dab94e48c bookmarks: introduce a bmstore to manage bookmark persistence
Augie Fackler <raf@durin42.com>
parents: 17918
diff changeset
69
7f5dab94e48c bookmarks: introduce a bmstore to manage bookmark persistence
Augie Fackler <raf@durin42.com>
parents: 17918
diff changeset
70 This particular bmstore implementation stores bookmarks as
7f5dab94e48c bookmarks: introduce a bmstore to manage bookmark persistence
Augie Fackler <raf@durin42.com>
parents: 17918
diff changeset
71 {hash}\s{name}\n (the same format as localtags) in
7f5dab94e48c bookmarks: introduce a bmstore to manage bookmark persistence
Augie Fackler <raf@durin42.com>
parents: 17918
diff changeset
72 .hg/bookmarks. The mapping is stored as {name: nodeid}.
7f5dab94e48c bookmarks: introduce a bmstore to manage bookmark persistence
Augie Fackler <raf@durin42.com>
parents: 17918
diff changeset
73 """
13351
6c5368cd2df9 bookmarks: move read methods to core
Matt Mackall <mpm@selenic.com>
parents: 13350
diff changeset
74
17922
7f5dab94e48c bookmarks: introduce a bmstore to manage bookmark persistence
Augie Fackler <raf@durin42.com>
parents: 17918
diff changeset
75 def __init__(self, repo):
7f5dab94e48c bookmarks: introduce a bmstore to manage bookmark persistence
Augie Fackler <raf@durin42.com>
parents: 17918
diff changeset
76 self._repo = repo
37847
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
77 self._refmap = refmap = {} # refspec: node
37850
04ceb267271a bookmarks: cache reverse mapping (issue5868)
Yuya Nishihara <yuya@tcha.org>
parents: 37849
diff changeset
78 self._nodemap = nodemap = {} # node: sorted([refspec, ...])
32738
999aa9cfb4d3 bookmarks: move variable initialization earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32737
diff changeset
79 self._clean = True
999aa9cfb4d3 bookmarks: move variable initialization earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32737
diff changeset
80 self._aclean = True
43544
886ec3962c66 index: use `index.has_node` in `bookmarks.bmstore`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43117
diff changeset
81 has_node = repo.changelog.index.has_node
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
82 tonode = bin # force local lookup
17922
7f5dab94e48c bookmarks: introduce a bmstore to manage bookmark persistence
Augie Fackler <raf@durin42.com>
parents: 17918
diff changeset
83 try:
32794
6f775d10e83b bookmarks: make sure we close the bookmark file after reading
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32793
diff changeset
84 with _getbkfile(repo) as bkfile:
6f775d10e83b bookmarks: make sure we close the bookmark file after reading
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32793
diff changeset
85 for line in bkfile:
6f775d10e83b bookmarks: make sure we close the bookmark file after reading
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32793
diff changeset
86 line = line.strip()
6f775d10e83b bookmarks: make sure we close the bookmark file after reading
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32793
diff changeset
87 if not line:
6f775d10e83b bookmarks: make sure we close the bookmark file after reading
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32793
diff changeset
88 continue
6f775d10e83b bookmarks: make sure we close the bookmark file after reading
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32793
diff changeset
89 try:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
90 sha, refspec = line.split(b' ', 1)
32794
6f775d10e83b bookmarks: make sure we close the bookmark file after reading
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32793
diff changeset
91 node = tonode(sha)
43544
886ec3962c66 index: use `index.has_node` in `bookmarks.bmstore`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43117
diff changeset
92 if has_node(node):
32794
6f775d10e83b bookmarks: make sure we close the bookmark file after reading
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32793
diff changeset
93 refspec = encoding.tolocal(refspec)
37847
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
94 refmap[refspec] = node
37850
04ceb267271a bookmarks: cache reverse mapping (issue5868)
Yuya Nishihara <yuya@tcha.org>
parents: 37849
diff changeset
95 nrefs = nodemap.get(node)
04ceb267271a bookmarks: cache reverse mapping (issue5868)
Yuya Nishihara <yuya@tcha.org>
parents: 37849
diff changeset
96 if nrefs is None:
04ceb267271a bookmarks: cache reverse mapping (issue5868)
Yuya Nishihara <yuya@tcha.org>
parents: 37849
diff changeset
97 nodemap[node] = [refspec]
04ceb267271a bookmarks: cache reverse mapping (issue5868)
Yuya Nishihara <yuya@tcha.org>
parents: 37849
diff changeset
98 else:
04ceb267271a bookmarks: cache reverse mapping (issue5868)
Yuya Nishihara <yuya@tcha.org>
parents: 37849
diff changeset
99 nrefs.append(refspec)
04ceb267271a bookmarks: cache reverse mapping (issue5868)
Yuya Nishihara <yuya@tcha.org>
parents: 37849
diff changeset
100 if nrefs[-2] > refspec:
04ceb267271a bookmarks: cache reverse mapping (issue5868)
Yuya Nishihara <yuya@tcha.org>
parents: 37849
diff changeset
101 # bookmarks weren't sorted before 4.5
04ceb267271a bookmarks: cache reverse mapping (issue5868)
Yuya Nishihara <yuya@tcha.org>
parents: 37849
diff changeset
102 nrefs.sort()
32794
6f775d10e83b bookmarks: make sure we close the bookmark file after reading
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32793
diff changeset
103 except (TypeError, ValueError):
6f775d10e83b bookmarks: make sure we close the bookmark file after reading
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32793
diff changeset
104 # TypeError:
6f775d10e83b bookmarks: make sure we close the bookmark file after reading
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32793
diff changeset
105 # - bin(...)
6f775d10e83b bookmarks: make sure we close the bookmark file after reading
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32793
diff changeset
106 # ValueError:
6f775d10e83b bookmarks: make sure we close the bookmark file after reading
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32793
diff changeset
107 # - node in nm, for non-20-bytes entry
6f775d10e83b bookmarks: make sure we close the bookmark file after reading
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32793
diff changeset
108 # - split(...), for string without ' '
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
109 bookmarkspath = b'.hg/bookmarks'
42325
526750cdd02d bookmarks: keep bookmarks in .hg/store if new config set
Martin von Zweigbergk <martinvonz@google.com>
parents: 42312
diff changeset
110 if bookmarksinstore(repo):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
111 bookmarkspath = b'.hg/store/bookmarks'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
112 repo.ui.warn(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
113 _(b'malformed line in %s: %r\n')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
114 % (bookmarkspath, pycompat.bytestr(line))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
115 )
25660
328739ea70c3 global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25569
diff changeset
116 except IOError as inst:
17922
7f5dab94e48c bookmarks: introduce a bmstore to manage bookmark persistence
Augie Fackler <raf@durin42.com>
parents: 17918
diff changeset
117 if inst.errno != errno.ENOENT:
7f5dab94e48c bookmarks: introduce a bmstore to manage bookmark persistence
Augie Fackler <raf@durin42.com>
parents: 17918
diff changeset
118 raise
27698
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
119 self._active = _readactive(repo, self)
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
120
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
121 @property
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
122 def active(self):
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
123 return self._active
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
124
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
125 @active.setter
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
126 def active(self, mark):
37847
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
127 if mark is not None and mark not in self._refmap:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
128 raise AssertionError(b'bookmark %s does not exist!' % mark)
27698
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
129
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
130 self._active = mark
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
131 self._aclean = False
27187
d9dcc5c09d77 bmstore: add basic clean-state tracking
Augie Fackler <augie@google.com>
parents: 27186
diff changeset
132
37847
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
133 def __len__(self):
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
134 return len(self._refmap)
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
135
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
136 def __iter__(self):
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
137 return iter(self._refmap)
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
138
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
139 def iteritems(self):
43106
d783f945a701 py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43089
diff changeset
140 return pycompat.iteritems(self._refmap)
37847
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
141
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
142 def items(self):
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
143 return self._refmap.items()
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
144
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
145 # TODO: maybe rename to allnames()?
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
146 def keys(self):
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
147 return self._refmap.keys()
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
148
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
149 # TODO: maybe rename to allnodes()? but nodes would have to be deduplicated
37850
04ceb267271a bookmarks: cache reverse mapping (issue5868)
Yuya Nishihara <yuya@tcha.org>
parents: 37849
diff changeset
150 # could be self._nodemap.keys()
37847
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
151 def values(self):
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
152 return self._refmap.values()
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
153
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
154 def __contains__(self, mark):
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
155 return mark in self._refmap
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
156
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
157 def __getitem__(self, mark):
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
158 return self._refmap[mark]
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
159
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
160 def get(self, mark, default=None):
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
161 return self._refmap.get(mark, default)
33517
08bf0ebc6c8e bookmark: deprecate direct set of a bookmark value
Boris Feld <boris.feld@octobus.net>
parents: 33516
diff changeset
162
37849
82a153e6dc4a bookmarks: make argument names of _set/_del() more specific
Yuya Nishihara <yuya@tcha.org>
parents: 37848
diff changeset
163 def _set(self, mark, node):
27187
d9dcc5c09d77 bmstore: add basic clean-state tracking
Augie Fackler <augie@google.com>
parents: 27186
diff changeset
164 self._clean = False
37850
04ceb267271a bookmarks: cache reverse mapping (issue5868)
Yuya Nishihara <yuya@tcha.org>
parents: 37849
diff changeset
165 if mark in self._refmap:
04ceb267271a bookmarks: cache reverse mapping (issue5868)
Yuya Nishihara <yuya@tcha.org>
parents: 37849
diff changeset
166 self._del(mark)
37849
82a153e6dc4a bookmarks: make argument names of _set/_del() more specific
Yuya Nishihara <yuya@tcha.org>
parents: 37848
diff changeset
167 self._refmap[mark] = node
37850
04ceb267271a bookmarks: cache reverse mapping (issue5868)
Yuya Nishihara <yuya@tcha.org>
parents: 37849
diff changeset
168 nrefs = self._nodemap.get(node)
04ceb267271a bookmarks: cache reverse mapping (issue5868)
Yuya Nishihara <yuya@tcha.org>
parents: 37849
diff changeset
169 if nrefs is None:
04ceb267271a bookmarks: cache reverse mapping (issue5868)
Yuya Nishihara <yuya@tcha.org>
parents: 37849
diff changeset
170 self._nodemap[node] = [mark]
04ceb267271a bookmarks: cache reverse mapping (issue5868)
Yuya Nishihara <yuya@tcha.org>
parents: 37849
diff changeset
171 else:
04ceb267271a bookmarks: cache reverse mapping (issue5868)
Yuya Nishihara <yuya@tcha.org>
parents: 37849
diff changeset
172 nrefs.append(mark)
04ceb267271a bookmarks: cache reverse mapping (issue5868)
Yuya Nishihara <yuya@tcha.org>
parents: 37849
diff changeset
173 nrefs.sort()
33518
712a85b3677f bookmark: deprecate direct del of a bookmark value
Boris Feld <boris.feld@octobus.net>
parents: 33517
diff changeset
174
37849
82a153e6dc4a bookmarks: make argument names of _set/_del() more specific
Yuya Nishihara <yuya@tcha.org>
parents: 37848
diff changeset
175 def _del(self, mark):
44370
edaae3616ba3 bookmarks: avoid traceback when two pushes race to delete the same bookmark
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 43601
diff changeset
176 if mark not in self._refmap:
edaae3616ba3 bookmarks: avoid traceback when two pushes race to delete the same bookmark
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 43601
diff changeset
177 return
27187
d9dcc5c09d77 bmstore: add basic clean-state tracking
Augie Fackler <augie@google.com>
parents: 27186
diff changeset
178 self._clean = False
37850
04ceb267271a bookmarks: cache reverse mapping (issue5868)
Yuya Nishihara <yuya@tcha.org>
parents: 37849
diff changeset
179 node = self._refmap.pop(mark)
04ceb267271a bookmarks: cache reverse mapping (issue5868)
Yuya Nishihara <yuya@tcha.org>
parents: 37849
diff changeset
180 nrefs = self._nodemap[node]
04ceb267271a bookmarks: cache reverse mapping (issue5868)
Yuya Nishihara <yuya@tcha.org>
parents: 37849
diff changeset
181 if len(nrefs) == 1:
04ceb267271a bookmarks: cache reverse mapping (issue5868)
Yuya Nishihara <yuya@tcha.org>
parents: 37849
diff changeset
182 assert nrefs[0] == mark
04ceb267271a bookmarks: cache reverse mapping (issue5868)
Yuya Nishihara <yuya@tcha.org>
parents: 37849
diff changeset
183 del self._nodemap[node]
04ceb267271a bookmarks: cache reverse mapping (issue5868)
Yuya Nishihara <yuya@tcha.org>
parents: 37849
diff changeset
184 else:
04ceb267271a bookmarks: cache reverse mapping (issue5868)
Yuya Nishihara <yuya@tcha.org>
parents: 37849
diff changeset
185 nrefs.remove(mark)
35679
5a2d505a9174 bookmark: deprecate direct update of a bookmark value
Boris Feld <boris.feld@octobus.net>
parents: 35647
diff changeset
186
37848
6e2259847f5f bookmarks: extract function that looks up bookmark names by node
Yuya Nishihara <yuya@tcha.org>
parents: 37847
diff changeset
187 def names(self, node):
6e2259847f5f bookmarks: extract function that looks up bookmark names by node
Yuya Nishihara <yuya@tcha.org>
parents: 37847
diff changeset
188 """Return a sorted list of bookmarks pointing to the specified node"""
37850
04ceb267271a bookmarks: cache reverse mapping (issue5868)
Yuya Nishihara <yuya@tcha.org>
parents: 37849
diff changeset
189 return self._nodemap.get(node, [])
37848
6e2259847f5f bookmarks: extract function that looks up bookmark names by node
Yuya Nishihara <yuya@tcha.org>
parents: 37847
diff changeset
190
33480
ef54789a947d bookmark: introduce a 'applychanges' function to gather bookmark movement
Boris Feld <boris.feld@octobus.net>
parents: 33146
diff changeset
191 def applychanges(self, repo, tr, changes):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45913
diff changeset
192 """Apply a list of changes to bookmarks"""
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
193 bmchanges = tr.changes.get(b'bookmarks')
33480
ef54789a947d bookmark: introduce a 'applychanges' function to gather bookmark movement
Boris Feld <boris.feld@octobus.net>
parents: 33146
diff changeset
194 for name, node in changes:
37847
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
195 old = self._refmap.get(name)
33480
ef54789a947d bookmark: introduce a 'applychanges' function to gather bookmark movement
Boris Feld <boris.feld@octobus.net>
parents: 33146
diff changeset
196 if node is None:
33518
712a85b3677f bookmark: deprecate direct del of a bookmark value
Boris Feld <boris.feld@octobus.net>
parents: 33517
diff changeset
197 self._del(name)
33480
ef54789a947d bookmark: introduce a 'applychanges' function to gather bookmark movement
Boris Feld <boris.feld@octobus.net>
parents: 33146
diff changeset
198 else:
33517
08bf0ebc6c8e bookmark: deprecate direct set of a bookmark value
Boris Feld <boris.feld@octobus.net>
parents: 33516
diff changeset
199 self._set(name, node)
33516
f9e6e43c7987 bookmark: track bookmark changes at the transaction level
Boris Feld <boris.feld@octobus.net>
parents: 33515
diff changeset
200 if bmchanges is not None:
f9e6e43c7987 bookmark: track bookmark changes at the transaction level
Boris Feld <boris.feld@octobus.net>
parents: 33515
diff changeset
201 # if a previous value exist preserve the "initial" value
f9e6e43c7987 bookmark: track bookmark changes at the transaction level
Boris Feld <boris.feld@octobus.net>
parents: 33515
diff changeset
202 previous = bmchanges.get(name)
f9e6e43c7987 bookmark: track bookmark changes at the transaction level
Boris Feld <boris.feld@octobus.net>
parents: 33515
diff changeset
203 if previous is not None:
f9e6e43c7987 bookmark: track bookmark changes at the transaction level
Boris Feld <boris.feld@octobus.net>
parents: 33515
diff changeset
204 old = previous[0]
f9e6e43c7987 bookmark: track bookmark changes at the transaction level
Boris Feld <boris.feld@octobus.net>
parents: 33515
diff changeset
205 bmchanges[name] = (old, node)
33515
3325c7dcabaa bookmark: deprecate 'recordchange' in favor of 'applychanges'
Boris Feld <boris.feld@octobus.net>
parents: 33514
diff changeset
206 self._recordchange(tr)
33480
ef54789a947d bookmark: introduce a 'applychanges' function to gather bookmark movement
Boris Feld <boris.feld@octobus.net>
parents: 33146
diff changeset
207
33515
3325c7dcabaa bookmark: deprecate 'recordchange' in favor of 'applychanges'
Boris Feld <boris.feld@octobus.net>
parents: 33514
diff changeset
208 def _recordchange(self, tr):
22665
8319f7e78395 bookmark: add a `bmstore.recordupdate` to plug bookmarks into the transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22664
diff changeset
209 """record that bookmarks have been changed in a transaction
8319f7e78395 bookmark: add a `bmstore.recordupdate` to plug bookmarks into the transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22664
diff changeset
210
8319f7e78395 bookmark: add a `bmstore.recordupdate` to plug bookmarks into the transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22664
diff changeset
211 The transaction is then responsible for updating the file content."""
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
212 location = b'' if bookmarksinstore(self._repo) else b'plain'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
213 tr.addfilegenerator(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
214 b'bookmarks', (b'bookmarks',), self._write, location=location
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
215 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
216 tr.hookargs[b'bookmark_moved'] = b'1'
22665
8319f7e78395 bookmark: add a `bmstore.recordupdate` to plug bookmarks into the transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22664
diff changeset
217
23469
65e48b8d20f5 bookmarks: factor out repository lookup from writing bookmarks file
Ryan McElroy <rmcelroy@fb.com>
parents: 23458
diff changeset
218 def _writerepo(self, repo):
65e48b8d20f5 bookmarks: factor out repository lookup from writing bookmarks file
Ryan McElroy <rmcelroy@fb.com>
parents: 23458
diff changeset
219 """Factored out for extensibility"""
27698
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
220 rbm = repo._bookmarks
37847
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
221 if rbm.active not in self._refmap:
27698
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
222 rbm.active = None
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
223 rbm._writeactive()
17922
7f5dab94e48c bookmarks: introduce a bmstore to manage bookmark persistence
Augie Fackler <raf@durin42.com>
parents: 17918
diff changeset
224
42325
526750cdd02d bookmarks: keep bookmarks in .hg/store if new config set
Martin von Zweigbergk <martinvonz@google.com>
parents: 42312
diff changeset
225 if bookmarksinstore(repo):
526750cdd02d bookmarks: keep bookmarks in .hg/store if new config set
Martin von Zweigbergk <martinvonz@google.com>
parents: 42312
diff changeset
226 vfs = repo.svfs
526750cdd02d bookmarks: keep bookmarks in .hg/store if new config set
Martin von Zweigbergk <martinvonz@google.com>
parents: 42312
diff changeset
227 lock = repo.lock()
526750cdd02d bookmarks: keep bookmarks in .hg/store if new config set
Martin von Zweigbergk <martinvonz@google.com>
parents: 42312
diff changeset
228 else:
526750cdd02d bookmarks: keep bookmarks in .hg/store if new config set
Martin von Zweigbergk <martinvonz@google.com>
parents: 42312
diff changeset
229 vfs = repo.vfs
526750cdd02d bookmarks: keep bookmarks in .hg/store if new config set
Martin von Zweigbergk <martinvonz@google.com>
parents: 42312
diff changeset
230 lock = repo.wlock()
526750cdd02d bookmarks: keep bookmarks in .hg/store if new config set
Martin von Zweigbergk <martinvonz@google.com>
parents: 42312
diff changeset
231 with lock:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
232 with vfs(b'bookmarks', b'w', atomictemp=True, checkambig=True) as f:
42311
ec5bd3ab26bf bookmarks: use context manager when writing files
Martin von Zweigbergk <martinvonz@google.com>
parents: 41533
diff changeset
233 self._write(f)
17922
7f5dab94e48c bookmarks: introduce a bmstore to manage bookmark persistence
Augie Fackler <raf@durin42.com>
parents: 17918
diff changeset
234
27698
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
235 def _writeactive(self):
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
236 if self._aclean:
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
237 return
27800
1c5f2c2c046b with: use context manager for wlock in _writeactive
Bryan O'Sullivan <bryano@fb.com>
parents: 27799
diff changeset
238 with self._repo.wlock():
27698
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
239 if self._active is not None:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
240 with self._repo.vfs(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
241 b'bookmarks.current', b'w', atomictemp=True, checkambig=True
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
242 ) as f:
27698
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
243 f.write(encoding.fromlocal(self._active))
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
244 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
245 self._repo.vfs.tryunlink(b'bookmarks.current')
27698
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
246 self._aclean = True
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
247
22664
6bd685d2a2de bookmarks: split bookmark serialization and file handling
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22659
diff changeset
248 def _write(self, fp):
43106
d783f945a701 py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43089
diff changeset
249 for name, node in sorted(pycompat.iteritems(self._refmap)):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
250 fp.write(b"%s %s\n" % (hex(node), encoding.fromlocal(name)))
27187
d9dcc5c09d77 bmstore: add basic clean-state tracking
Augie Fackler <augie@google.com>
parents: 27186
diff changeset
251 self._clean = True
29066
e6f490e32863 bookmarks: properly invalidate volatile sets when writing bookmarks
Augie Fackler <augie@google.com>
parents: 28182
diff changeset
252 self._repo.invalidatevolatilesets()
22664
6bd685d2a2de bookmarks: split bookmark serialization and file handling
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22659
diff changeset
253
28182
e4fe4e903e97 bookmarks: add 'hg push -B .' for pushing the active bookmark (issue4917)
liscju <piotr.listkiewicz@gmail.com>
parents: 27800
diff changeset
254 def expandname(self, bname):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
255 if bname == b'.':
29354
af849596752c bookmarks: abort 'push -B .' when no active bookmark
liscju <piotr.listkiewicz@gmail.com>
parents: 29300
diff changeset
256 if self.active:
af849596752c bookmarks: abort 'push -B .' when no active bookmark
liscju <piotr.listkiewicz@gmail.com>
parents: 29300
diff changeset
257 return self.active
af849596752c bookmarks: abort 'push -B .' when no active bookmark
liscju <piotr.listkiewicz@gmail.com>
parents: 29300
diff changeset
258 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
259 raise error.RepoLookupError(_(b"no active bookmark"))
28182
e4fe4e903e97 bookmarks: add 'hg push -B .' for pushing the active bookmark (issue4917)
liscju <piotr.listkiewicz@gmail.com>
parents: 27800
diff changeset
260 return bname
e4fe4e903e97 bookmarks: add 'hg push -B .' for pushing the active bookmark (issue4917)
liscju <piotr.listkiewicz@gmail.com>
parents: 27800
diff changeset
261
32956
4f0a7f604449 commands: move checkconflict to bookmarks module
Sean Farley <sean@farley.io>
parents: 32955
diff changeset
262 def checkconflict(self, mark, force=False, target=None):
4f0a7f604449 commands: move checkconflict to bookmarks module
Sean Farley <sean@farley.io>
parents: 32955
diff changeset
263 """check repo for a potential clash of mark with an existing bookmark,
4f0a7f604449 commands: move checkconflict to bookmarks module
Sean Farley <sean@farley.io>
parents: 32955
diff changeset
264 branch, or hash
4f0a7f604449 commands: move checkconflict to bookmarks module
Sean Farley <sean@farley.io>
parents: 32955
diff changeset
265
4f0a7f604449 commands: move checkconflict to bookmarks module
Sean Farley <sean@farley.io>
parents: 32955
diff changeset
266 If target is supplied, then check that we are moving the bookmark
4f0a7f604449 commands: move checkconflict to bookmarks module
Sean Farley <sean@farley.io>
parents: 32955
diff changeset
267 forward.
4f0a7f604449 commands: move checkconflict to bookmarks module
Sean Farley <sean@farley.io>
parents: 32955
diff changeset
268
4f0a7f604449 commands: move checkconflict to bookmarks module
Sean Farley <sean@farley.io>
parents: 32955
diff changeset
269 If force is supplied, then forcibly move the bookmark to a new commit
4f0a7f604449 commands: move checkconflict to bookmarks module
Sean Farley <sean@farley.io>
parents: 32955
diff changeset
270 regardless if it is a move forward.
33513
904894edb205 bookmark: use 'divergent2delete' in checkconflict
Boris Feld <boris.feld@octobus.net>
parents: 33512
diff changeset
271
904894edb205 bookmark: use 'divergent2delete' in checkconflict
Boris Feld <boris.feld@octobus.net>
parents: 33512
diff changeset
272 If divergent bookmark are to be deleted, they will be returned as list.
32956
4f0a7f604449 commands: move checkconflict to bookmarks module
Sean Farley <sean@farley.io>
parents: 32955
diff changeset
273 """
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
274 cur = self._repo[b'.'].node()
37847
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
275 if mark in self._refmap and not force:
32956
4f0a7f604449 commands: move checkconflict to bookmarks module
Sean Farley <sean@farley.io>
parents: 32955
diff changeset
276 if target:
37847
8256962e798c bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org>
parents: 37641
diff changeset
277 if self._refmap[mark] == target and target == cur:
32956
4f0a7f604449 commands: move checkconflict to bookmarks module
Sean Farley <sean@farley.io>
parents: 32955
diff changeset
278 # re-activating a bookmark
33513
904894edb205 bookmark: use 'divergent2delete' in checkconflict
Boris Feld <boris.feld@octobus.net>
parents: 33512
diff changeset
279 return []
32956
4f0a7f604449 commands: move checkconflict to bookmarks module
Sean Farley <sean@farley.io>
parents: 32955
diff changeset
280 rev = self._repo[target].rev()
4f0a7f604449 commands: move checkconflict to bookmarks module
Sean Farley <sean@farley.io>
parents: 32955
diff changeset
281 anc = self._repo.changelog.ancestors([rev])
42978
e3bb2a58af1e bookmarks: remove changectx() method from bmstore (API)
Augie Fackler <augie@google.com>
parents: 42914
diff changeset
282 bmctx = self._repo[self[mark]]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
283 divs = [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
284 self._refmap[b]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
285 for b in self._refmap
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
286 if b.split(b'@', 1)[0] == mark.split(b'@', 1)[0]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
287 ]
32956
4f0a7f604449 commands: move checkconflict to bookmarks module
Sean Farley <sean@farley.io>
parents: 32955
diff changeset
288
4f0a7f604449 commands: move checkconflict to bookmarks module
Sean Farley <sean@farley.io>
parents: 32955
diff changeset
289 # allow resolving a single divergent bookmark even if moving
4f0a7f604449 commands: move checkconflict to bookmarks module
Sean Farley <sean@farley.io>
parents: 32955
diff changeset
290 # the bookmark across branches when a revision is specified
4f0a7f604449 commands: move checkconflict to bookmarks module
Sean Farley <sean@farley.io>
parents: 32955
diff changeset
291 # that contains a divergent bookmark
4f0a7f604449 commands: move checkconflict to bookmarks module
Sean Farley <sean@farley.io>
parents: 32955
diff changeset
292 if bmctx.rev() not in anc and target in divs:
33513
904894edb205 bookmark: use 'divergent2delete' in checkconflict
Boris Feld <boris.feld@octobus.net>
parents: 33512
diff changeset
293 return divergent2delete(self._repo, [target], mark)
32956
4f0a7f604449 commands: move checkconflict to bookmarks module
Sean Farley <sean@farley.io>
parents: 32955
diff changeset
294
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
295 deletefrom = [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
296 b for b in divs if self._repo[b].rev() in anc or b == target
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
297 ]
33513
904894edb205 bookmark: use 'divergent2delete' in checkconflict
Boris Feld <boris.feld@octobus.net>
parents: 33512
diff changeset
298 delbms = divergent2delete(self._repo, deletefrom, mark)
32956
4f0a7f604449 commands: move checkconflict to bookmarks module
Sean Farley <sean@farley.io>
parents: 32955
diff changeset
299 if validdest(self._repo, bmctx, self._repo[target]):
4f0a7f604449 commands: move checkconflict to bookmarks module
Sean Farley <sean@farley.io>
parents: 32955
diff changeset
300 self._repo.ui.status(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
301 _(b"moving bookmark '%s' forward from %s\n")
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
302 % (mark, short(bmctx.node()))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
303 )
33513
904894edb205 bookmark: use 'divergent2delete' in checkconflict
Boris Feld <boris.feld@octobus.net>
parents: 33512
diff changeset
304 return delbms
32956
4f0a7f604449 commands: move checkconflict to bookmarks module
Sean Farley <sean@farley.io>
parents: 32955
diff changeset
305 raise error.Abort(
43117
8ff1ecfadcd1 cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents: 43106
diff changeset
306 _(b"bookmark '%s' already exists (use -f to force)") % mark
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
307 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
308 if (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
309 mark in self._repo.branchmap()
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
310 or mark == self._repo.dirstate.branch()
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
311 ) and not force:
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
312 raise error.Abort(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
313 _(b"a bookmark cannot have the name of an existing branch")
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
314 )
32956
4f0a7f604449 commands: move checkconflict to bookmarks module
Sean Farley <sean@farley.io>
parents: 32955
diff changeset
315 if len(mark) > 3 and not force:
4f0a7f604449 commands: move checkconflict to bookmarks module
Sean Farley <sean@farley.io>
parents: 32955
diff changeset
316 try:
37397
46d9f998c3ed bookmarks: use isrevsymbol() for detecting collision with existing symbol
Martin von Zweigbergk <martinvonz@google.com>
parents: 37375
diff changeset
317 shadowhash = scmutil.isrevsymbol(self._repo, mark)
32956
4f0a7f604449 commands: move checkconflict to bookmarks module
Sean Farley <sean@farley.io>
parents: 32955
diff changeset
318 except error.LookupError: # ambiguous identifier
4f0a7f604449 commands: move checkconflict to bookmarks module
Sean Farley <sean@farley.io>
parents: 32955
diff changeset
319 shadowhash = False
4f0a7f604449 commands: move checkconflict to bookmarks module
Sean Farley <sean@farley.io>
parents: 32955
diff changeset
320 if shadowhash:
4f0a7f604449 commands: move checkconflict to bookmarks module
Sean Farley <sean@farley.io>
parents: 32955
diff changeset
321 self._repo.ui.warn(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
322 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
323 b"bookmark %s matches a changeset hash\n"
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
324 b"(did you leave a -r out of an 'hg bookmark' "
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
325 b"command?)\n"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
326 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
327 % mark
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
328 )
33513
904894edb205 bookmark: use 'divergent2delete' in checkconflict
Boris Feld <boris.feld@octobus.net>
parents: 33512
diff changeset
329 return []
32956
4f0a7f604449 commands: move checkconflict to bookmarks module
Sean Farley <sean@farley.io>
parents: 32955
diff changeset
330
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
331
27698
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
332 def _readactive(repo, marks):
24946
c44534209a0a bookmarks: rename readcurrent to readactive (API)
Ryan McElroy <rmcelroy@fb.com>
parents: 24945
diff changeset
333 """
c44534209a0a bookmarks: rename readcurrent to readactive (API)
Ryan McElroy <rmcelroy@fb.com>
parents: 24945
diff changeset
334 Get the active bookmark. We can have an active bookmark that updates
c44534209a0a bookmarks: rename readcurrent to readactive (API)
Ryan McElroy <rmcelroy@fb.com>
parents: 24945
diff changeset
335 itself as we commit. This function returns the name of that bookmark.
c44534209a0a bookmarks: rename readcurrent to readactive (API)
Ryan McElroy <rmcelroy@fb.com>
parents: 24945
diff changeset
336 It is stored in .hg/bookmarks.current
c44534209a0a bookmarks: rename readcurrent to readactive (API)
Ryan McElroy <rmcelroy@fb.com>
parents: 24945
diff changeset
337 """
42312
2b77183ac477 bookmarks: use vfs.tryread() instead of reimplementing it
Martin von Zweigbergk <martinvonz@google.com>
parents: 42311
diff changeset
338 # No readline() in osutil.posixfile, reading everything is
2b77183ac477 bookmarks: use vfs.tryread() instead of reimplementing it
Martin von Zweigbergk <martinvonz@google.com>
parents: 42311
diff changeset
339 # cheap.
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
340 content = repo.vfs.tryread(b'bookmarks.current')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
341 mark = encoding.tolocal((content.splitlines() or [b''])[0])
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
342 if mark == b'' or mark not in marks:
42312
2b77183ac477 bookmarks: use vfs.tryread() instead of reimplementing it
Martin von Zweigbergk <martinvonz@google.com>
parents: 42311
diff changeset
343 mark = None
13351
6c5368cd2df9 bookmarks: move read methods to core
Matt Mackall <mpm@selenic.com>
parents: 13350
diff changeset
344 return mark
6c5368cd2df9 bookmarks: move read methods to core
Matt Mackall <mpm@selenic.com>
parents: 13350
diff changeset
345
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
346
24945
e0b0fbd47491 bookmarks: rename setcurrent to activate (API)
Ryan McElroy <rmcelroy@fb.com>
parents: 24944
diff changeset
347 def activate(repo, mark):
e0b0fbd47491 bookmarks: rename setcurrent to activate (API)
Ryan McElroy <rmcelroy@fb.com>
parents: 24944
diff changeset
348 """
e0b0fbd47491 bookmarks: rename setcurrent to activate (API)
Ryan McElroy <rmcelroy@fb.com>
parents: 24944
diff changeset
349 Set the given bookmark to be 'active', meaning that this bookmark will
e0b0fbd47491 bookmarks: rename setcurrent to activate (API)
Ryan McElroy <rmcelroy@fb.com>
parents: 24944
diff changeset
350 follow new commits that are made.
13350
a7376b92caaa bookmarks: move basic io to core
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
351 The name is recorded in .hg/bookmarks.current
24945
e0b0fbd47491 bookmarks: rename setcurrent to activate (API)
Ryan McElroy <rmcelroy@fb.com>
parents: 24944
diff changeset
352 """
27698
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
353 repo._bookmarks.active = mark
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
354 repo._bookmarks._writeactive()
13352
f9cd37fca5ba bookmarks: move update into core
Matt Mackall <mpm@selenic.com>
parents: 13351
diff changeset
355
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
356
24944
08ec11e3ae4c bookmarks: rename unsetcurrent to deactivate (API)
Ryan McElroy <rmcelroy@fb.com>
parents: 24832
diff changeset
357 def deactivate(repo):
08ec11e3ae4c bookmarks: rename unsetcurrent to deactivate (API)
Ryan McElroy <rmcelroy@fb.com>
parents: 24832
diff changeset
358 """
26781
1aee2ab0f902 spelling: trivial spell checking
Mads Kiilerich <madski@unity3d.com>
parents: 26520
diff changeset
359 Unset the active bookmark in this repository.
24944
08ec11e3ae4c bookmarks: rename unsetcurrent to deactivate (API)
Ryan McElroy <rmcelroy@fb.com>
parents: 24832
diff changeset
360 """
27698
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
361 repo._bookmarks.active = None
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
362 repo._bookmarks._writeactive()
16191
7c75924a6926 update: delete bookmarks.current when explicitly updating to a rev (issue3276)
Idan Kamara <idankk86@gmail.com>
parents: 15984
diff changeset
363
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
364
24986
fb9b7b937b3e bookmarks: simplify iscurrent to isactivewdirparent (API)
Ryan McElroy <rmcelroy@fb.com>
parents: 24962
diff changeset
365 def isactivewdirparent(repo):
fb9b7b937b3e bookmarks: simplify iscurrent to isactivewdirparent (API)
Ryan McElroy <rmcelroy@fb.com>
parents: 24962
diff changeset
366 """
fb9b7b937b3e bookmarks: simplify iscurrent to isactivewdirparent (API)
Ryan McElroy <rmcelroy@fb.com>
parents: 24962
diff changeset
367 Tell whether the 'active' bookmark (the one that follows new commits)
fb9b7b937b3e bookmarks: simplify iscurrent to isactivewdirparent (API)
Ryan McElroy <rmcelroy@fb.com>
parents: 24962
diff changeset
368 points to one of the parents of the current working directory (wdir).
18471
2096e025a728 update: update to current bookmark if it moved out from under us (issue3682)
Kevin Bullock <kbullock@ringworld.org>
parents: 18363
diff changeset
369
24986
fb9b7b937b3e bookmarks: simplify iscurrent to isactivewdirparent (API)
Ryan McElroy <rmcelroy@fb.com>
parents: 24962
diff changeset
370 While this is normally the case, it can on occasion be false; for example,
fb9b7b937b3e bookmarks: simplify iscurrent to isactivewdirparent (API)
Ryan McElroy <rmcelroy@fb.com>
parents: 24962
diff changeset
371 immediately after a pull, the active bookmark can be moved to point
fb9b7b937b3e bookmarks: simplify iscurrent to isactivewdirparent (API)
Ryan McElroy <rmcelroy@fb.com>
parents: 24962
diff changeset
372 to a place different than the wdir. This is solved by running `hg update`.
fb9b7b937b3e bookmarks: simplify iscurrent to isactivewdirparent (API)
Ryan McElroy <rmcelroy@fb.com>
parents: 24962
diff changeset
373 """
fb9b7b937b3e bookmarks: simplify iscurrent to isactivewdirparent (API)
Ryan McElroy <rmcelroy@fb.com>
parents: 24962
diff changeset
374 mark = repo._activebookmark
18471
2096e025a728 update: update to current bookmark if it moved out from under us (issue3682)
Kevin Bullock <kbullock@ringworld.org>
parents: 18363
diff changeset
375 marks = repo._bookmarks
24986
fb9b7b937b3e bookmarks: simplify iscurrent to isactivewdirparent (API)
Ryan McElroy <rmcelroy@fb.com>
parents: 24962
diff changeset
376 parents = [p.node() for p in repo[None].parents()]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
377 return mark in marks and marks[mark] in parents
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
378
18471
2096e025a728 update: update to current bookmark if it moved out from under us (issue3682)
Kevin Bullock <kbullock@ringworld.org>
parents: 18363
diff changeset
379
33510
07b556d1b74e bookmark: split out target computation from 'deletedivergent'
Boris Feld <boris.feld@octobus.net>
parents: 33499
diff changeset
380 def divergent2delete(repo, deletefrom, bm):
07b556d1b74e bookmark: split out target computation from 'deletedivergent'
Boris Feld <boris.feld@octobus.net>
parents: 33499
diff changeset
381 """find divergent versions of bm on nodes in deletefrom.
07b556d1b74e bookmark: split out target computation from 'deletedivergent'
Boris Feld <boris.feld@octobus.net>
parents: 33499
diff changeset
382
07b556d1b74e bookmark: split out target computation from 'deletedivergent'
Boris Feld <boris.feld@octobus.net>
parents: 33499
diff changeset
383 the list of bookmark to delete."""
07b556d1b74e bookmark: split out target computation from 'deletedivergent'
Boris Feld <boris.feld@octobus.net>
parents: 33499
diff changeset
384 todelete = []
18513
37ce336ab2dd bookmarks: factor out delete divergent code
Siddharth Agarwal <sid0@fb.com>
parents: 18496
diff changeset
385 marks = repo._bookmarks
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
386 divergent = [
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
387 b for b in marks if b.split(b'@', 1)[0] == bm.split(b'@', 1)[0]
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
388 ]
18513
37ce336ab2dd bookmarks: factor out delete divergent code
Siddharth Agarwal <sid0@fb.com>
parents: 18496
diff changeset
389 for mark in divergent:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
390 if mark == b'@' or b'@' not in mark:
21843
92666a869ea4 bookmarks: avoid deleting primary bookmarks on rebase
Matt Mackall <mpm@selenic.com>
parents: 20352
diff changeset
391 # can't be divergent by definition
92666a869ea4 bookmarks: avoid deleting primary bookmarks on rebase
Matt Mackall <mpm@selenic.com>
parents: 20352
diff changeset
392 continue
18513
37ce336ab2dd bookmarks: factor out delete divergent code
Siddharth Agarwal <sid0@fb.com>
parents: 18496
diff changeset
393 if mark and marks[mark] in deletefrom:
37ce336ab2dd bookmarks: factor out delete divergent code
Siddharth Agarwal <sid0@fb.com>
parents: 18496
diff changeset
394 if mark != bm:
33510
07b556d1b74e bookmark: split out target computation from 'deletedivergent'
Boris Feld <boris.feld@octobus.net>
parents: 33499
diff changeset
395 todelete.append(mark)
07b556d1b74e bookmark: split out target computation from 'deletedivergent'
Boris Feld <boris.feld@octobus.net>
parents: 33499
diff changeset
396 return todelete
18513
37ce336ab2dd bookmarks: factor out delete divergent code
Siddharth Agarwal <sid0@fb.com>
parents: 18496
diff changeset
397
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
398
32381
b9942bc6b292 localrepo: extract bookmarkheads method to bookmarks.py
Augie Fackler <augie@google.com>
parents: 31544
diff changeset
399 def headsforactive(repo):
b9942bc6b292 localrepo: extract bookmarkheads method to bookmarks.py
Augie Fackler <augie@google.com>
parents: 31544
diff changeset
400 """Given a repo with an active bookmark, return divergent bookmark nodes.
b9942bc6b292 localrepo: extract bookmarkheads method to bookmarks.py
Augie Fackler <augie@google.com>
parents: 31544
diff changeset
401
b9942bc6b292 localrepo: extract bookmarkheads method to bookmarks.py
Augie Fackler <augie@google.com>
parents: 31544
diff changeset
402 Args:
b9942bc6b292 localrepo: extract bookmarkheads method to bookmarks.py
Augie Fackler <augie@google.com>
parents: 31544
diff changeset
403 repo: A repository with an active bookmark.
b9942bc6b292 localrepo: extract bookmarkheads method to bookmarks.py
Augie Fackler <augie@google.com>
parents: 31544
diff changeset
404
b9942bc6b292 localrepo: extract bookmarkheads method to bookmarks.py
Augie Fackler <augie@google.com>
parents: 31544
diff changeset
405 Returns:
b9942bc6b292 localrepo: extract bookmarkheads method to bookmarks.py
Augie Fackler <augie@google.com>
parents: 31544
diff changeset
406 A list of binary node ids that is the full list of other
b9942bc6b292 localrepo: extract bookmarkheads method to bookmarks.py
Augie Fackler <augie@google.com>
parents: 31544
diff changeset
407 revisions with bookmarks divergent from the active bookmark. If
b9942bc6b292 localrepo: extract bookmarkheads method to bookmarks.py
Augie Fackler <augie@google.com>
parents: 31544
diff changeset
408 there were no divergent bookmarks, then this list will contain
b9942bc6b292 localrepo: extract bookmarkheads method to bookmarks.py
Augie Fackler <augie@google.com>
parents: 31544
diff changeset
409 only one entry.
b9942bc6b292 localrepo: extract bookmarkheads method to bookmarks.py
Augie Fackler <augie@google.com>
parents: 31544
diff changeset
410 """
b9942bc6b292 localrepo: extract bookmarkheads method to bookmarks.py
Augie Fackler <augie@google.com>
parents: 31544
diff changeset
411 if not repo._activebookmark:
b9942bc6b292 localrepo: extract bookmarkheads method to bookmarks.py
Augie Fackler <augie@google.com>
parents: 31544
diff changeset
412 raise ValueError(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
413 b'headsforactive() only makes sense with an active bookmark'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
414 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
415 name = repo._activebookmark.split(b'@', 1)[0]
32381
b9942bc6b292 localrepo: extract bookmarkheads method to bookmarks.py
Augie Fackler <augie@google.com>
parents: 31544
diff changeset
416 heads = []
43106
d783f945a701 py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43089
diff changeset
417 for mark, n in pycompat.iteritems(repo._bookmarks):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
418 if mark.split(b'@', 1)[0] == name:
32381
b9942bc6b292 localrepo: extract bookmarkheads method to bookmarks.py
Augie Fackler <augie@google.com>
parents: 31544
diff changeset
419 heads.append(n)
b9942bc6b292 localrepo: extract bookmarkheads method to bookmarks.py
Augie Fackler <augie@google.com>
parents: 31544
diff changeset
420 return heads
b9942bc6b292 localrepo: extract bookmarkheads method to bookmarks.py
Augie Fackler <augie@google.com>
parents: 31544
diff changeset
421
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
422
37375
a973bb92ab71 bookmarks: drop always-None argument from calculateupdate()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37359
diff changeset
423 def calculateupdate(ui, repo):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45913
diff changeset
424 """Return a tuple (activemark, movemarkfrom) indicating the active bookmark
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45913
diff changeset
425 and where to move the active bookmark from, if needed."""
37375
a973bb92ab71 bookmarks: drop always-None argument from calculateupdate()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37359
diff changeset
426 checkout, movemarkfrom = None, None
a973bb92ab71 bookmarks: drop always-None argument from calculateupdate()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37359
diff changeset
427 activemark = repo._activebookmark
a973bb92ab71 bookmarks: drop always-None argument from calculateupdate()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37359
diff changeset
428 if isactivewdirparent(repo):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
429 movemarkfrom = repo[b'.'].node()
37375
a973bb92ab71 bookmarks: drop always-None argument from calculateupdate()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37359
diff changeset
430 elif activemark:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
431 ui.status(_(b"updating to active bookmark %s\n") % activemark)
37375
a973bb92ab71 bookmarks: drop always-None argument from calculateupdate()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37359
diff changeset
432 checkout = activemark
19523
f37b5a17e6a0 bookmarks: pull --update updates to active bookmark if it moved (issue4007)
Kevin Bullock <kbullock@ringworld.org>
parents: 19110
diff changeset
433 return (checkout, movemarkfrom)
f37b5a17e6a0 bookmarks: pull --update updates to active bookmark if it moved (issue4007)
Kevin Bullock <kbullock@ringworld.org>
parents: 19110
diff changeset
434
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
435
13352
f9cd37fca5ba bookmarks: move update into core
Matt Mackall <mpm@selenic.com>
parents: 13351
diff changeset
436 def update(repo, parents, node):
19110
741d94aa92e4 bookmarks: resolve divergent bookmarks when moving active bookmark forward
Sean Farley <sean.michael.farley@gmail.com>
parents: 18984
diff changeset
437 deletefrom = parents
13352
f9cd37fca5ba bookmarks: move update into core
Matt Mackall <mpm@selenic.com>
parents: 13351
diff changeset
438 marks = repo._bookmarks
27698
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27685
diff changeset
439 active = marks.active
25100
d6e7ac651973 bookmarks: rename current to active in variables and comments
Ryan McElroy <rmcelroy@fb.com>
parents: 25081
diff changeset
440 if not active:
16706
a270ec977ba6 bookmarks: delete divergent bookmarks on merge
David Soria Parra <dsp@php.net>
parents: 16697
diff changeset
441 return False
a270ec977ba6 bookmarks: delete divergent bookmarks on merge
David Soria Parra <dsp@php.net>
parents: 16697
diff changeset
442
33491
1adcb594eb6b bookmarks: use 'applychanges' for bookmark update
Boris Feld <boris.feld@octobus.net>
parents: 33485
diff changeset
443 bmchanges = []
25100
d6e7ac651973 bookmarks: rename current to active in variables and comments
Ryan McElroy <rmcelroy@fb.com>
parents: 25081
diff changeset
444 if marks[active] in parents:
18513
37ce336ab2dd bookmarks: factor out delete divergent code
Siddharth Agarwal <sid0@fb.com>
parents: 18496
diff changeset
445 new = repo[node]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
446 divs = [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
447 repo[marks[b]]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
448 for b in marks
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
449 if b.split(b'@', 1)[0] == active.split(b'@', 1)[0]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
450 ]
19110
741d94aa92e4 bookmarks: resolve divergent bookmarks when moving active bookmark forward
Sean Farley <sean.michael.farley@gmail.com>
parents: 18984
diff changeset
451 anc = repo.changelog.ancestors([new.rev()])
741d94aa92e4 bookmarks: resolve divergent bookmarks when moving active bookmark forward
Sean Farley <sean.michael.farley@gmail.com>
parents: 18984
diff changeset
452 deletefrom = [b.node() for b in divs if b.rev() in anc or b == new]
42978
e3bb2a58af1e bookmarks: remove changectx() method from bmstore (API)
Augie Fackler <augie@google.com>
parents: 42914
diff changeset
453 if validdest(repo, repo[marks[active]], new):
33491
1adcb594eb6b bookmarks: use 'applychanges' for bookmark update
Boris Feld <boris.feld@octobus.net>
parents: 33485
diff changeset
454 bmchanges.append((active, new.node()))
18513
37ce336ab2dd bookmarks: factor out delete divergent code
Siddharth Agarwal <sid0@fb.com>
parents: 18496
diff changeset
455
33512
1424a769f31b bookmark: use 'divergent2delete' when updating a bookmark
Boris Feld <boris.feld@octobus.net>
parents: 33510
diff changeset
456 for bm in divergent2delete(repo, deletefrom, active):
1424a769f31b bookmark: use 'divergent2delete' when updating a bookmark
Boris Feld <boris.feld@octobus.net>
parents: 33510
diff changeset
457 bmchanges.append((bm, None))
18513
37ce336ab2dd bookmarks: factor out delete divergent code
Siddharth Agarwal <sid0@fb.com>
parents: 18496
diff changeset
458
33512
1424a769f31b bookmark: use 'divergent2delete' when updating a bookmark
Boris Feld <boris.feld@octobus.net>
parents: 33510
diff changeset
459 if bmchanges:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
460 with repo.lock(), repo.transaction(b'bookmark') as tr:
33491
1adcb594eb6b bookmarks: use 'applychanges' for bookmark update
Boris Feld <boris.feld@octobus.net>
parents: 33485
diff changeset
461 marks.applychanges(repo, tr, bmchanges)
33512
1424a769f31b bookmark: use 'divergent2delete' when updating a bookmark
Boris Feld <boris.feld@octobus.net>
parents: 33510
diff changeset
462 return bool(bmchanges)
13353
689bf32b3bbd bookmarks: move pushkey functions into core
Matt Mackall <mpm@selenic.com>
parents: 13352
diff changeset
463
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
464
44371
0275000564c4 bookmarks: refactor in preparation for next commit
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44370
diff changeset
465 def isdivergent(b):
0275000564c4 bookmarks: refactor in preparation for next commit
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44370
diff changeset
466 return b'@' in b and not b.endswith(b'@')
0275000564c4 bookmarks: refactor in preparation for next commit
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44370
diff changeset
467
0275000564c4 bookmarks: refactor in preparation for next commit
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44370
diff changeset
468
30481
0a3b11a7489a bookmarks: introduce listbinbookmarks()
Stanislau Hlebik <stash@fb.com>
parents: 29354
diff changeset
469 def listbinbookmarks(repo):
0a3b11a7489a bookmarks: introduce listbinbookmarks()
Stanislau Hlebik <stash@fb.com>
parents: 29354
diff changeset
470 # We may try to list bookmarks on a repo type that does not
0a3b11a7489a bookmarks: introduce listbinbookmarks()
Stanislau Hlebik <stash@fb.com>
parents: 29354
diff changeset
471 # support it (e.g., statichttprepository).
0a3b11a7489a bookmarks: introduce listbinbookmarks()
Stanislau Hlebik <stash@fb.com>
parents: 29354
diff changeset
472 marks = getattr(repo, '_bookmarks', {})
0a3b11a7489a bookmarks: introduce listbinbookmarks()
Stanislau Hlebik <stash@fb.com>
parents: 29354
diff changeset
473
0a3b11a7489a bookmarks: introduce listbinbookmarks()
Stanislau Hlebik <stash@fb.com>
parents: 29354
diff changeset
474 hasnode = repo.changelog.hasnode
43106
d783f945a701 py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43089
diff changeset
475 for k, v in pycompat.iteritems(marks):
30481
0a3b11a7489a bookmarks: introduce listbinbookmarks()
Stanislau Hlebik <stash@fb.com>
parents: 29354
diff changeset
476 # don't expose local divergent bookmarks
44371
0275000564c4 bookmarks: refactor in preparation for next commit
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44370
diff changeset
477 if hasnode(v) and not isdivergent(k):
30481
0a3b11a7489a bookmarks: introduce listbinbookmarks()
Stanislau Hlebik <stash@fb.com>
parents: 29354
diff changeset
478 yield k, v
0a3b11a7489a bookmarks: introduce listbinbookmarks()
Stanislau Hlebik <stash@fb.com>
parents: 29354
diff changeset
479
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
480
13353
689bf32b3bbd bookmarks: move pushkey functions into core
Matt Mackall <mpm@selenic.com>
parents: 13352
diff changeset
481 def listbookmarks(repo):
689bf32b3bbd bookmarks: move pushkey functions into core
Matt Mackall <mpm@selenic.com>
parents: 13352
diff changeset
482 d = {}
30482
55ec13c82ea0 bookmarks: use listbinbookmarks() in listbookmarks()
Stanislau Hlebik <stash@fb.com>
parents: 30481
diff changeset
483 for book, node in listbinbookmarks(repo):
55ec13c82ea0 bookmarks: use listbinbookmarks() in listbookmarks()
Stanislau Hlebik <stash@fb.com>
parents: 30481
diff changeset
484 d[book] = hex(node)
13353
689bf32b3bbd bookmarks: move pushkey functions into core
Matt Mackall <mpm@selenic.com>
parents: 13352
diff changeset
485 return d
689bf32b3bbd bookmarks: move pushkey functions into core
Matt Mackall <mpm@selenic.com>
parents: 13352
diff changeset
486
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
487
13353
689bf32b3bbd bookmarks: move pushkey functions into core
Matt Mackall <mpm@selenic.com>
parents: 13352
diff changeset
488 def pushbookmark(repo, key, old, new):
44372
8407031f195f bookmarks: prevent pushes of divergent bookmarks (foo@remote)
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44371
diff changeset
489 if isdivergent(key):
8407031f195f bookmarks: prevent pushes of divergent bookmarks (foo@remote)
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44371
diff changeset
490 return False
42325
526750cdd02d bookmarks: keep bookmarks in .hg/store if new config set
Martin von Zweigbergk <martinvonz@google.com>
parents: 42312
diff changeset
491 if bookmarksinstore(repo):
526750cdd02d bookmarks: keep bookmarks in .hg/store if new config set
Martin von Zweigbergk <martinvonz@google.com>
parents: 42312
diff changeset
492 wlock = util.nullcontextmanager()
526750cdd02d bookmarks: keep bookmarks in .hg/store if new config set
Martin von Zweigbergk <martinvonz@google.com>
parents: 42312
diff changeset
493 else:
526750cdd02d bookmarks: keep bookmarks in .hg/store if new config set
Martin von Zweigbergk <martinvonz@google.com>
parents: 42312
diff changeset
494 wlock = repo.wlock()
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
495 with wlock, repo.lock(), repo.transaction(b'bookmarks') as tr:
13353
689bf32b3bbd bookmarks: move pushkey functions into core
Matt Mackall <mpm@selenic.com>
parents: 13352
diff changeset
496 marks = repo._bookmarks
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
497 existing = hex(marks.get(key, b''))
22364
5c153c69fdb2 bookmarks: allow pushkey if new equals current
Durham Goode <durham@fb.com>
parents: 21843
diff changeset
498 if existing != old and existing != new:
13353
689bf32b3bbd bookmarks: move pushkey functions into core
Matt Mackall <mpm@selenic.com>
parents: 13352
diff changeset
499 return False
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
500 if new == b'':
33485
505021482541 bookmark: use 'applychanges' when updating a bookmark through pushkey
Boris Feld <boris.feld@octobus.net>
parents: 33484
diff changeset
501 changes = [(key, None)]
13353
689bf32b3bbd bookmarks: move pushkey functions into core
Matt Mackall <mpm@selenic.com>
parents: 13352
diff changeset
502 else:
689bf32b3bbd bookmarks: move pushkey functions into core
Matt Mackall <mpm@selenic.com>
parents: 13352
diff changeset
503 if new not in repo:
689bf32b3bbd bookmarks: move pushkey functions into core
Matt Mackall <mpm@selenic.com>
parents: 13352
diff changeset
504 return False
33485
505021482541 bookmark: use 'applychanges' when updating a bookmark through pushkey
Boris Feld <boris.feld@octobus.net>
parents: 33484
diff changeset
505 changes = [(key, repo[new].node())]
505021482541 bookmark: use 'applychanges' when updating a bookmark through pushkey
Boris Feld <boris.feld@octobus.net>
parents: 33484
diff changeset
506 marks.applychanges(repo, tr, changes)
13353
689bf32b3bbd bookmarks: move pushkey functions into core
Matt Mackall <mpm@selenic.com>
parents: 13352
diff changeset
507 return True
13354
4e1ba6ead69c bookmarks: move diff to core
Matt Mackall <mpm@selenic.com>
parents: 13353
diff changeset
508
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
509
30583
8f8211903b83 bookmarks: make bookmarks.comparebookmarks accept binary nodes (API)
Stanislau Hlebik <stash@fb.com>
parents: 30582
diff changeset
510 def comparebookmarks(repo, srcmarks, dstmarks, targets=None):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45913
diff changeset
511 """Compare bookmarks between srcmarks and dstmarks
20024
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
512
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
513 This returns tuple "(addsrc, adddst, advsrc, advdst, diverge,
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
514 differ, invalid)", each are list of bookmarks below:
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
515
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
516 :addsrc: added on src side (removed on dst side, perhaps)
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
517 :adddst: added on dst side (removed on src side, perhaps)
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
518 :advsrc: advanced on src side
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
519 :advdst: advanced on dst side
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
520 :diverge: diverge
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
521 :differ: changed, but changeset referred on src is unknown on dst
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
522 :invalid: unknown on both side
23081
e62c330a044f bookmarks: explicitly track identical bookmarks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 22941
diff changeset
523 :same: same on both side
20024
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
524
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
525 Each elements of lists in result tuple is tuple "(bookmark name,
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
526 changeset ID on source side, changeset ID on destination
42914
08fce968d00b doc: fix up confusing doc comment
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 42325
diff changeset
527 side)". Each changeset ID is a binary node or None.
20024
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
528
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
529 Changeset IDs of tuples in "addsrc", "adddst", "differ" or
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
530 "invalid" list may be unknown for repo.
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
531
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
532 If "targets" is specified, only bookmarks listed in it are
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
533 examined.
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45913
diff changeset
534 """
20024
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
535
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
536 if targets:
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
537 bset = set(targets)
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
538 else:
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
539 srcmarkset = set(srcmarks)
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
540 dstmarkset = set(dstmarks)
23081
e62c330a044f bookmarks: explicitly track identical bookmarks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 22941
diff changeset
541 bset = srcmarkset | dstmarkset
20024
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
542
23081
e62c330a044f bookmarks: explicitly track identical bookmarks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 22941
diff changeset
543 results = ([], [], [], [], [], [], [], [])
20024
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
544 addsrc = results[0].append
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
545 adddst = results[1].append
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
546 advsrc = results[2].append
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
547 advdst = results[3].append
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
548 diverge = results[4].append
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
549 differ = results[5].append
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
550 invalid = results[6].append
23081
e62c330a044f bookmarks: explicitly track identical bookmarks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 22941
diff changeset
551 same = results[7].append
20024
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
552
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
553 for b in sorted(bset):
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
554 if b not in srcmarks:
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
555 if b in dstmarks:
30583
8f8211903b83 bookmarks: make bookmarks.comparebookmarks accept binary nodes (API)
Stanislau Hlebik <stash@fb.com>
parents: 30582
diff changeset
556 adddst((b, None, dstmarks[b]))
20024
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
557 else:
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
558 invalid((b, None, None))
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
559 elif b not in dstmarks:
30583
8f8211903b83 bookmarks: make bookmarks.comparebookmarks accept binary nodes (API)
Stanislau Hlebik <stash@fb.com>
parents: 30582
diff changeset
560 addsrc((b, srcmarks[b], None))
20024
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
561 else:
30583
8f8211903b83 bookmarks: make bookmarks.comparebookmarks accept binary nodes (API)
Stanislau Hlebik <stash@fb.com>
parents: 30582
diff changeset
562 scid = srcmarks[b]
8f8211903b83 bookmarks: make bookmarks.comparebookmarks accept binary nodes (API)
Stanislau Hlebik <stash@fb.com>
parents: 30582
diff changeset
563 dcid = dstmarks[b]
23081
e62c330a044f bookmarks: explicitly track identical bookmarks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 22941
diff changeset
564 if scid == dcid:
e62c330a044f bookmarks: explicitly track identical bookmarks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 22941
diff changeset
565 same((b, scid, dcid))
e62c330a044f bookmarks: explicitly track identical bookmarks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 22941
diff changeset
566 elif scid in repo and dcid in repo:
20024
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
567 sctx = repo[scid]
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
568 dctx = repo[dcid]
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
569 if sctx.rev() < dctx.rev():
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
570 if validdest(repo, sctx, dctx):
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
571 advdst((b, scid, dcid))
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
572 else:
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
573 diverge((b, scid, dcid))
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
574 else:
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
575 if validdest(repo, dctx, sctx):
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
576 advsrc((b, scid, dcid))
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
577 else:
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
578 diverge((b, scid, dcid))
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
579 else:
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
580 # it is too expensive to examine in detail, in this case
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
581 differ((b, scid, dcid))
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
582
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
583 return results
059b695150c2 bookmarks: add function to centralize the logic to compare bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19951
diff changeset
584
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
585
24355
ca4b89683078 bookmarks: reuse @number bookmark, if it refers changeset referred remotely
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24354
diff changeset
586 def _diverge(ui, b, path, localmarks, remotenode):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45913
diff changeset
587 """Return appropriate diverged bookmark for specified ``path``
24353
3f6bf9f29e7b bookmarks: prevent divergent bookmark from being updated unexpectedly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24306
diff changeset
588
3f6bf9f29e7b bookmarks: prevent divergent bookmark from being updated unexpectedly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24306
diff changeset
589 This returns None, if it is failed to assign any divergent
3f6bf9f29e7b bookmarks: prevent divergent bookmark from being updated unexpectedly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24306
diff changeset
590 bookmark name.
24355
ca4b89683078 bookmarks: reuse @number bookmark, if it refers changeset referred remotely
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24354
diff changeset
591
ca4b89683078 bookmarks: reuse @number bookmark, if it refers changeset referred remotely
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24354
diff changeset
592 This reuses already existing one with "@number" suffix, if it
ca4b89683078 bookmarks: reuse @number bookmark, if it refers changeset referred remotely
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24354
diff changeset
593 refers ``remotenode``.
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45913
diff changeset
594 """
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
595 if b == b'@':
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
596 b = b''
20025
e8a11791abfc bookmarks: rewrite "updatefromremote()" by "compare()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 20024
diff changeset
597 # try to use an @pathalias suffix
e8a11791abfc bookmarks: rewrite "updatefromremote()" by "compare()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 20024
diff changeset
598 # if an @pathalias already exists, we overwrite (update) it
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
599 if path.startswith(b"file:"):
22629
b3f74b405c20 bookmarks: fix divergent bookmark path normalization
Matt Mackall <mpm@selenic.com>
parents: 22627
diff changeset
600 path = util.url(path).path
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
601 for p, u in ui.configitems(b"paths"):
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
602 if u.startswith(b"file:"):
22629
b3f74b405c20 bookmarks: fix divergent bookmark path normalization
Matt Mackall <mpm@selenic.com>
parents: 22627
diff changeset
603 u = util.url(u).path
20025
e8a11791abfc bookmarks: rewrite "updatefromremote()" by "compare()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 20024
diff changeset
604 if path == u:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
605 return b'%s@%s' % (b, p)
24354
194e1e3ebc29 bookmarks: check @pathalias suffix before available @number for efficiency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24353
diff changeset
606
194e1e3ebc29 bookmarks: check @pathalias suffix before available @number for efficiency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24353
diff changeset
607 # assign a unique "@number" suffix newly
194e1e3ebc29 bookmarks: check @pathalias suffix before available @number for efficiency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24353
diff changeset
608 for x in range(1, 100):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
609 n = b'%s@%d' % (b, x)
24355
ca4b89683078 bookmarks: reuse @number bookmark, if it refers changeset referred remotely
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24354
diff changeset
610 if n not in localmarks or localmarks[n] == remotenode:
24354
194e1e3ebc29 bookmarks: check @pathalias suffix before available @number for efficiency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24353
diff changeset
611 return n
194e1e3ebc29 bookmarks: check @pathalias suffix before available @number for efficiency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24353
diff changeset
612
194e1e3ebc29 bookmarks: check @pathalias suffix before available @number for efficiency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24353
diff changeset
613 return None
20025
e8a11791abfc bookmarks: rewrite "updatefromremote()" by "compare()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 20024
diff changeset
614
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
615
30583
8f8211903b83 bookmarks: make bookmarks.comparebookmarks accept binary nodes (API)
Stanislau Hlebik <stash@fb.com>
parents: 30582
diff changeset
616 def unhexlifybookmarks(marks):
8f8211903b83 bookmarks: make bookmarks.comparebookmarks accept binary nodes (API)
Stanislau Hlebik <stash@fb.com>
parents: 30582
diff changeset
617 binremotemarks = {}
8f8211903b83 bookmarks: make bookmarks.comparebookmarks accept binary nodes (API)
Stanislau Hlebik <stash@fb.com>
parents: 30582
diff changeset
618 for name, node in marks.items():
8f8211903b83 bookmarks: make bookmarks.comparebookmarks accept binary nodes (API)
Stanislau Hlebik <stash@fb.com>
parents: 30582
diff changeset
619 binremotemarks[name] = bin(node)
8f8211903b83 bookmarks: make bookmarks.comparebookmarks accept binary nodes (API)
Stanislau Hlebik <stash@fb.com>
parents: 30582
diff changeset
620 return binremotemarks
8f8211903b83 bookmarks: make bookmarks.comparebookmarks accept binary nodes (API)
Stanislau Hlebik <stash@fb.com>
parents: 30582
diff changeset
621
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
622
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
623 _binaryentry = struct.Struct(b'>20sH')
35257
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
624
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
625
35257
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
626 def binaryencode(bookmarks):
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
627 """encode a '(bookmark, node)' iterable into a binary stream
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
628
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
629 the binary format is:
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
630
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
631 <node><bookmark-length><bookmark-name>
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
632
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
633 :node: is a 20 bytes binary node,
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
634 :bookmark-length: an unsigned short,
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
635 :bookmark-name: the name of the bookmark (of length <bookmark-length>)
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
636
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
637 wdirid (all bits set) will be used as a special value for "missing"
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
638 """
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
639 binarydata = []
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
640 for book, node in bookmarks:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
641 if not node: # None or ''
35257
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
642 node = wdirid
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
643 binarydata.append(_binaryentry.pack(node, len(book)))
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
644 binarydata.append(book)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
645 return b''.join(binarydata)
35257
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
646
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
647
35257
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
648 def binarydecode(stream):
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
649 """decode a binary stream into an '(bookmark, node)' iterable
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
650
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
651 the binary format is:
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
652
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
653 <node><bookmark-length><bookmark-name>
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
654
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
655 :node: is a 20 bytes binary node,
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
656 :bookmark-length: an unsigned short,
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
657 :bookmark-name: the name of the bookmark (of length <bookmark-length>))
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
658
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
659 wdirid (all bits set) will be used as a special value for "missing"
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
660 """
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
661 entrysize = _binaryentry.size
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
662 books = []
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
663 while True:
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
664 entry = stream.read(entrysize)
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
665 if len(entry) < entrysize:
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
666 if entry:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
667 raise error.Abort(_(b'bad bookmark stream'))
35257
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
668 break
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
669 node, length = _binaryentry.unpack(entry)
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
670 bookmark = stream.read(length)
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
671 if len(bookmark) < length:
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
672 if entry:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
673 raise error.Abort(_(b'bad bookmark stream'))
35257
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
674 if node == wdirid:
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
675 node = None
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
676 books.append((bookmark, node))
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
677 return books
3340d46a5c3f bookmark: add methods to binary encode and decode bookmark values
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
678
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
679
22666
0f8120c1ecf5 pull: perform bookmark updates in the transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22665
diff changeset
680 def updatefromremote(ui, repo, remotemarks, path, trfunc, explicit=()):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
681 ui.debug(b"checking for updated bookmarks\n")
17922
7f5dab94e48c bookmarks: introduce a bmstore to manage bookmark persistence
Augie Fackler <raf@durin42.com>
parents: 17918
diff changeset
682 localmarks = repo._bookmarks
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
683 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
684 addsrc,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
685 adddst,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
686 advsrc,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
687 advdst,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
688 diverge,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
689 differ,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
690 invalid,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
691 same,
30583
8f8211903b83 bookmarks: make bookmarks.comparebookmarks accept binary nodes (API)
Stanislau Hlebik <stash@fb.com>
parents: 30582
diff changeset
692 ) = comparebookmarks(repo, remotemarks, localmarks)
15614
260a6449d83a bookmarks: mark divergent bookmarks with book@pathalias when source in [paths]
Matt Mackall <mpm@selenic.com>
parents: 15613
diff changeset
693
22644
1ec7cdaf898f bookmarks: allow `updatefromremote` to be quiet
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22629
diff changeset
694 status = ui.status
1ec7cdaf898f bookmarks: allow `updatefromremote` to be quiet
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22629
diff changeset
695 warn = ui.warn
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
696 if ui.configbool(b'ui', b'quietbookmarkmove'):
22644
1ec7cdaf898f bookmarks: allow `updatefromremote` to be quiet
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22629
diff changeset
697 status = warn = ui.debug
1ec7cdaf898f bookmarks: allow `updatefromremote` to be quiet
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22629
diff changeset
698
22659
798185707833 pull: merge bookmark updates and imports
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22658
diff changeset
699 explicit = set(explicit)
20025
e8a11791abfc bookmarks: rewrite "updatefromremote()" by "compare()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 20024
diff changeset
700 changed = []
e8a11791abfc bookmarks: rewrite "updatefromremote()" by "compare()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 20024
diff changeset
701 for b, scid, dcid in addsrc:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
702 if scid in repo: # add remote bookmarks for changes we already have
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
703 changed.append(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
704 (b, scid, status, _(b"adding remote bookmark %s\n") % b)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
705 )
25564
847fce27effc bookmark: informs of failure to upgrade a bookmark
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 25100
diff changeset
706 elif b in explicit:
847fce27effc bookmark: informs of failure to upgrade a bookmark
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 25100
diff changeset
707 explicit.remove(b)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
708 ui.warn(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
709 _(b"remote bookmark %s points to locally missing %s\n")
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
710 % (b, hex(scid)[:12])
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
711 )
25564
847fce27effc bookmark: informs of failure to upgrade a bookmark
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 25100
diff changeset
712
20025
e8a11791abfc bookmarks: rewrite "updatefromremote()" by "compare()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 20024
diff changeset
713 for b, scid, dcid in advsrc:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
714 changed.append((b, scid, status, _(b"updating bookmark %s\n") % b))
22659
798185707833 pull: merge bookmark updates and imports
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22658
diff changeset
715 # remove normal movement from explicit set
798185707833 pull: merge bookmark updates and imports
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22658
diff changeset
716 explicit.difference_update(d[0] for d in changed)
798185707833 pull: merge bookmark updates and imports
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22658
diff changeset
717
20025
e8a11791abfc bookmarks: rewrite "updatefromremote()" by "compare()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 20024
diff changeset
718 for b, scid, dcid in diverge:
22659
798185707833 pull: merge bookmark updates and imports
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22658
diff changeset
719 if b in explicit:
798185707833 pull: merge bookmark updates and imports
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22658
diff changeset
720 explicit.discard(b)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
721 changed.append((b, scid, status, _(b"importing bookmark %s\n") % b))
22659
798185707833 pull: merge bookmark updates and imports
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22658
diff changeset
722 else:
30583
8f8211903b83 bookmarks: make bookmarks.comparebookmarks accept binary nodes (API)
Stanislau Hlebik <stash@fb.com>
parents: 30582
diff changeset
723 db = _diverge(ui, b, path, localmarks, scid)
24353
3f6bf9f29e7b bookmarks: prevent divergent bookmark from being updated unexpectedly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24306
diff changeset
724 if db:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
725 changed.append(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
726 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
727 db,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
728 scid,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
729 warn,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
730 _(b"divergent bookmark %s stored as %s\n") % (b, db),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
731 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
732 )
24353
3f6bf9f29e7b bookmarks: prevent divergent bookmark from being updated unexpectedly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24306
diff changeset
733 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
734 warn(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
735 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
736 b"warning: failed to assign numbered name "
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
737 b"to divergent bookmark %s\n"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
738 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
739 % b
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
740 )
22659
798185707833 pull: merge bookmark updates and imports
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22658
diff changeset
741 for b, scid, dcid in adddst + advdst:
798185707833 pull: merge bookmark updates and imports
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22658
diff changeset
742 if b in explicit:
798185707833 pull: merge bookmark updates and imports
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22658
diff changeset
743 explicit.discard(b)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
744 changed.append((b, scid, status, _(b"importing bookmark %s\n") % b))
25564
847fce27effc bookmark: informs of failure to upgrade a bookmark
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 25100
diff changeset
745 for b, scid, dcid in differ:
847fce27effc bookmark: informs of failure to upgrade a bookmark
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 25100
diff changeset
746 if b in explicit:
847fce27effc bookmark: informs of failure to upgrade a bookmark
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 25100
diff changeset
747 explicit.remove(b)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
748 ui.warn(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
749 _(b"remote bookmark %s points to locally missing %s\n")
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
750 % (b, hex(scid)[:12])
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
751 )
22659
798185707833 pull: merge bookmark updates and imports
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22658
diff changeset
752
13646
31eac42d9123 bookmarks: separate bookmarks update code from localrepo's pull.
David Soria Parra <dsp@php.net>
parents: 13627
diff changeset
753 if changed:
22666
0f8120c1ecf5 pull: perform bookmark updates in the transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22665
diff changeset
754 tr = trfunc()
33484
2a8ce4e79a47 bookmark: use 'applychanges' when updating from a remote
Boris Feld <boris.feld@octobus.net>
parents: 33483
diff changeset
755 changes = []
44824
f189c5280d48 py3: fix exception in pull when several things happen to a bookmark
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 44372
diff changeset
756 key = lambda t: (t[0], t[1] or b'')
f189c5280d48 py3: fix exception in pull when several things happen to a bookmark
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 44372
diff changeset
757 for b, node, writer, msg in sorted(changed, key=key):
33484
2a8ce4e79a47 bookmark: use 'applychanges' when updating from a remote
Boris Feld <boris.feld@octobus.net>
parents: 33483
diff changeset
758 changes.append((b, node))
20025
e8a11791abfc bookmarks: rewrite "updatefromremote()" by "compare()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 20024
diff changeset
759 writer(msg)
33484
2a8ce4e79a47 bookmark: use 'applychanges' when updating from a remote
Boris Feld <boris.feld@octobus.net>
parents: 33483
diff changeset
760 localmarks.applychanges(repo, tr, changes)
13646
31eac42d9123 bookmarks: separate bookmarks update code from localrepo's pull.
David Soria Parra <dsp@php.net>
parents: 13627
diff changeset
761
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
762
37641
add129811176 bookmarks: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37450
diff changeset
763 def incoming(ui, repo, peer):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45913
diff changeset
764 """Show bookmarks incoming from other to repo"""
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
765 ui.status(_(b"searching for changed bookmarks\n"))
24397
d0ea2028e8e6 bookmarks: add incoming() to replace diff() for incoming bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24355
diff changeset
766
37641
add129811176 bookmarks: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37450
diff changeset
767 with peer.commandexecutor() as e:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
768 remotemarks = unhexlifybookmarks(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45913
diff changeset
769 e.callcommand(
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45913
diff changeset
770 b'listkeys',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45913
diff changeset
771 {
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45913
diff changeset
772 b'namespace': b'bookmarks',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45913
diff changeset
773 },
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45913
diff changeset
774 ).result()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
775 )
37641
add129811176 bookmarks: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37450
diff changeset
776
30583
8f8211903b83 bookmarks: make bookmarks.comparebookmarks accept binary nodes (API)
Stanislau Hlebik <stash@fb.com>
parents: 30582
diff changeset
777 r = comparebookmarks(repo, remotemarks, repo._bookmarks)
24397
d0ea2028e8e6 bookmarks: add incoming() to replace diff() for incoming bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24355
diff changeset
778 addsrc, adddst, advsrc, advdst, diverge, differ, invalid, same = r
d0ea2028e8e6 bookmarks: add incoming() to replace diff() for incoming bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24355
diff changeset
779
d0ea2028e8e6 bookmarks: add incoming() to replace diff() for incoming bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24355
diff changeset
780 incomings = []
d0ea2028e8e6 bookmarks: add incoming() to replace diff() for incoming bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24355
diff changeset
781 if ui.debugflag:
d0ea2028e8e6 bookmarks: add incoming() to replace diff() for incoming bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24355
diff changeset
782 getid = lambda id: id
d0ea2028e8e6 bookmarks: add incoming() to replace diff() for incoming bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24355
diff changeset
783 else:
d0ea2028e8e6 bookmarks: add incoming() to replace diff() for incoming bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24355
diff changeset
784 getid = lambda id: id[:12]
24660
bf13b44bbb0a bookmarks: show detailed status about incoming bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24658
diff changeset
785 if ui.verbose:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
786
24660
bf13b44bbb0a bookmarks: show detailed status about incoming bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24658
diff changeset
787 def add(b, id, st):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
788 incomings.append(b" %-25s %s %s\n" % (b, getid(id), st))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
789
24660
bf13b44bbb0a bookmarks: show detailed status about incoming bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24658
diff changeset
790 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
791
24660
bf13b44bbb0a bookmarks: show detailed status about incoming bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24658
diff changeset
792 def add(b, id, st):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
793 incomings.append(b" %-25s %s\n" % (b, getid(id)))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
794
24397
d0ea2028e8e6 bookmarks: add incoming() to replace diff() for incoming bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24355
diff changeset
795 for b, scid, dcid in addsrc:
24832
5947a68fa271 bookmarks: add i18n hints to bookmark sync states
Wagner Bruna <wbruna@yahoo.com>
parents: 24661
diff changeset
796 # i18n: "added" refers to a bookmark
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
797 add(b, hex(scid), _(b'added'))
24657
3d7c512b258d bookmarks: show incoming bookmarks more exactly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24400
diff changeset
798 for b, scid, dcid in advsrc:
24832
5947a68fa271 bookmarks: add i18n hints to bookmark sync states
Wagner Bruna <wbruna@yahoo.com>
parents: 24661
diff changeset
799 # i18n: "advanced" refers to a bookmark
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
800 add(b, hex(scid), _(b'advanced'))
24657
3d7c512b258d bookmarks: show incoming bookmarks more exactly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24400
diff changeset
801 for b, scid, dcid in diverge:
24832
5947a68fa271 bookmarks: add i18n hints to bookmark sync states
Wagner Bruna <wbruna@yahoo.com>
parents: 24661
diff changeset
802 # i18n: "diverged" refers to a bookmark
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
803 add(b, hex(scid), _(b'diverged'))
24657
3d7c512b258d bookmarks: show incoming bookmarks more exactly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24400
diff changeset
804 for b, scid, dcid in differ:
24832
5947a68fa271 bookmarks: add i18n hints to bookmark sync states
Wagner Bruna <wbruna@yahoo.com>
parents: 24661
diff changeset
805 # i18n: "changed" refers to a bookmark
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
806 add(b, hex(scid), _(b'changed'))
24397
d0ea2028e8e6 bookmarks: add incoming() to replace diff() for incoming bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24355
diff changeset
807
d0ea2028e8e6 bookmarks: add incoming() to replace diff() for incoming bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24355
diff changeset
808 if not incomings:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
809 ui.status(_(b"no changed bookmarks found\n"))
24397
d0ea2028e8e6 bookmarks: add incoming() to replace diff() for incoming bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24355
diff changeset
810 return 1
d0ea2028e8e6 bookmarks: add incoming() to replace diff() for incoming bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24355
diff changeset
811
d0ea2028e8e6 bookmarks: add incoming() to replace diff() for incoming bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24355
diff changeset
812 for s in sorted(incomings):
d0ea2028e8e6 bookmarks: add incoming() to replace diff() for incoming bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24355
diff changeset
813 ui.write(s)
d0ea2028e8e6 bookmarks: add incoming() to replace diff() for incoming bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24355
diff changeset
814
d0ea2028e8e6 bookmarks: add incoming() to replace diff() for incoming bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24355
diff changeset
815 return 0
d0ea2028e8e6 bookmarks: add incoming() to replace diff() for incoming bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24355
diff changeset
816
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
817
24398
c0096a2bd3ff bookmarks: add outgoing() to replace diff() for outgoing bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24397
diff changeset
818 def outgoing(ui, repo, other):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45913
diff changeset
819 """Show bookmarks outgoing from repo to other"""
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
820 ui.status(_(b"searching for changed bookmarks\n"))
24398
c0096a2bd3ff bookmarks: add outgoing() to replace diff() for outgoing bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24397
diff changeset
821
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
822 remotemarks = unhexlifybookmarks(other.listkeys(b'bookmarks'))
30583
8f8211903b83 bookmarks: make bookmarks.comparebookmarks accept binary nodes (API)
Stanislau Hlebik <stash@fb.com>
parents: 30582
diff changeset
823 r = comparebookmarks(repo, repo._bookmarks, remotemarks)
24398
c0096a2bd3ff bookmarks: add outgoing() to replace diff() for outgoing bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24397
diff changeset
824 addsrc, adddst, advsrc, advdst, diverge, differ, invalid, same = r
c0096a2bd3ff bookmarks: add outgoing() to replace diff() for outgoing bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24397
diff changeset
825
c0096a2bd3ff bookmarks: add outgoing() to replace diff() for outgoing bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24397
diff changeset
826 outgoings = []
c0096a2bd3ff bookmarks: add outgoing() to replace diff() for outgoing bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24397
diff changeset
827 if ui.debugflag:
c0096a2bd3ff bookmarks: add outgoing() to replace diff() for outgoing bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24397
diff changeset
828 getid = lambda id: id
c0096a2bd3ff bookmarks: add outgoing() to replace diff() for outgoing bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24397
diff changeset
829 else:
c0096a2bd3ff bookmarks: add outgoing() to replace diff() for outgoing bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24397
diff changeset
830 getid = lambda id: id[:12]
24661
8cf70c97a6e1 bookmarks: show detailed status about outgoing bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24660
diff changeset
831 if ui.verbose:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
832
24661
8cf70c97a6e1 bookmarks: show detailed status about outgoing bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24660
diff changeset
833 def add(b, id, st):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
834 outgoings.append(b" %-25s %s %s\n" % (b, getid(id), st))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
835
24661
8cf70c97a6e1 bookmarks: show detailed status about outgoing bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24660
diff changeset
836 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
837
24661
8cf70c97a6e1 bookmarks: show detailed status about outgoing bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24660
diff changeset
838 def add(b, id, st):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
839 outgoings.append(b" %-25s %s\n" % (b, getid(id)))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
840
24398
c0096a2bd3ff bookmarks: add outgoing() to replace diff() for outgoing bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24397
diff changeset
841 for b, scid, dcid in addsrc:
24832
5947a68fa271 bookmarks: add i18n hints to bookmark sync states
Wagner Bruna <wbruna@yahoo.com>
parents: 24661
diff changeset
842 # i18n: "added refers to a bookmark
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
843 add(b, hex(scid), _(b'added'))
24658
8ea893ab0572 bookmarks: show outgoing bookmarks more exactly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24657
diff changeset
844 for b, scid, dcid in adddst:
24832
5947a68fa271 bookmarks: add i18n hints to bookmark sync states
Wagner Bruna <wbruna@yahoo.com>
parents: 24661
diff changeset
845 # i18n: "deleted" refers to a bookmark
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
846 add(b, b' ' * 40, _(b'deleted'))
24658
8ea893ab0572 bookmarks: show outgoing bookmarks more exactly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24657
diff changeset
847 for b, scid, dcid in advsrc:
24832
5947a68fa271 bookmarks: add i18n hints to bookmark sync states
Wagner Bruna <wbruna@yahoo.com>
parents: 24661
diff changeset
848 # i18n: "advanced" refers to a bookmark
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
849 add(b, hex(scid), _(b'advanced'))
24658
8ea893ab0572 bookmarks: show outgoing bookmarks more exactly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24657
diff changeset
850 for b, scid, dcid in diverge:
24832
5947a68fa271 bookmarks: add i18n hints to bookmark sync states
Wagner Bruna <wbruna@yahoo.com>
parents: 24661
diff changeset
851 # i18n: "diverged" refers to a bookmark
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
852 add(b, hex(scid), _(b'diverged'))
24658
8ea893ab0572 bookmarks: show outgoing bookmarks more exactly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24657
diff changeset
853 for b, scid, dcid in differ:
24832
5947a68fa271 bookmarks: add i18n hints to bookmark sync states
Wagner Bruna <wbruna@yahoo.com>
parents: 24661
diff changeset
854 # i18n: "changed" refers to a bookmark
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
855 add(b, hex(scid), _(b'changed'))
24398
c0096a2bd3ff bookmarks: add outgoing() to replace diff() for outgoing bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24397
diff changeset
856
c0096a2bd3ff bookmarks: add outgoing() to replace diff() for outgoing bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24397
diff changeset
857 if not outgoings:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
858 ui.status(_(b"no changed bookmarks found\n"))
24398
c0096a2bd3ff bookmarks: add outgoing() to replace diff() for outgoing bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24397
diff changeset
859 return 1
c0096a2bd3ff bookmarks: add outgoing() to replace diff() for outgoing bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24397
diff changeset
860
c0096a2bd3ff bookmarks: add outgoing() to replace diff() for outgoing bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24397
diff changeset
861 for s in sorted(outgoings):
c0096a2bd3ff bookmarks: add outgoing() to replace diff() for outgoing bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24397
diff changeset
862 ui.write(s)
c0096a2bd3ff bookmarks: add outgoing() to replace diff() for outgoing bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24397
diff changeset
863
c0096a2bd3ff bookmarks: add outgoing() to replace diff() for outgoing bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24397
diff changeset
864 return 0
c0096a2bd3ff bookmarks: add outgoing() to replace diff() for outgoing bookmarks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24397
diff changeset
865
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
866
37641
add129811176 bookmarks: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37450
diff changeset
867 def summary(repo, peer):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45913
diff changeset
868 """Compare bookmarks between repo and other for "hg summary" output
24400
03c84c966ef5 bookmarks: rewrite comparing bookmarks in commands.summary() by compare()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24399
diff changeset
869
03c84c966ef5 bookmarks: rewrite comparing bookmarks in commands.summary() by compare()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24399
diff changeset
870 This returns "(# of incoming, # of outgoing)" tuple.
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45913
diff changeset
871 """
37641
add129811176 bookmarks: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37450
diff changeset
872 with peer.commandexecutor() as e:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
873 remotemarks = unhexlifybookmarks(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45913
diff changeset
874 e.callcommand(
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45913
diff changeset
875 b'listkeys',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45913
diff changeset
876 {
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45913
diff changeset
877 b'namespace': b'bookmarks',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45913
diff changeset
878 },
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45913
diff changeset
879 ).result()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
880 )
37641
add129811176 bookmarks: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37450
diff changeset
881
30583
8f8211903b83 bookmarks: make bookmarks.comparebookmarks accept binary nodes (API)
Stanislau Hlebik <stash@fb.com>
parents: 30582
diff changeset
882 r = comparebookmarks(repo, remotemarks, repo._bookmarks)
24400
03c84c966ef5 bookmarks: rewrite comparing bookmarks in commands.summary() by compare()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24399
diff changeset
883 addsrc, adddst, advsrc, advdst, diverge, differ, invalid, same = r
03c84c966ef5 bookmarks: rewrite comparing bookmarks in commands.summary() by compare()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24399
diff changeset
884 return (len(addsrc), len(adddst))
03c84c966ef5 bookmarks: rewrite comparing bookmarks in commands.summary() by compare()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24399
diff changeset
885
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
886
17550
fc530080013b bookmarks: extract valid destination logic in a dedicated function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 17425
diff changeset
887 def validdest(repo, old, new):
fc530080013b bookmarks: extract valid destination logic in a dedicated function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 17425
diff changeset
888 """Is the new bookmark destination a valid update from the old one"""
18008
cf91b36f368c clfilter: `bookmark.validdest` should run on unfiltered repo
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 17922
diff changeset
889 repo = repo.unfiltered()
17551
a7b3fdaf768d bookmark: take successors into account when updating (issue3561)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 17550
diff changeset
890 if old == new:
a7b3fdaf768d bookmark: take successors into account when updating (issue3561)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 17550
diff changeset
891 # Old == new -> nothing to update.
17625
b83c18204c36 bookmarks: avoid redundant creation/assignment of "validdests" in "validdest()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 17551
diff changeset
892 return False
17551
a7b3fdaf768d bookmark: take successors into account when updating (issue3561)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 17550
diff changeset
893 elif not old:
a7b3fdaf768d bookmark: take successors into account when updating (issue3561)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 17550
diff changeset
894 # old is nullrev, anything is valid.
a7b3fdaf768d bookmark: take successors into account when updating (issue3561)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 17550
diff changeset
895 # (new != nullrev has been excluded by the previous check)
17625
b83c18204c36 bookmarks: avoid redundant creation/assignment of "validdests" in "validdest()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 17551
diff changeset
896 return True
17551
a7b3fdaf768d bookmark: take successors into account when updating (issue3561)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 17550
diff changeset
897 elif repo.obsstore:
33146
7017567ebdf2 obsutil: move 'foreground' to the new modules
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 33092
diff changeset
898 return new.node() in obsutil.foreground(repo, [old.node()])
17551
a7b3fdaf768d bookmark: take successors into account when updating (issue3561)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 17550
diff changeset
899 else:
24180
d8e0c591781c spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents: 23877
diff changeset
900 # still an independent clause as it is lazier (and therefore faster)
38670
fbec9c0b32d3 context: rename descendant() to isancestorof()
Martin von Zweigbergk <martinvonz@google.com>
parents: 38538
diff changeset
901 return old.isancestorof(new)
32955
70661eeb8ddb commands: move checkformat to bookmarks module
Sean Farley <sean@farley.io>
parents: 32794
diff changeset
902
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
903
32955
70661eeb8ddb commands: move checkformat to bookmarks module
Sean Farley <sean@farley.io>
parents: 32794
diff changeset
904 def checkformat(repo, mark):
70661eeb8ddb commands: move checkformat to bookmarks module
Sean Farley <sean@farley.io>
parents: 32794
diff changeset
905 """return a valid version of a potential bookmark name
70661eeb8ddb commands: move checkformat to bookmarks module
Sean Farley <sean@farley.io>
parents: 32794
diff changeset
906
70661eeb8ddb commands: move checkformat to bookmarks module
Sean Farley <sean@farley.io>
parents: 32794
diff changeset
907 Raises an abort error if the bookmark name is not valid.
70661eeb8ddb commands: move checkformat to bookmarks module
Sean Farley <sean@farley.io>
parents: 32794
diff changeset
908 """
70661eeb8ddb commands: move checkformat to bookmarks module
Sean Farley <sean@farley.io>
parents: 32794
diff changeset
909 mark = mark.strip()
70661eeb8ddb commands: move checkformat to bookmarks module
Sean Farley <sean@farley.io>
parents: 32794
diff changeset
910 if not mark:
45913
9acbe30953e8 errors: raise InputError on bad bookmark argument
Martin von Zweigbergk <martinvonz@google.com>
parents: 44824
diff changeset
911 raise error.InputError(
43117
8ff1ecfadcd1 cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents: 43106
diff changeset
912 _(b"bookmark names cannot consist entirely of whitespace")
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
913 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
914 scmutil.checknewlabel(repo, mark, b'bookmark')
32955
70661eeb8ddb commands: move checkformat to bookmarks module
Sean Farley <sean@farley.io>
parents: 32794
diff changeset
915 return mark
33005
9343fce87789 bookmarks: factor out delete logic from commands
Sean Farley <sean@farley.io>
parents: 32956
diff changeset
916
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
917
33005
9343fce87789 bookmarks: factor out delete logic from commands
Sean Farley <sean@farley.io>
parents: 32956
diff changeset
918 def delete(repo, tr, names):
9343fce87789 bookmarks: factor out delete logic from commands
Sean Farley <sean@farley.io>
parents: 32956
diff changeset
919 """remove a mark from the bookmark store
9343fce87789 bookmarks: factor out delete logic from commands
Sean Farley <sean@farley.io>
parents: 32956
diff changeset
920
9343fce87789 bookmarks: factor out delete logic from commands
Sean Farley <sean@farley.io>
parents: 32956
diff changeset
921 Raises an abort error if mark does not exist.
9343fce87789 bookmarks: factor out delete logic from commands
Sean Farley <sean@farley.io>
parents: 32956
diff changeset
922 """
9343fce87789 bookmarks: factor out delete logic from commands
Sean Farley <sean@farley.io>
parents: 32956
diff changeset
923 marks = repo._bookmarks
33481
67b5f81f17cf bookmark: use 'applychanges' for bookmark deletion
Boris Feld <boris.feld@octobus.net>
parents: 33480
diff changeset
924 changes = []
33005
9343fce87789 bookmarks: factor out delete logic from commands
Sean Farley <sean@farley.io>
parents: 32956
diff changeset
925 for mark in names:
9343fce87789 bookmarks: factor out delete logic from commands
Sean Farley <sean@farley.io>
parents: 32956
diff changeset
926 if mark not in marks:
45913
9acbe30953e8 errors: raise InputError on bad bookmark argument
Martin von Zweigbergk <martinvonz@google.com>
parents: 44824
diff changeset
927 raise error.InputError(_(b"bookmark '%s' does not exist") % mark)
33005
9343fce87789 bookmarks: factor out delete logic from commands
Sean Farley <sean@farley.io>
parents: 32956
diff changeset
928 if mark == repo._activebookmark:
9343fce87789 bookmarks: factor out delete logic from commands
Sean Farley <sean@farley.io>
parents: 32956
diff changeset
929 deactivate(repo)
33481
67b5f81f17cf bookmark: use 'applychanges' for bookmark deletion
Boris Feld <boris.feld@octobus.net>
parents: 33480
diff changeset
930 changes.append((mark, None))
67b5f81f17cf bookmark: use 'applychanges' for bookmark deletion
Boris Feld <boris.feld@octobus.net>
parents: 33480
diff changeset
931 marks.applychanges(repo, tr, changes)
33006
e0a8dd6c87c7 bookmarks: factor out rename logic from commands
Sean Farley <sean@farley.io>
parents: 33005
diff changeset
932
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
933
33006
e0a8dd6c87c7 bookmarks: factor out rename logic from commands
Sean Farley <sean@farley.io>
parents: 33005
diff changeset
934 def rename(repo, tr, old, new, force=False, inactive=False):
e0a8dd6c87c7 bookmarks: factor out rename logic from commands
Sean Farley <sean@farley.io>
parents: 33005
diff changeset
935 """rename a bookmark from old to new
e0a8dd6c87c7 bookmarks: factor out rename logic from commands
Sean Farley <sean@farley.io>
parents: 33005
diff changeset
936
e0a8dd6c87c7 bookmarks: factor out rename logic from commands
Sean Farley <sean@farley.io>
parents: 33005
diff changeset
937 If force is specified, then the new name can overwrite an existing
e0a8dd6c87c7 bookmarks: factor out rename logic from commands
Sean Farley <sean@farley.io>
parents: 33005
diff changeset
938 bookmark.
e0a8dd6c87c7 bookmarks: factor out rename logic from commands
Sean Farley <sean@farley.io>
parents: 33005
diff changeset
939
e0a8dd6c87c7 bookmarks: factor out rename logic from commands
Sean Farley <sean@farley.io>
parents: 33005
diff changeset
940 If inactive is specified, then do not activate the new bookmark.
e0a8dd6c87c7 bookmarks: factor out rename logic from commands
Sean Farley <sean@farley.io>
parents: 33005
diff changeset
941
e0a8dd6c87c7 bookmarks: factor out rename logic from commands
Sean Farley <sean@farley.io>
parents: 33005
diff changeset
942 Raises an abort error if old is not in the bookmark store.
e0a8dd6c87c7 bookmarks: factor out rename logic from commands
Sean Farley <sean@farley.io>
parents: 33005
diff changeset
943 """
e0a8dd6c87c7 bookmarks: factor out rename logic from commands
Sean Farley <sean@farley.io>
parents: 33005
diff changeset
944 marks = repo._bookmarks
e0a8dd6c87c7 bookmarks: factor out rename logic from commands
Sean Farley <sean@farley.io>
parents: 33005
diff changeset
945 mark = checkformat(repo, new)
e0a8dd6c87c7 bookmarks: factor out rename logic from commands
Sean Farley <sean@farley.io>
parents: 33005
diff changeset
946 if old not in marks:
45913
9acbe30953e8 errors: raise InputError on bad bookmark argument
Martin von Zweigbergk <martinvonz@google.com>
parents: 44824
diff changeset
947 raise error.InputError(_(b"bookmark '%s' does not exist") % old)
33513
904894edb205 bookmark: use 'divergent2delete' in checkconflict
Boris Feld <boris.feld@octobus.net>
parents: 33512
diff changeset
948 changes = []
904894edb205 bookmark: use 'divergent2delete' in checkconflict
Boris Feld <boris.feld@octobus.net>
parents: 33512
diff changeset
949 for bm in marks.checkconflict(mark, force):
904894edb205 bookmark: use 'divergent2delete' in checkconflict
Boris Feld <boris.feld@octobus.net>
parents: 33512
diff changeset
950 changes.append((bm, None))
904894edb205 bookmark: use 'divergent2delete' in checkconflict
Boris Feld <boris.feld@octobus.net>
parents: 33512
diff changeset
951 changes.extend([(mark, marks[old]), (old, None)])
33482
916d4cde530e bookmark: use 'applychanges' for bookmark renaming
Boris Feld <boris.feld@octobus.net>
parents: 33481
diff changeset
952 marks.applychanges(repo, tr, changes)
33006
e0a8dd6c87c7 bookmarks: factor out rename logic from commands
Sean Farley <sean@farley.io>
parents: 33005
diff changeset
953 if repo._activebookmark == old and not inactive:
e0a8dd6c87c7 bookmarks: factor out rename logic from commands
Sean Farley <sean@farley.io>
parents: 33005
diff changeset
954 activate(repo, mark)
33007
ee081f91b179 bookmarks: factor out adding a list of bookmarks logic from commands
Sean Farley <sean@farley.io>
parents: 33006
diff changeset
955
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
956
33007
ee081f91b179 bookmarks: factor out adding a list of bookmarks logic from commands
Sean Farley <sean@farley.io>
parents: 33006
diff changeset
957 def addbookmarks(repo, tr, names, rev=None, force=False, inactive=False):
ee081f91b179 bookmarks: factor out adding a list of bookmarks logic from commands
Sean Farley <sean@farley.io>
parents: 33006
diff changeset
958 """add a list of bookmarks
ee081f91b179 bookmarks: factor out adding a list of bookmarks logic from commands
Sean Farley <sean@farley.io>
parents: 33006
diff changeset
959
ee081f91b179 bookmarks: factor out adding a list of bookmarks logic from commands
Sean Farley <sean@farley.io>
parents: 33006
diff changeset
960 If force is specified, then the new name can overwrite an existing
ee081f91b179 bookmarks: factor out adding a list of bookmarks logic from commands
Sean Farley <sean@farley.io>
parents: 33006
diff changeset
961 bookmark.
ee081f91b179 bookmarks: factor out adding a list of bookmarks logic from commands
Sean Farley <sean@farley.io>
parents: 33006
diff changeset
962
ee081f91b179 bookmarks: factor out adding a list of bookmarks logic from commands
Sean Farley <sean@farley.io>
parents: 33006
diff changeset
963 If inactive is specified, then do not activate any bookmark. Otherwise, the
ee081f91b179 bookmarks: factor out adding a list of bookmarks logic from commands
Sean Farley <sean@farley.io>
parents: 33006
diff changeset
964 first bookmark is activated.
ee081f91b179 bookmarks: factor out adding a list of bookmarks logic from commands
Sean Farley <sean@farley.io>
parents: 33006
diff changeset
965
ee081f91b179 bookmarks: factor out adding a list of bookmarks logic from commands
Sean Farley <sean@farley.io>
parents: 33006
diff changeset
966 Raises an abort error if old is not in the bookmark store.
ee081f91b179 bookmarks: factor out adding a list of bookmarks logic from commands
Sean Farley <sean@farley.io>
parents: 33006
diff changeset
967 """
ee081f91b179 bookmarks: factor out adding a list of bookmarks logic from commands
Sean Farley <sean@farley.io>
parents: 33006
diff changeset
968 marks = repo._bookmarks
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
969 cur = repo[b'.'].node()
33007
ee081f91b179 bookmarks: factor out adding a list of bookmarks logic from commands
Sean Farley <sean@farley.io>
parents: 33006
diff changeset
970 newact = None
33483
146c0371eadf bookmark: use 'applychanges' for adding new bookmark
Boris Feld <boris.feld@octobus.net>
parents: 33482
diff changeset
971 changes = []
35647
fc39e2bfcd70 bookmarks: calculate visibility exceptions only once
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35611
diff changeset
972
fc39e2bfcd70 bookmarks: calculate visibility exceptions only once
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35611
diff changeset
973 # unhide revs if any
fc39e2bfcd70 bookmarks: calculate visibility exceptions only once
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35611
diff changeset
974 if rev:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
975 repo = scmutil.unhidehashlikerevs(repo, [rev], b'nowarn')
43600
fe2e0d100187 bookmarks: use changectx instead of remembering hex of hidden revision
Yuya Nishihara <yuya@tcha.org>
parents: 43599
diff changeset
976
43601
a80d5ddecc2d bookmarks: accept explicit -r 'wdir()' when adding new bookmarks (issue6218)
Yuya Nishihara <yuya@tcha.org>
parents: 43600
diff changeset
977 ctx = scmutil.revsingle(repo, rev, None)
a80d5ddecc2d bookmarks: accept explicit -r 'wdir()' when adding new bookmarks (issue6218)
Yuya Nishihara <yuya@tcha.org>
parents: 43600
diff changeset
978 # bookmarking wdir means creating a bookmark on p1 and activating it
a80d5ddecc2d bookmarks: accept explicit -r 'wdir()' when adding new bookmarks (issue6218)
Yuya Nishihara <yuya@tcha.org>
parents: 43600
diff changeset
979 activatenew = not inactive and ctx.rev() is None
a80d5ddecc2d bookmarks: accept explicit -r 'wdir()' when adding new bookmarks (issue6218)
Yuya Nishihara <yuya@tcha.org>
parents: 43600
diff changeset
980 if ctx.node() is None:
a80d5ddecc2d bookmarks: accept explicit -r 'wdir()' when adding new bookmarks (issue6218)
Yuya Nishihara <yuya@tcha.org>
parents: 43600
diff changeset
981 ctx = ctx.p1()
43600
fe2e0d100187 bookmarks: use changectx instead of remembering hex of hidden revision
Yuya Nishihara <yuya@tcha.org>
parents: 43599
diff changeset
982 tgt = ctx.node()
43601
a80d5ddecc2d bookmarks: accept explicit -r 'wdir()' when adding new bookmarks (issue6218)
Yuya Nishihara <yuya@tcha.org>
parents: 43600
diff changeset
983 assert tgt
35647
fc39e2bfcd70 bookmarks: calculate visibility exceptions only once
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35611
diff changeset
984
33007
ee081f91b179 bookmarks: factor out adding a list of bookmarks logic from commands
Sean Farley <sean@farley.io>
parents: 33006
diff changeset
985 for mark in names:
ee081f91b179 bookmarks: factor out adding a list of bookmarks logic from commands
Sean Farley <sean@farley.io>
parents: 33006
diff changeset
986 mark = checkformat(repo, mark)
ee081f91b179 bookmarks: factor out adding a list of bookmarks logic from commands
Sean Farley <sean@farley.io>
parents: 33006
diff changeset
987 if newact is None:
ee081f91b179 bookmarks: factor out adding a list of bookmarks logic from commands
Sean Farley <sean@farley.io>
parents: 33006
diff changeset
988 newact = mark
ee081f91b179 bookmarks: factor out adding a list of bookmarks logic from commands
Sean Farley <sean@farley.io>
parents: 33006
diff changeset
989 if inactive and mark == repo._activebookmark:
ee081f91b179 bookmarks: factor out adding a list of bookmarks logic from commands
Sean Farley <sean@farley.io>
parents: 33006
diff changeset
990 deactivate(repo)
43598
2a8cd7edf409 bookmarks: fix handling of multiple bookmarks with one to be deactivated
Yuya Nishihara <yuya@tcha.org>
parents: 43544
diff changeset
991 continue
33513
904894edb205 bookmark: use 'divergent2delete' in checkconflict
Boris Feld <boris.feld@octobus.net>
parents: 33512
diff changeset
992 for bm in marks.checkconflict(mark, force, tgt):
904894edb205 bookmark: use 'divergent2delete' in checkconflict
Boris Feld <boris.feld@octobus.net>
parents: 33512
diff changeset
993 changes.append((bm, None))
33483
146c0371eadf bookmark: use 'applychanges' for adding new bookmark
Boris Feld <boris.feld@octobus.net>
parents: 33482
diff changeset
994 changes.append((mark, tgt))
35647
fc39e2bfcd70 bookmarks: calculate visibility exceptions only once
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35611
diff changeset
995
43598
2a8cd7edf409 bookmarks: fix handling of multiple bookmarks with one to be deactivated
Yuya Nishihara <yuya@tcha.org>
parents: 43544
diff changeset
996 # nothing changed but for the one deactivated above
2a8cd7edf409 bookmarks: fix handling of multiple bookmarks with one to be deactivated
Yuya Nishihara <yuya@tcha.org>
parents: 43544
diff changeset
997 if not changes:
2a8cd7edf409 bookmarks: fix handling of multiple bookmarks with one to be deactivated
Yuya Nishihara <yuya@tcha.org>
parents: 43544
diff changeset
998 return
2a8cd7edf409 bookmarks: fix handling of multiple bookmarks with one to be deactivated
Yuya Nishihara <yuya@tcha.org>
parents: 43544
diff changeset
999
43600
fe2e0d100187 bookmarks: use changectx instead of remembering hex of hidden revision
Yuya Nishihara <yuya@tcha.org>
parents: 43599
diff changeset
1000 if ctx.hidden():
fe2e0d100187 bookmarks: use changectx instead of remembering hex of hidden revision
Yuya Nishihara <yuya@tcha.org>
parents: 43599
diff changeset
1001 repo.ui.warn(_(b"bookmarking hidden changeset %s\n") % ctx.hex()[:12])
35712
a1a5c3842b6f bookmarks: display the obsfate of hidden revision we create a bookmark on
Boris Feld <boris.feld@octobus.net>
parents: 35679
diff changeset
1002
a1a5c3842b6f bookmarks: display the obsfate of hidden revision we create a bookmark on
Boris Feld <boris.feld@octobus.net>
parents: 35679
diff changeset
1003 if ctx.obsolete():
43600
fe2e0d100187 bookmarks: use changectx instead of remembering hex of hidden revision
Yuya Nishihara <yuya@tcha.org>
parents: 43599
diff changeset
1004 msg = obsutil._getfilteredreason(repo, ctx.hex()[:12], ctx)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1005 repo.ui.warn(b"(%s)\n" % msg)
35712
a1a5c3842b6f bookmarks: display the obsfate of hidden revision we create a bookmark on
Boris Feld <boris.feld@octobus.net>
parents: 35679
diff changeset
1006
33483
146c0371eadf bookmark: use 'applychanges' for adding new bookmark
Boris Feld <boris.feld@octobus.net>
parents: 33482
diff changeset
1007 marks.applychanges(repo, tr, changes)
43601
a80d5ddecc2d bookmarks: accept explicit -r 'wdir()' when adding new bookmarks (issue6218)
Yuya Nishihara <yuya@tcha.org>
parents: 43600
diff changeset
1008 if activatenew and cur == marks[newact]:
33007
ee081f91b179 bookmarks: factor out adding a list of bookmarks logic from commands
Sean Farley <sean@farley.io>
parents: 33006
diff changeset
1009 activate(repo, newact)
ee081f91b179 bookmarks: factor out adding a list of bookmarks logic from commands
Sean Farley <sean@farley.io>
parents: 33006
diff changeset
1010 elif cur != tgt and newact == repo._activebookmark:
ee081f91b179 bookmarks: factor out adding a list of bookmarks logic from commands
Sean Farley <sean@farley.io>
parents: 33006
diff changeset
1011 deactivate(repo)
33010
f5f4c72de71a bookmarks: factor out bookmark printing from commands
Sean Farley <sean@farley.io>
parents: 33009
diff changeset
1012
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
1013
39746
25cc5616adc9 bookmarks: pass in formatter to printbookmarks() instead of opts (API)
Yuya Nishihara <yuya@tcha.org>
parents: 39624
diff changeset
1014 def _printbookmarks(ui, repo, fm, bmarks):
33011
8299eb9b08c7 bookmarks: factor method _printer out of for loop in printbookmarks
Sean Farley <sean@farley.io>
parents: 33010
diff changeset
1015 """private method to print bookmarks
8299eb9b08c7 bookmarks: factor method _printer out of for loop in printbookmarks
Sean Farley <sean@farley.io>
parents: 33010
diff changeset
1016
8299eb9b08c7 bookmarks: factor method _printer out of for loop in printbookmarks
Sean Farley <sean@farley.io>
parents: 33010
diff changeset
1017 Provides a way for extensions to control how bookmarks are printed (e.g.
8299eb9b08c7 bookmarks: factor method _printer out of for loop in printbookmarks
Sean Farley <sean@farley.io>
parents: 33010
diff changeset
1018 prepend or postpend names)
8299eb9b08c7 bookmarks: factor method _printer out of for loop in printbookmarks
Sean Farley <sean@farley.io>
parents: 33010
diff changeset
1019 """
8299eb9b08c7 bookmarks: factor method _printer out of for loop in printbookmarks
Sean Farley <sean@farley.io>
parents: 33010
diff changeset
1020 hexfn = fm.hexfunc
8299eb9b08c7 bookmarks: factor method _printer out of for loop in printbookmarks
Sean Farley <sean@farley.io>
parents: 33010
diff changeset
1021 if len(bmarks) == 0 and fm.isplain():
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1022 ui.status(_(b"no bookmarks set\n"))
43106
d783f945a701 py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43089
diff changeset
1023 for bmark, (n, prefix, label) in sorted(pycompat.iteritems(bmarks)):
33011
8299eb9b08c7 bookmarks: factor method _printer out of for loop in printbookmarks
Sean Farley <sean@farley.io>
parents: 33010
diff changeset
1024 fm.startitem()
39624
713085b45810 formatter: replace contexthint() with demand loading of ctx object
Yuya Nishihara <yuya@tcha.org>
parents: 39304
diff changeset
1025 fm.context(repo=repo)
33011
8299eb9b08c7 bookmarks: factor method _printer out of for loop in printbookmarks
Sean Farley <sean@farley.io>
parents: 33010
diff changeset
1026 if not ui.quiet:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1027 fm.plain(b' %s ' % prefix, label=label)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1028 fm.write(b'bookmark', b'%s', bmark, label=label)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1029 pad = b" " * (25 - encoding.colwidth(bmark))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
1030 fm.condwrite(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
1031 not ui.quiet,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1032 b'rev node',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1033 pad + b' %d:%s',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
1034 repo.changelog.rev(n),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
1035 hexfn(n),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
1036 label=label,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
1037 )
33011
8299eb9b08c7 bookmarks: factor method _printer out of for loop in printbookmarks
Sean Farley <sean@farley.io>
parents: 33010
diff changeset
1038 fm.data(active=(activebookmarklabel in label))
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1039 fm.plain(b'\n')
33011
8299eb9b08c7 bookmarks: factor method _printer out of for loop in printbookmarks
Sean Farley <sean@farley.io>
parents: 33010
diff changeset
1040
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
1041
39753
b05b4b91de3d bookmarks: add explicit option to list bookmarks of the given names
Yuya Nishihara <yuya@tcha.org>
parents: 39746
diff changeset
1042 def printbookmarks(ui, repo, fm, names=None):
39746
25cc5616adc9 bookmarks: pass in formatter to printbookmarks() instead of opts (API)
Yuya Nishihara <yuya@tcha.org>
parents: 39624
diff changeset
1043 """print bookmarks by the given formatter
33010
f5f4c72de71a bookmarks: factor out bookmark printing from commands
Sean Farley <sean@farley.io>
parents: 33009
diff changeset
1044
f5f4c72de71a bookmarks: factor out bookmark printing from commands
Sean Farley <sean@farley.io>
parents: 33009
diff changeset
1045 Provides a way for extensions to control how bookmarks are printed.
f5f4c72de71a bookmarks: factor out bookmark printing from commands
Sean Farley <sean@farley.io>
parents: 33009
diff changeset
1046 """
f5f4c72de71a bookmarks: factor out bookmark printing from commands
Sean Farley <sean@farley.io>
parents: 33009
diff changeset
1047 marks = repo._bookmarks
33011
8299eb9b08c7 bookmarks: factor method _printer out of for loop in printbookmarks
Sean Farley <sean@farley.io>
parents: 33010
diff changeset
1048 bmarks = {}
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
1049 for bmark in names or marks:
39753
b05b4b91de3d bookmarks: add explicit option to list bookmarks of the given names
Yuya Nishihara <yuya@tcha.org>
parents: 39746
diff changeset
1050 if bmark not in marks:
45913
9acbe30953e8 errors: raise InputError on bad bookmark argument
Martin von Zweigbergk <martinvonz@google.com>
parents: 44824
diff changeset
1051 raise error.InputError(_(b"bookmark '%s' does not exist") % bmark)
33010
f5f4c72de71a bookmarks: factor out bookmark printing from commands
Sean Farley <sean@farley.io>
parents: 33009
diff changeset
1052 active = repo._activebookmark
f5f4c72de71a bookmarks: factor out bookmark printing from commands
Sean Farley <sean@farley.io>
parents: 33009
diff changeset
1053 if bmark == active:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1054 prefix, label = b'*', activebookmarklabel
33010
f5f4c72de71a bookmarks: factor out bookmark printing from commands
Sean Farley <sean@farley.io>
parents: 33009
diff changeset
1055 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1056 prefix, label = b' ', b''
33010
f5f4c72de71a bookmarks: factor out bookmark printing from commands
Sean Farley <sean@farley.io>
parents: 33009
diff changeset
1057
39753
b05b4b91de3d bookmarks: add explicit option to list bookmarks of the given names
Yuya Nishihara <yuya@tcha.org>
parents: 39746
diff changeset
1058 bmarks[bmark] = (marks[bmark], prefix, label)
39746
25cc5616adc9 bookmarks: pass in formatter to printbookmarks() instead of opts (API)
Yuya Nishihara <yuya@tcha.org>
parents: 39624
diff changeset
1059 _printbookmarks(ui, repo, fm, bmarks)
34708
ee5f0d047b41 bookmark: add a dedicated txnclose-bookmark hook
Boris Feld <boris.feld@octobus.net>
parents: 33518
diff changeset
1060
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42978
diff changeset
1061
34708
ee5f0d047b41 bookmark: add a dedicated txnclose-bookmark hook
Boris Feld <boris.feld@octobus.net>
parents: 33518
diff changeset
1062 def preparehookargs(name, old, new):
ee5f0d047b41 bookmark: add a dedicated txnclose-bookmark hook
Boris Feld <boris.feld@octobus.net>
parents: 33518
diff changeset
1063 if new is None:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1064 new = b''
34708
ee5f0d047b41 bookmark: add a dedicated txnclose-bookmark hook
Boris Feld <boris.feld@octobus.net>
parents: 33518
diff changeset
1065 if old is None:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1066 old = b''
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1067 return {b'bookmark': name, b'node': hex(new), b'oldnode': hex(old)}