Mercurial > hg
annotate hgext/bookflow.py @ 43076:2372284d9457
formatting: blacken the codebase
This is using my patch to black
(https://github.com/psf/black/pull/826) so we don't un-wrap collection
literals.
Done with:
hg files 'set:**.py - mercurial/thirdparty/** - "contrib/python-zstandard/**"' | xargs black -S
# skip-blame mass-reformatting only
# no-check-commit reformats foo_bar functions
Differential Revision: https://phab.mercurial-scm.org/D6971
author | Augie Fackler <augie@google.com> |
---|---|
date | Sun, 06 Oct 2019 09:45:02 -0400 |
parents | b53c5651fcf6 |
children | 687b865b95ad |
rev | line source |
---|---|
40834
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
1 """implements bookmark-based branching (EXPERIMENTAL) |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
2 |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
3 - Disables creation of new branches (config: enable_branches=False). |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
4 - Requires an active bookmark on commit (config: require_bookmark=True). |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
5 - Doesn't move the active bookmark on update, only on commit. |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
6 - Requires '--rev' for moving an existing bookmark. |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
7 - Protects special bookmarks (config: protect=@). |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
8 |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
9 flow related commands |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
10 |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
11 :hg book NAME: create a new bookmark |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
12 :hg book NAME -r REV: move bookmark to revision (fast-forward) |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
13 :hg up|co NAME: switch to bookmark |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
14 :hg push -B .: push active bookmark |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
15 """ |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
16 from __future__ import absolute_import |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
17 |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
18 from mercurial.i18n import _ |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
19 from mercurial import ( |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
20 bookmarks, |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
21 commands, |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
22 error, |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
23 extensions, |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
24 registrar, |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
25 ) |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
26 |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
27 MY_NAME = 'bookflow' |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
28 |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
29 configtable = {} |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
30 configitem = registrar.configitem(configtable) |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
31 |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
32 configitem(MY_NAME, 'protect', ['@']) |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
33 configitem(MY_NAME, 'require-bookmark', True) |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
34 configitem(MY_NAME, 'enable-branches', False) |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
35 |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
36 cmdtable = {} |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
37 command = registrar.command(cmdtable) |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
38 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
39 |
40834
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
40 def commit_hook(ui, repo, **kwargs): |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
41 active = repo._bookmarks.active |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
42 if active: |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
43 if active in ui.configlist(MY_NAME, 'protect'): |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
44 raise error.Abort( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
45 _('cannot commit, bookmark %s is protected') % active |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
46 ) |
40834
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
47 if not cwd_at_bookmark(repo, active): |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
48 raise error.Abort( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
49 _( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
50 'cannot commit, working directory out of sync with active bookmark' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
51 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
52 hint=_("run 'hg up %s'") % active, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
53 ) |
40834
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
54 elif ui.configbool(MY_NAME, 'require-bookmark', True): |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
55 raise error.Abort(_('cannot commit without an active bookmark')) |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
56 return 0 |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
57 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
58 |
40834
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
59 def bookmarks_update(orig, repo, parents, node): |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
60 if len(parents) == 2: |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
61 # called during commit |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
62 return orig(repo, parents, node) |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
63 else: |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
64 # called during update |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
65 return False |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
66 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
67 |
40834
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
68 def bookmarks_addbookmarks( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
69 orig, repo, tr, names, rev=None, force=False, inactive=False |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
70 ): |
40834
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
71 if not rev: |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
72 marks = repo._bookmarks |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
73 for name in names: |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
74 if name in marks: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
75 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
76 _( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
77 "bookmark %s already exists, to move use the --rev option" |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
78 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
79 % name |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
80 ) |
40834
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
81 return orig(repo, tr, names, rev, force, inactive) |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
82 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
83 |
40834
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
84 def commands_commit(orig, ui, repo, *args, **opts): |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
85 commit_hook(ui, repo) |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
86 return orig(ui, repo, *args, **opts) |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
87 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
88 |
40834
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
89 def commands_pull(orig, ui, repo, *args, **opts): |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
90 rc = orig(ui, repo, *args, **opts) |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
91 active = repo._bookmarks.active |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
92 if active and not cwd_at_bookmark(repo, active): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
93 ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
94 _( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
95 "working directory out of sync with active bookmark, run " |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
96 "'hg up %s'" |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
97 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
98 % active |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
99 ) |
40834
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
100 return rc |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
101 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
102 |
40834
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
103 def commands_branch(orig, ui, repo, label=None, **opts): |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
104 if label and not opts.get(r'clean') and not opts.get(r'rev'): |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
105 raise error.Abort( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
106 _( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
107 "creating named branches is disabled and you should use bookmarks" |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
108 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
109 hint="see 'hg help bookflow'", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
110 ) |
40834
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
111 return orig(ui, repo, label, **opts) |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
112 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
113 |
40834
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
114 def cwd_at_bookmark(repo, mark): |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
115 mark_id = repo._bookmarks[mark] |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
116 cur_id = repo.lookup('.') |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
117 return cur_id == mark_id |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
118 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41031
diff
changeset
|
119 |
40834
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
120 def uisetup(ui): |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
121 extensions.wrapfunction(bookmarks, 'update', bookmarks_update) |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
122 extensions.wrapfunction(bookmarks, 'addbookmarks', bookmarks_addbookmarks) |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
123 extensions.wrapcommand(commands.table, 'commit', commands_commit) |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
124 extensions.wrapcommand(commands.table, 'pull', commands_pull) |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
125 if not ui.configbool(MY_NAME, 'enable-branches'): |
9cec7a36bab8
bookflow: new extension for bookmark-based branching
idlsoft <idlsoft@gmail.com>
parents:
diff
changeset
|
126 extensions.wrapcommand(commands.table, 'branch', commands_branch) |