Mercurial > hg
annotate hgext/histedit.py @ 52084:75123bc60b66 stable
outgoing: move sorting in the display function
This make the core code simpler.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Fri, 25 Oct 2024 01:23:24 +0200 |
parents | 73476a9e5ced |
children | 454feddab720 |
rev | line source |
---|---|
17064
168cc52ad7c2
histedit: new extension for interactive history editing
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
1 # histedit.py - interactive history editing for mercurial |
168cc52ad7c2
histedit: new extension for interactive history editing
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
2 # |
168cc52ad7c2
histedit: new extension for interactive history editing
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
3 # Copyright 2009 Augie Fackler <raf@durin42.com> |
168cc52ad7c2
histedit: new extension for interactive history editing
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
4 # |
168cc52ad7c2
histedit: new extension for interactive history editing
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
168cc52ad7c2
histedit: new extension for interactive history editing
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
6 # GNU General Public License version 2 or any later version. |
17131
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
7 """interactive history editing |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
8 |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
9 With this extension installed, Mercurial gains one new command: histedit. Usage |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
10 is as follows, assuming the following history:: |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
11 |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
12 @ 3[tip] 7c2fd3b9020c 2009-04-27 18:04 -0500 durin42 |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
13 | Add delta |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
14 | |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
15 o 2 030b686bedc4 2009-04-27 18:04 -0500 durin42 |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
16 | Add gamma |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
17 | |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
18 o 1 c561b4e977df 2009-04-27 18:04 -0500 durin42 |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
19 | Add beta |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
20 | |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
21 o 0 d8d2fcd0e319 2009-04-27 18:04 -0500 durin42 |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
22 Add alpha |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
23 |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
24 If you were to run ``hg histedit c561b4e977df``, you would see the following |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
25 file open in your editor:: |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
26 |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
27 pick c561b4e977df Add beta |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
28 pick 030b686bedc4 Add gamma |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
29 pick 7c2fd3b9020c Add delta |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
30 |
18322
e819c12a8bd0
histedit: correct changeset IDs in online help
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17771
diff
changeset
|
31 # Edit history between c561b4e977df and 7c2fd3b9020c |
17131
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
32 # |
20503
23dc77874191
histedit: clarify description of fold command
Adrian Zgorzałek <adek@fb.com>
parents:
20071
diff
changeset
|
33 # Commits are listed from least to most recent |
23dc77874191
histedit: clarify description of fold command
Adrian Zgorzałek <adek@fb.com>
parents:
20071
diff
changeset
|
34 # |
17131
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
35 # Commands: |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
36 # p, pick = use commit |
46104
6f8a94bbfba1
histedit: adjust comment describing `edit` action for clarity
Augie Fackler <augie@google.com>
parents:
46103
diff
changeset
|
37 # e, edit = use commit, but allow edits before making new commit |
20511
5840da876235
histedit: shorten new fold message
Matt Mackall <mpm@selenic.com>
parents:
20503
diff
changeset
|
38 # f, fold = use commit, but combine it with the one above |
31056
37ab9e20991c
histedit: modify rollup to discard date from the rollup commit (issue4820)
Ben Schmidt <insightfuls@users.noreply.github.com>
parents:
31055
diff
changeset
|
39 # r, roll = like fold, but discard this commit's description and date |
17131
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
40 # d, drop = remove commit from history |
26100
5706d130ec16
histedit: improve discoverability of edit commit message
timeless@mozdev.org
parents:
26098
diff
changeset
|
41 # m, mess = edit commit message without changing commit content |
34489
270e344a6c74
histedit: removing the experimental config 'histeditng'
Saurabh Singh <singhsrb@fb.com>
parents:
34475
diff
changeset
|
42 # b, base = checkout changeset and apply further changesets from there |
17131
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
43 # |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
44 |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
45 In this file, lines beginning with ``#`` are ignored. You must specify a rule |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
46 for each revision in your history. For example, if you had meant to add gamma |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
47 before beta, and then wanted to add delta in the same revision as beta, you |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
48 would reorganize the file to look like this:: |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
49 |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
50 pick 030b686bedc4 Add gamma |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
51 pick c561b4e977df Add beta |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
52 fold 7c2fd3b9020c Add delta |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
53 |
18322
e819c12a8bd0
histedit: correct changeset IDs in online help
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17771
diff
changeset
|
54 # Edit history between c561b4e977df and 7c2fd3b9020c |
17131
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
55 # |
20503
23dc77874191
histedit: clarify description of fold command
Adrian Zgorzałek <adek@fb.com>
parents:
20071
diff
changeset
|
56 # Commits are listed from least to most recent |
23dc77874191
histedit: clarify description of fold command
Adrian Zgorzałek <adek@fb.com>
parents:
20071
diff
changeset
|
57 # |
17131
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
58 # Commands: |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
59 # p, pick = use commit |
46104
6f8a94bbfba1
histedit: adjust comment describing `edit` action for clarity
Augie Fackler <augie@google.com>
parents:
46103
diff
changeset
|
60 # e, edit = use commit, but allow edits before making new commit |
20511
5840da876235
histedit: shorten new fold message
Matt Mackall <mpm@selenic.com>
parents:
20503
diff
changeset
|
61 # f, fold = use commit, but combine it with the one above |
31056
37ab9e20991c
histedit: modify rollup to discard date from the rollup commit (issue4820)
Ben Schmidt <insightfuls@users.noreply.github.com>
parents:
31055
diff
changeset
|
62 # r, roll = like fold, but discard this commit's description and date |
17131
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
63 # d, drop = remove commit from history |
26100
5706d130ec16
histedit: improve discoverability of edit commit message
timeless@mozdev.org
parents:
26098
diff
changeset
|
64 # m, mess = edit commit message without changing commit content |
34489
270e344a6c74
histedit: removing the experimental config 'histeditng'
Saurabh Singh <singhsrb@fb.com>
parents:
34475
diff
changeset
|
65 # b, base = checkout changeset and apply further changesets from there |
17131
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
66 # |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
67 |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
68 At which point you close the editor and ``histedit`` starts working. When you |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
69 specify a ``fold`` operation, ``histedit`` will open an editor when it folds |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
70 those revisions together, offering you a chance to clean up the commit message:: |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
71 |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
72 Add beta |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
73 *** |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
74 Add delta |
17064
168cc52ad7c2
histedit: new extension for interactive history editing
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
75 |
31055
f1b63ec4b987
histedit: improve documentation and behaviour of dates
Ben Schmidt <insightfuls@users.noreply.github.com>
parents:
30983
diff
changeset
|
76 Edit the commit message to your liking, then close the editor. The date used |
f1b63ec4b987
histedit: improve documentation and behaviour of dates
Ben Schmidt <insightfuls@users.noreply.github.com>
parents:
30983
diff
changeset
|
77 for the commit will be the later of the two commits' dates. For this example, |
f1b63ec4b987
histedit: improve documentation and behaviour of dates
Ben Schmidt <insightfuls@users.noreply.github.com>
parents:
30983
diff
changeset
|
78 let's assume that the commit message was changed to ``Add beta and delta.`` |
f1b63ec4b987
histedit: improve documentation and behaviour of dates
Ben Schmidt <insightfuls@users.noreply.github.com>
parents:
30983
diff
changeset
|
79 After histedit has run and had a chance to remove any old or temporary |
f1b63ec4b987
histedit: improve documentation and behaviour of dates
Ben Schmidt <insightfuls@users.noreply.github.com>
parents:
30983
diff
changeset
|
80 revisions it needed, the history looks like this:: |
17131
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
81 |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
82 @ 2[tip] 989b4d060121 2009-04-27 18:04 -0500 durin42 |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
83 | Add beta and delta. |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
84 | |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
85 o 1 081603921c3f 2009-04-27 18:04 -0500 durin42 |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
86 | Add gamma |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
87 | |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
88 o 0 d8d2fcd0e319 2009-04-27 18:04 -0500 durin42 |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
89 Add alpha |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
90 |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
91 Note that ``histedit`` does *not* remove any revisions (even its own temporary |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
92 ones) until after it has completed all the editing operations, so it will |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
93 probably perform several strip operations when it's done. For the above example, |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
94 it had to run strip twice. Strip can be slow depending on a variety of factors, |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
95 so you might need to be a little patient. You can choose to keep the original |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
96 revisions by passing the ``--keep`` flag. |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
97 |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
98 The ``edit`` operation will drop you back to a command prompt, |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
99 allowing you to edit files freely, or even use ``hg record`` to commit |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
100 some changes as a separate commit. When you're done, any remaining |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
101 uncommitted changes will be committed as well. When done, run ``hg |
31055
f1b63ec4b987
histedit: improve documentation and behaviour of dates
Ben Schmidt <insightfuls@users.noreply.github.com>
parents:
30983
diff
changeset
|
102 histedit --continue`` to finish this step. If there are uncommitted |
f1b63ec4b987
histedit: improve documentation and behaviour of dates
Ben Schmidt <insightfuls@users.noreply.github.com>
parents:
30983
diff
changeset
|
103 changes, you'll be prompted for a new commit message, but the default |
f1b63ec4b987
histedit: improve documentation and behaviour of dates
Ben Schmidt <insightfuls@users.noreply.github.com>
parents:
30983
diff
changeset
|
104 commit message will be the original message for the ``edit`` ed |
f1b63ec4b987
histedit: improve documentation and behaviour of dates
Ben Schmidt <insightfuls@users.noreply.github.com>
parents:
30983
diff
changeset
|
105 revision, and the date of the original commit will be preserved. |
17131
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
106 |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
107 The ``message`` operation will give you a chance to revise a commit |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
108 message without changing the contents. It's a shortcut for doing |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
109 ``edit`` immediately followed by `hg histedit --continue``. |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
110 |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
111 If ``histedit`` encounters a conflict when moving a revision (while |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
112 handling ``pick`` or ``fold``), it'll stop in a similar manner to |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
113 ``edit`` with the difference that it won't prompt you for a commit |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
114 message when done. If you decide at this point that you don't like how |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
115 much work it will be to rearrange history, or that you made a mistake, |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
116 you can use ``hg histedit --abort`` to abandon the new changes you |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
117 have made and return to the state before you attempted to edit your |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
118 history. |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
119 |
18323
7648b87e76db
histedit: correct the number of added revisions in online help
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18322
diff
changeset
|
120 If we clone the histedit-ed example repository above and add four more |
7648b87e76db
histedit: correct the number of added revisions in online help
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18322
diff
changeset
|
121 changes, such that we have the following history:: |
17131
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
122 |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
123 @ 6[tip] 038383181893 2009-04-27 18:04 -0500 stefan |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
124 | Add theta |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
125 | |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
126 o 5 140988835471 2009-04-27 18:04 -0500 stefan |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
127 | Add eta |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
128 | |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
129 o 4 122930637314 2009-04-27 18:04 -0500 stefan |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
130 | Add zeta |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
131 | |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
132 o 3 836302820282 2009-04-27 18:04 -0500 stefan |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
133 | Add epsilon |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
134 | |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
135 o 2 989b4d060121 2009-04-27 18:04 -0500 durin42 |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
136 | Add beta and delta. |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
137 | |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
138 o 1 081603921c3f 2009-04-27 18:04 -0500 durin42 |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
139 | Add gamma |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
140 | |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
141 o 0 d8d2fcd0e319 2009-04-27 18:04 -0500 durin42 |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
142 Add alpha |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
143 |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
144 If you run ``hg histedit --outgoing`` on the clone then it is the same |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
145 as running ``hg histedit 836302820282``. If you need plan to push to a |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
146 repository that Mercurial does not detect to be related to the source |
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
147 repo, you can add a ``--force`` option. |
24199
4047982904f8
histedit: add a config allowing changing histedit rule line length limit
Mateusz Kwapich <mitrandir@fb.com>
parents:
24196
diff
changeset
|
148 |
27414
6602a7b9deec
histedit: delete to drop
Mateusz Kwapich <mitrandir@fb.com>
parents:
27407
diff
changeset
|
149 Config |
6602a7b9deec
histedit: delete to drop
Mateusz Kwapich <mitrandir@fb.com>
parents:
27407
diff
changeset
|
150 ------ |
6602a7b9deec
histedit: delete to drop
Mateusz Kwapich <mitrandir@fb.com>
parents:
27407
diff
changeset
|
151 |
24199
4047982904f8
histedit: add a config allowing changing histedit rule line length limit
Mateusz Kwapich <mitrandir@fb.com>
parents:
24196
diff
changeset
|
152 Histedit rule lines are truncated to 80 characters by default. You |
26171 | 153 can customize this behavior by setting a different length in your |
24869
95a67d687903
histedit: fix reST syntax problem of example code in help document
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24831
diff
changeset
|
154 configuration file:: |
24199
4047982904f8
histedit: add a config allowing changing histedit rule line length limit
Mateusz Kwapich <mitrandir@fb.com>
parents:
24196
diff
changeset
|
155 |
24869
95a67d687903
histedit: fix reST syntax problem of example code in help document
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24831
diff
changeset
|
156 [histedit] |
95a67d687903
histedit: fix reST syntax problem of example code in help document
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24831
diff
changeset
|
157 linelen = 120 # truncate rule lines at 120 characters |
27262
3d0feb2f978b
histedit: pick an appropriate base changeset by default (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27217
diff
changeset
|
158 |
41509
11c076786d56
histedit: add templating support to histedit's rule file generation
Augie Fackler <augie@google.com>
parents:
41399
diff
changeset
|
159 The summary of a change can be customized as well:: |
11c076786d56
histedit: add templating support to histedit's rule file generation
Augie Fackler <augie@google.com>
parents:
41399
diff
changeset
|
160 |
11c076786d56
histedit: add templating support to histedit's rule file generation
Augie Fackler <augie@google.com>
parents:
41399
diff
changeset
|
161 [histedit] |
11c076786d56
histedit: add templating support to histedit's rule file generation
Augie Fackler <augie@google.com>
parents:
41399
diff
changeset
|
162 summary-template = '{rev} {bookmarks} {desc|firstline}' |
11c076786d56
histedit: add templating support to histedit's rule file generation
Augie Fackler <augie@google.com>
parents:
41399
diff
changeset
|
163 |
11c076786d56
histedit: add templating support to histedit's rule file generation
Augie Fackler <augie@google.com>
parents:
41399
diff
changeset
|
164 The customized summary should be kept short enough that rule lines |
11c076786d56
histedit: add templating support to histedit's rule file generation
Augie Fackler <augie@google.com>
parents:
41399
diff
changeset
|
165 will fit in the configured line length. See above if that requires |
11c076786d56
histedit: add templating support to histedit's rule file generation
Augie Fackler <augie@google.com>
parents:
41399
diff
changeset
|
166 customization. |
11c076786d56
histedit: add templating support to histedit's rule file generation
Augie Fackler <augie@google.com>
parents:
41399
diff
changeset
|
167 |
27262
3d0feb2f978b
histedit: pick an appropriate base changeset by default (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27217
diff
changeset
|
168 ``hg histedit`` attempts to automatically choose an appropriate base |
3d0feb2f978b
histedit: pick an appropriate base changeset by default (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27217
diff
changeset
|
169 revision to use. To change which base revision is used, define a |
3d0feb2f978b
histedit: pick an appropriate base changeset by default (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27217
diff
changeset
|
170 revset in your configuration file:: |
3d0feb2f978b
histedit: pick an appropriate base changeset by default (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27217
diff
changeset
|
171 |
3d0feb2f978b
histedit: pick an appropriate base changeset by default (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27217
diff
changeset
|
172 [histedit] |
3d0feb2f978b
histedit: pick an appropriate base changeset by default (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27217
diff
changeset
|
173 defaultrev = only(.) & draft() |
27414
6602a7b9deec
histedit: delete to drop
Mateusz Kwapich <mitrandir@fb.com>
parents:
27407
diff
changeset
|
174 |
6602a7b9deec
histedit: delete to drop
Mateusz Kwapich <mitrandir@fb.com>
parents:
27407
diff
changeset
|
175 By default each edited revision needs to be present in histedit commands. |
6602a7b9deec
histedit: delete to drop
Mateusz Kwapich <mitrandir@fb.com>
parents:
27407
diff
changeset
|
176 To remove revision you need to use ``drop`` operation. You can configure |
27957
c54f017fcd52
doc: prevent literal text block from being treated as non-literal one
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27956
diff
changeset
|
177 the drop to be implicit for missing commits by adding:: |
27414
6602a7b9deec
histedit: delete to drop
Mateusz Kwapich <mitrandir@fb.com>
parents:
27407
diff
changeset
|
178 |
6602a7b9deec
histedit: delete to drop
Mateusz Kwapich <mitrandir@fb.com>
parents:
27407
diff
changeset
|
179 [histedit] |
6602a7b9deec
histedit: delete to drop
Mateusz Kwapich <mitrandir@fb.com>
parents:
27407
diff
changeset
|
180 dropmissing = True |
6602a7b9deec
histedit: delete to drop
Mateusz Kwapich <mitrandir@fb.com>
parents:
27407
diff
changeset
|
181 |
31513
68474b72ea63
histedit: add histedit.singletransaction config option
Durham Goode <durham@fb.com>
parents:
31512
diff
changeset
|
182 By default, histedit will close the transaction after each action. For |
68474b72ea63
histedit: add histedit.singletransaction config option
Durham Goode <durham@fb.com>
parents:
31512
diff
changeset
|
183 performance purposes, you can configure histedit to use a single transaction |
68474b72ea63
histedit: add histedit.singletransaction config option
Durham Goode <durham@fb.com>
parents:
31512
diff
changeset
|
184 across the entire histedit. WARNING: This setting introduces a significant risk |
68474b72ea63
histedit: add histedit.singletransaction config option
Durham Goode <durham@fb.com>
parents:
31512
diff
changeset
|
185 of losing the work you've done in a histedit if the histedit aborts |
68474b72ea63
histedit: add histedit.singletransaction config option
Durham Goode <durham@fb.com>
parents:
31512
diff
changeset
|
186 unexpectedly:: |
68474b72ea63
histedit: add histedit.singletransaction config option
Durham Goode <durham@fb.com>
parents:
31512
diff
changeset
|
187 |
68474b72ea63
histedit: add histedit.singletransaction config option
Durham Goode <durham@fb.com>
parents:
31512
diff
changeset
|
188 [histedit] |
68474b72ea63
histedit: add histedit.singletransaction config option
Durham Goode <durham@fb.com>
parents:
31512
diff
changeset
|
189 singletransaction = True |
68474b72ea63
histedit: add histedit.singletransaction config option
Durham Goode <durham@fb.com>
parents:
31512
diff
changeset
|
190 |
17064
168cc52ad7c2
histedit: new extension for interactive history editing
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
191 """ |
17131
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
192 |
29126
7dd5d19c9773
py3: make hgext/hisedit.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28592
diff
changeset
|
193 |
40652
291080871f50
histedit: conditionalize the imports of 'fcntl' and 'termios'
Matt Harbison <matt_harbison@yahoo.com>
parents:
40602
diff
changeset
|
194 # chistedit dependencies that are not available everywhere |
291080871f50
histedit: conditionalize the imports of 'fcntl' and 'termios'
Matt Harbison <matt_harbison@yahoo.com>
parents:
40602
diff
changeset
|
195 try: |
291080871f50
histedit: conditionalize the imports of 'fcntl' and 'termios'
Matt Harbison <matt_harbison@yahoo.com>
parents:
40602
diff
changeset
|
196 import fcntl |
291080871f50
histedit: conditionalize the imports of 'fcntl' and 'termios'
Matt Harbison <matt_harbison@yahoo.com>
parents:
40602
diff
changeset
|
197 import termios |
291080871f50
histedit: conditionalize the imports of 'fcntl' and 'termios'
Matt Harbison <matt_harbison@yahoo.com>
parents:
40602
diff
changeset
|
198 except ImportError: |
291080871f50
histedit: conditionalize the imports of 'fcntl' and 'termios'
Matt Harbison <matt_harbison@yahoo.com>
parents:
40602
diff
changeset
|
199 fcntl = None |
291080871f50
histedit: conditionalize the imports of 'fcntl' and 'termios'
Matt Harbison <matt_harbison@yahoo.com>
parents:
40602
diff
changeset
|
200 termios = None |
291080871f50
histedit: conditionalize the imports of 'fcntl' and 'termios'
Matt Harbison <matt_harbison@yahoo.com>
parents:
40602
diff
changeset
|
201 |
49248
63fd0282ad40
node: stop converting binascii.Error to TypeError in bin()
Manuel Jacob <me@manueljacob.de>
parents:
49023
diff
changeset
|
202 import binascii |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
203 import functools |
17064
168cc52ad7c2
histedit: new extension for interactive history editing
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
204 import os |
48870
df56e6bd37f6
py3: use pickle directly
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48591
diff
changeset
|
205 import pickle |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
206 import struct |
29205
a0939666b836
py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents:
29126
diff
changeset
|
207 |
a0939666b836
py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents:
29126
diff
changeset
|
208 from mercurial.i18n import _ |
43089
c59eb1560c44
py3: manually import getattr where it is needed
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43085
diff
changeset
|
209 from mercurial.pycompat import ( |
c59eb1560c44
py3: manually import getattr where it is needed
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43085
diff
changeset
|
210 open, |
c59eb1560c44
py3: manually import getattr where it is needed
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43085
diff
changeset
|
211 ) |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
212 from mercurial.node import ( |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
213 bin, |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
214 hex, |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
215 short, |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
216 ) |
29126
7dd5d19c9773
py3: make hgext/hisedit.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28592
diff
changeset
|
217 from mercurial import ( |
7dd5d19c9773
py3: make hgext/hisedit.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28592
diff
changeset
|
218 bundle2, |
7dd5d19c9773
py3: make hgext/hisedit.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28592
diff
changeset
|
219 cmdutil, |
7dd5d19c9773
py3: make hgext/hisedit.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28592
diff
changeset
|
220 context, |
7dd5d19c9773
py3: make hgext/hisedit.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28592
diff
changeset
|
221 copies, |
7dd5d19c9773
py3: make hgext/hisedit.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28592
diff
changeset
|
222 destutil, |
7dd5d19c9773
py3: make hgext/hisedit.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28592
diff
changeset
|
223 discovery, |
43368
d8215ff082da
py3: make chistedit render
Martin von Zweigbergk <martinvonz@google.com>
parents:
43228
diff
changeset
|
224 encoding, |
29126
7dd5d19c9773
py3: make hgext/hisedit.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28592
diff
changeset
|
225 error, |
7dd5d19c9773
py3: make hgext/hisedit.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28592
diff
changeset
|
226 exchange, |
7dd5d19c9773
py3: make hgext/hisedit.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28592
diff
changeset
|
227 extensions, |
7dd5d19c9773
py3: make hgext/hisedit.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28592
diff
changeset
|
228 hg, |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
229 logcmdutil, |
29126
7dd5d19c9773
py3: make hgext/hisedit.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28592
diff
changeset
|
230 merge as mergemod, |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44661
diff
changeset
|
231 mergestate as mergestatemod, |
32057
e5ffc91a2276
histedit: make check for unresolved conflicts explicit (issue5545)
Siddharth Agarwal <sid0@fb.com>
parents:
31638
diff
changeset
|
232 mergeutil, |
29126
7dd5d19c9773
py3: make hgext/hisedit.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28592
diff
changeset
|
233 obsolete, |
34999
c4b769bc86da
py3: handle keyword arguments in hgext/histedit.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34917
diff
changeset
|
234 pycompat, |
32337
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32327
diff
changeset
|
235 registrar, |
29126
7dd5d19c9773
py3: make hgext/hisedit.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28592
diff
changeset
|
236 repair, |
43933
bde97bee321f
histedit: use rewriteutil.precheck() instead of reimplementing it
Martin von Zweigbergk <martinvonz@google.com>
parents:
43793
diff
changeset
|
237 rewriteutil, |
29126
7dd5d19c9773
py3: make hgext/hisedit.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28592
diff
changeset
|
238 scmutil, |
38506
18f348e035fb
histedit: add a stateobj variable to histeditstate class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38505
diff
changeset
|
239 state as statemod, |
29126
7dd5d19c9773
py3: make hgext/hisedit.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28592
diff
changeset
|
240 util, |
7dd5d19c9773
py3: make hgext/hisedit.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28592
diff
changeset
|
241 ) |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37016
diff
changeset
|
242 from mercurial.utils import ( |
41213
704a3aa3dc0a
histedit: add rewrite.update-timestamp support to fold and mess
Taapas Agrawal <taapas2897@gmail.com>
parents:
41212
diff
changeset
|
243 dateutil, |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37016
diff
changeset
|
244 stringutil, |
46907
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46396
diff
changeset
|
245 urlutil, |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37016
diff
changeset
|
246 ) |
17064
168cc52ad7c2
histedit: new extension for interactive history editing
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
247 |
17147
80e861511e2b
histedit: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents:
17131
diff
changeset
|
248 cmdtable = {} |
32337
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32327
diff
changeset
|
249 command = registrar.command(cmdtable) |
17147
80e861511e2b
histedit: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents:
17131
diff
changeset
|
250 |
34470
6567002ae87e
configitems: register the 'histedit.defaultrev' config
Boris Feld <boris.feld@octobus.net>
parents:
34029
diff
changeset
|
251 configtable = {} |
6567002ae87e
configitems: register the 'histedit.defaultrev' config
Boris Feld <boris.feld@octobus.net>
parents:
34029
diff
changeset
|
252 configitem = registrar.configitem(configtable) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
253 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45893
diff
changeset
|
254 b'experimental', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45893
diff
changeset
|
255 b'histedit.autoverb', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45893
diff
changeset
|
256 default=False, |
34474
b068a87e951d
configitems: register the 'experimental.histedit.autoverb' config
Boris Feld <boris.feld@octobus.net>
parents:
34473
diff
changeset
|
257 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
258 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45893
diff
changeset
|
259 b'histedit', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45893
diff
changeset
|
260 b'defaultrev', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45893
diff
changeset
|
261 default=None, |
34470
6567002ae87e
configitems: register the 'histedit.defaultrev' config
Boris Feld <boris.feld@octobus.net>
parents:
34029
diff
changeset
|
262 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
263 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45893
diff
changeset
|
264 b'histedit', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45893
diff
changeset
|
265 b'dropmissing', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45893
diff
changeset
|
266 default=False, |
34471
1e37cb4da6f8
configitems: register the 'histedit.dropmissing' config
Boris Feld <boris.feld@octobus.net>
parents:
34470
diff
changeset
|
267 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
268 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45893
diff
changeset
|
269 b'histedit', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45893
diff
changeset
|
270 b'linelen', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45893
diff
changeset
|
271 default=80, |
34473
a746472c3d09
configitems: register the 'histedit.singletransaction' config
Boris Feld <boris.feld@octobus.net>
parents:
34472
diff
changeset
|
272 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
273 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45893
diff
changeset
|
274 b'histedit', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45893
diff
changeset
|
275 b'singletransaction', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45893
diff
changeset
|
276 default=False, |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
277 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
278 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45893
diff
changeset
|
279 b'ui', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45893
diff
changeset
|
280 b'interface.histedit', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45893
diff
changeset
|
281 default=None, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
282 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
283 configitem(b'histedit', b'summary-template', default=b'{rev} {desc|firstline}') |
48233
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
284 # TODO: Teach the text-based histedit interface to respect this config option |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
285 # before we make it non-experimental. |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
286 configitem( |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
287 b'histedit', b'later-commits-first', default=False, experimental=True |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
288 ) |
34470
6567002ae87e
configitems: register the 'histedit.defaultrev' config
Boris Feld <boris.feld@octobus.net>
parents:
34029
diff
changeset
|
289 |
29841
d5883fd055c6
extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents:
29820
diff
changeset
|
290 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for |
25186
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
25149
diff
changeset
|
291 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should |
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
25149
diff
changeset
|
292 # be specifying the version(s) of Mercurial they are tested with, or |
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
25149
diff
changeset
|
293 # leave the attribute unspecified. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
294 testedwith = b'ships-with-hg-core' |
17064
168cc52ad7c2
histedit: new extension for interactive history editing
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
295 |
27675
d073f4c70575
histedit: replace @addhisteditaction with @action
timeless <timeless@mozdev.org>
parents:
27674
diff
changeset
|
296 actiontable = {} |
d073f4c70575
histedit: replace @addhisteditaction with @action
timeless <timeless@mozdev.org>
parents:
27674
diff
changeset
|
297 primaryactions = set() |
d073f4c70575
histedit: replace @addhisteditaction with @action
timeless <timeless@mozdev.org>
parents:
27674
diff
changeset
|
298 secondaryactions = set() |
d073f4c70575
histedit: replace @addhisteditaction with @action
timeless <timeless@mozdev.org>
parents:
27674
diff
changeset
|
299 tertiaryactions = set() |
d073f4c70575
histedit: replace @addhisteditaction with @action
timeless <timeless@mozdev.org>
parents:
27674
diff
changeset
|
300 internalactions = set() |
d073f4c70575
histedit: replace @addhisteditaction with @action
timeless <timeless@mozdev.org>
parents:
27674
diff
changeset
|
301 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
302 |
28592
cdbd9c0c0775
histedit: add a hint about enabled dropmissing to histedit edit comment
Mateusz Kwapich <mitrandir@fb.com>
parents:
28550
diff
changeset
|
303 def geteditcomment(ui, first, last): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45893
diff
changeset
|
304 """construct the editor comment |
27673
d93d340dc6ee
histedit: replace editcomment with a function
timeless <timeless@mozdev.org>
parents:
27630
diff
changeset
|
305 The comment includes:: |
d93d340dc6ee
histedit: replace editcomment with a function
timeless <timeless@mozdev.org>
parents:
27630
diff
changeset
|
306 - an intro |
27674
78d86664e3a2
histedit: prefer edit commit, edit message, use commit
timeless <timeless@mozdev.org>
parents:
27673
diff
changeset
|
307 - sorted primary commands |
78d86664e3a2
histedit: prefer edit commit, edit message, use commit
timeless <timeless@mozdev.org>
parents:
27673
diff
changeset
|
308 - sorted short commands |
27675
d073f4c70575
histedit: replace @addhisteditaction with @action
timeless <timeless@mozdev.org>
parents:
27674
diff
changeset
|
309 - sorted long commands |
28592
cdbd9c0c0775
histedit: add a hint about enabled dropmissing to histedit edit comment
Mateusz Kwapich <mitrandir@fb.com>
parents:
28550
diff
changeset
|
310 - additional hints |
27673
d93d340dc6ee
histedit: replace editcomment with a function
timeless <timeless@mozdev.org>
parents:
27630
diff
changeset
|
311 |
d93d340dc6ee
histedit: replace editcomment with a function
timeless <timeless@mozdev.org>
parents:
27630
diff
changeset
|
312 Commands are only included once. |
d93d340dc6ee
histedit: replace editcomment with a function
timeless <timeless@mozdev.org>
parents:
27630
diff
changeset
|
313 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
314 intro = _( |
44611
8fca7e8449a8
histedit: add missing b prefix to a string
Kyle Lippincott <spectral@google.com>
parents:
44429
diff
changeset
|
315 b"""Edit history between %s and %s |
27673
d93d340dc6ee
histedit: replace editcomment with a function
timeless <timeless@mozdev.org>
parents:
27630
diff
changeset
|
316 |
d93d340dc6ee
histedit: replace editcomment with a function
timeless <timeless@mozdev.org>
parents:
27630
diff
changeset
|
317 Commits are listed from least to most recent |
d93d340dc6ee
histedit: replace editcomment with a function
timeless <timeless@mozdev.org>
parents:
27630
diff
changeset
|
318 |
28396
5490b04e6132
histedit: adds hint how to reorder changesets at editor (issue3766)
liscju <piotr.listkiewicz@gmail.com>
parents:
28340
diff
changeset
|
319 You can reorder changesets by reordering the lines |
5490b04e6132
histedit: adds hint how to reorder changesets at editor (issue3766)
liscju <piotr.listkiewicz@gmail.com>
parents:
28340
diff
changeset
|
320 |
27675
d073f4c70575
histedit: replace @addhisteditaction with @action
timeless <timeless@mozdev.org>
parents:
27674
diff
changeset
|
321 Commands: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
322 """ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
323 ) |
27675
d073f4c70575
histedit: replace @addhisteditaction with @action
timeless <timeless@mozdev.org>
parents:
27674
diff
changeset
|
324 actions = [] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
325 |
27675
d073f4c70575
histedit: replace @addhisteditaction with @action
timeless <timeless@mozdev.org>
parents:
27674
diff
changeset
|
326 def addverb(v): |
d073f4c70575
histedit: replace @addhisteditaction with @action
timeless <timeless@mozdev.org>
parents:
27674
diff
changeset
|
327 a = actiontable[v] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
328 lines = a.message.split(b"\n") |
27675
d073f4c70575
histedit: replace @addhisteditaction with @action
timeless <timeless@mozdev.org>
parents:
27674
diff
changeset
|
329 if len(a.verbs): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
330 v = b', '.join(sorted(a.verbs, key=lambda v: len(v))) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
331 actions.append(b" %s = %s" % (v, lines[0])) |
43995
801b8d314791
histedit: avoid using a list comprehension to fill a list with fixed values
Matt Harbison <matt_harbison@yahoo.com>
parents:
43933
diff
changeset
|
332 actions.extend([b' %s'] * (len(lines) - 1)) |
27675
d073f4c70575
histedit: replace @addhisteditaction with @action
timeless <timeless@mozdev.org>
parents:
27674
diff
changeset
|
333 |
d073f4c70575
histedit: replace @addhisteditaction with @action
timeless <timeless@mozdev.org>
parents:
27674
diff
changeset
|
334 for v in ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
335 sorted(primaryactions) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
336 + sorted(secondaryactions) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
337 + sorted(tertiaryactions) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
338 ): |
27675
d073f4c70575
histedit: replace @addhisteditaction with @action
timeless <timeless@mozdev.org>
parents:
27674
diff
changeset
|
339 addverb(v) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
340 actions.append(b'') |
17064
168cc52ad7c2
histedit: new extension for interactive history editing
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
341 |
28592
cdbd9c0c0775
histedit: add a hint about enabled dropmissing to histedit edit comment
Mateusz Kwapich <mitrandir@fb.com>
parents:
28550
diff
changeset
|
342 hints = [] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
343 if ui.configbool(b'histedit', b'dropmissing'): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
344 hints.append( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
345 b"Deleting a changeset from the list " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
346 b"will DISCARD it from the edited history!" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
347 ) |
28592
cdbd9c0c0775
histedit: add a hint about enabled dropmissing to histedit edit comment
Mateusz Kwapich <mitrandir@fb.com>
parents:
28550
diff
changeset
|
348 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
349 lines = (intro % (first, last)).split(b'\n') + actions + hints |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
350 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
351 return b''.join([b'# %s\n' % l if l else b'#\n' for l in lines]) |
27673
d93d340dc6ee
histedit: replace editcomment with a function
timeless <timeless@mozdev.org>
parents:
27630
diff
changeset
|
352 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
353 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48913
diff
changeset
|
354 class histeditstate: |
41165
a3a24ad10efb
histedit: drop unused constructor arguments (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41151
diff
changeset
|
355 def __init__(self, repo): |
22976
886711722db6
histedit: add histedit state class
David Soria Parra <davidsp@fb.com>
parents:
22952
diff
changeset
|
356 self.repo = repo |
41165
a3a24ad10efb
histedit: drop unused constructor arguments (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41151
diff
changeset
|
357 self.actions = None |
a3a24ad10efb
histedit: drop unused constructor arguments (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41151
diff
changeset
|
358 self.keep = None |
a3a24ad10efb
histedit: drop unused constructor arguments (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41151
diff
changeset
|
359 self.topmost = None |
a3a24ad10efb
histedit: drop unused constructor arguments (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41151
diff
changeset
|
360 self.parentctxnode = None |
a3a24ad10efb
histedit: drop unused constructor arguments (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41151
diff
changeset
|
361 self.lock = None |
a3a24ad10efb
histedit: drop unused constructor arguments (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41151
diff
changeset
|
362 self.wlock = None |
24757
7b59f16174c5
histedit: store backup file before histedit
Durham Goode <durham@fb.com>
parents:
24756
diff
changeset
|
363 self.backupfile = None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
364 self.stateobj = statemod.cmdstate(repo, b'histedit-state') |
41165
a3a24ad10efb
histedit: drop unused constructor arguments (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41151
diff
changeset
|
365 self.replacements = [] |
22976
886711722db6
histedit: add histedit state class
David Soria Parra <davidsp@fb.com>
parents:
22952
diff
changeset
|
366 |
22983
a3a981563ce8
histedit: read state from histeditstate
David Soria Parra <davidsp@fb.com>
parents:
22982
diff
changeset
|
367 def read(self): |
22986
7b93b49286d0
histedit: update docstring on histeditstate.read()
Augie Fackler <raf@durin42.com>
parents:
22985
diff
changeset
|
368 """Load histedit state from disk and set fields appropriately.""" |
38507
03e7ec8180f0
histedit: use self.stateobj to check whether interrupted histedit exists
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38506
diff
changeset
|
369 if not self.stateobj.exists(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
370 cmdutil.wrongtooltocontinue(self.repo, _(b'histedit')) |
22983
a3a981563ce8
histedit: read state from histeditstate
David Soria Parra <davidsp@fb.com>
parents:
22982
diff
changeset
|
371 |
38507
03e7ec8180f0
histedit: use self.stateobj to check whether interrupted histedit exists
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38506
diff
changeset
|
372 data = self._read() |
38505
c6a2ce82e60b
histedit: factor out logic of processing state data in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38504
diff
changeset
|
373 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
374 self.parentctxnode = data[b'parentctxnode'] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
375 actions = parserules(data[b'rules'], self) |
38505
c6a2ce82e60b
histedit: factor out logic of processing state data in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38504
diff
changeset
|
376 self.actions = actions |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
377 self.keep = data[b'keep'] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
378 self.topmost = data[b'topmost'] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
379 self.replacements = data[b'replacements'] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
380 self.backupfile = data[b'backupfile'] |
38505
c6a2ce82e60b
histedit: factor out logic of processing state data in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38504
diff
changeset
|
381 |
38507
03e7ec8180f0
histedit: use self.stateobj to check whether interrupted histedit exists
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38506
diff
changeset
|
382 def _read(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
383 fp = self.repo.vfs.read(b'histedit-state') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
384 if fp.startswith(b'v1\n'): |
27527
dbfaf361c062
histedit: only use pickle if not using the modern save format
Bryan O'Sullivan <bos@serpentine.com>
parents:
27451
diff
changeset
|
385 data = self._load() |
dbfaf361c062
histedit: only use pickle if not using the modern save format
Bryan O'Sullivan <bos@serpentine.com>
parents:
27451
diff
changeset
|
386 parentctxnode, rules, keep, topmost, replacements, backupfile = data |
dbfaf361c062
histedit: only use pickle if not using the modern save format
Bryan O'Sullivan <bos@serpentine.com>
parents:
27451
diff
changeset
|
387 else: |
38505
c6a2ce82e60b
histedit: factor out logic of processing state data in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38504
diff
changeset
|
388 data = pickle.loads(fp) |
24756
d71c2da01d0d
histedit: replace pickle with custom serialization
Durham Goode <durham@fb.com>
parents:
24626
diff
changeset
|
389 parentctxnode, rules, keep, topmost, replacements = data |
24757
7b59f16174c5
histedit: store backup file before histedit
Durham Goode <durham@fb.com>
parents:
24756
diff
changeset
|
390 backupfile = None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
391 rules = b"\n".join([b"%s %s" % (verb, rest) for [verb, rest] in rules]) |
22983
a3a981563ce8
histedit: read state from histeditstate
David Soria Parra <davidsp@fb.com>
parents:
22982
diff
changeset
|
392 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
393 return { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
394 b'parentctxnode': parentctxnode, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
395 b"rules": rules, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
396 b"keep": keep, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
397 b"topmost": topmost, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
398 b"replacements": replacements, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
399 b"backupfile": backupfile, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
400 } |
22983
a3a981563ce8
histedit: read state from histeditstate
David Soria Parra <davidsp@fb.com>
parents:
22982
diff
changeset
|
401 |
31511
fa8aaff2001a
histedit: add transaction support to writing the state file
Durham Goode <durham@fb.com>
parents:
31459
diff
changeset
|
402 def write(self, tr=None): |
fa8aaff2001a
histedit: add transaction support to writing the state file
Durham Goode <durham@fb.com>
parents:
31459
diff
changeset
|
403 if tr: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
404 tr.addfilegenerator( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
405 b'histedit-state', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
406 (b'histedit-state',), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
407 self._write, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
408 location=b'plain', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
409 ) |
31511
fa8aaff2001a
histedit: add transaction support to writing the state file
Durham Goode <durham@fb.com>
parents:
31459
diff
changeset
|
410 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
411 with self.repo.vfs(b"histedit-state", b"w") as f: |
31511
fa8aaff2001a
histedit: add transaction support to writing the state file
Durham Goode <durham@fb.com>
parents:
31459
diff
changeset
|
412 self._write(f) |
fa8aaff2001a
histedit: add transaction support to writing the state file
Durham Goode <durham@fb.com>
parents:
31459
diff
changeset
|
413 |
fa8aaff2001a
histedit: add transaction support to writing the state file
Durham Goode <durham@fb.com>
parents:
31459
diff
changeset
|
414 def _write(self, fp): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
415 fp.write(b'v1\n') |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
416 fp.write(b'%s\n' % hex(self.parentctxnode)) |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
417 fp.write(b'%s\n' % hex(self.topmost)) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
418 fp.write(b'%s\n' % (b'True' if self.keep else b'False')) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
419 fp.write(b'%d\n' % len(self.actions)) |
27208
994d8dced775
histedit: get rid of state.rules
Mateusz Kwapich <mitrandir@fb.com>
parents:
27207
diff
changeset
|
420 for action in self.actions: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
421 fp.write(b'%s\n' % action.tostate()) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
422 fp.write(b'%d\n' % len(self.replacements)) |
24756
d71c2da01d0d
histedit: replace pickle with custom serialization
Durham Goode <durham@fb.com>
parents:
24626
diff
changeset
|
423 for replacement in self.replacements: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
424 fp.write( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
425 b'%s%s\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
426 % ( |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
427 hex(replacement[0]), |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
428 b''.join(hex(r) for r in replacement[1]), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
429 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
430 ) |
24958
a920abf5a592
histedit: fix serializing of None backupfile
Durham Goode <durham@fb.com>
parents:
24920
diff
changeset
|
431 backupfile = self.backupfile |
a920abf5a592
histedit: fix serializing of None backupfile
Durham Goode <durham@fb.com>
parents:
24920
diff
changeset
|
432 if not backupfile: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
433 backupfile = b'' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
434 fp.write(b'%s\n' % backupfile) |
22976
886711722db6
histedit: add histedit state class
David Soria Parra <davidsp@fb.com>
parents:
22952
diff
changeset
|
435 |
24756
d71c2da01d0d
histedit: replace pickle with custom serialization
Durham Goode <durham@fb.com>
parents:
24626
diff
changeset
|
436 def _load(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
437 fp = self.repo.vfs(b'histedit-state', b'r') |
24756
d71c2da01d0d
histedit: replace pickle with custom serialization
Durham Goode <durham@fb.com>
parents:
24626
diff
changeset
|
438 lines = [l[:-1] for l in fp.readlines()] |
d71c2da01d0d
histedit: replace pickle with custom serialization
Durham Goode <durham@fb.com>
parents:
24626
diff
changeset
|
439 |
d71c2da01d0d
histedit: replace pickle with custom serialization
Durham Goode <durham@fb.com>
parents:
24626
diff
changeset
|
440 index = 0 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
441 lines[index] # version number |
24756
d71c2da01d0d
histedit: replace pickle with custom serialization
Durham Goode <durham@fb.com>
parents:
24626
diff
changeset
|
442 index += 1 |
d71c2da01d0d
histedit: replace pickle with custom serialization
Durham Goode <durham@fb.com>
parents:
24626
diff
changeset
|
443 |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
444 parentctxnode = bin(lines[index]) |
24756
d71c2da01d0d
histedit: replace pickle with custom serialization
Durham Goode <durham@fb.com>
parents:
24626
diff
changeset
|
445 index += 1 |
d71c2da01d0d
histedit: replace pickle with custom serialization
Durham Goode <durham@fb.com>
parents:
24626
diff
changeset
|
446 |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
447 topmost = bin(lines[index]) |
24756
d71c2da01d0d
histedit: replace pickle with custom serialization
Durham Goode <durham@fb.com>
parents:
24626
diff
changeset
|
448 index += 1 |
d71c2da01d0d
histedit: replace pickle with custom serialization
Durham Goode <durham@fb.com>
parents:
24626
diff
changeset
|
449 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
450 keep = lines[index] == b'True' |
24756
d71c2da01d0d
histedit: replace pickle with custom serialization
Durham Goode <durham@fb.com>
parents:
24626
diff
changeset
|
451 index += 1 |
d71c2da01d0d
histedit: replace pickle with custom serialization
Durham Goode <durham@fb.com>
parents:
24626
diff
changeset
|
452 |
d71c2da01d0d
histedit: replace pickle with custom serialization
Durham Goode <durham@fb.com>
parents:
24626
diff
changeset
|
453 # Rules |
d71c2da01d0d
histedit: replace pickle with custom serialization
Durham Goode <durham@fb.com>
parents:
24626
diff
changeset
|
454 rules = [] |
d71c2da01d0d
histedit: replace pickle with custom serialization
Durham Goode <durham@fb.com>
parents:
24626
diff
changeset
|
455 rulelen = int(lines[index]) |
d71c2da01d0d
histedit: replace pickle with custom serialization
Durham Goode <durham@fb.com>
parents:
24626
diff
changeset
|
456 index += 1 |
49284
d44e3c45f0e4
py3: replace `pycompat.xrange` by `range`
Manuel Jacob <me@manueljacob.de>
parents:
49248
diff
changeset
|
457 for i in range(rulelen): |
24810
f5416657e661
histedit: change state format to allow non-hash lines
Durham Goode <durham@fb.com>
parents:
24774
diff
changeset
|
458 ruleaction = lines[index] |
f5416657e661
histedit: change state format to allow non-hash lines
Durham Goode <durham@fb.com>
parents:
24774
diff
changeset
|
459 index += 1 |
24756
d71c2da01d0d
histedit: replace pickle with custom serialization
Durham Goode <durham@fb.com>
parents:
24626
diff
changeset
|
460 rule = lines[index] |
d71c2da01d0d
histedit: replace pickle with custom serialization
Durham Goode <durham@fb.com>
parents:
24626
diff
changeset
|
461 index += 1 |
24810
f5416657e661
histedit: change state format to allow non-hash lines
Durham Goode <durham@fb.com>
parents:
24774
diff
changeset
|
462 rules.append((ruleaction, rule)) |
24756
d71c2da01d0d
histedit: replace pickle with custom serialization
Durham Goode <durham@fb.com>
parents:
24626
diff
changeset
|
463 |
d71c2da01d0d
histedit: replace pickle with custom serialization
Durham Goode <durham@fb.com>
parents:
24626
diff
changeset
|
464 # Replacements |
d71c2da01d0d
histedit: replace pickle with custom serialization
Durham Goode <durham@fb.com>
parents:
24626
diff
changeset
|
465 replacements = [] |
d71c2da01d0d
histedit: replace pickle with custom serialization
Durham Goode <durham@fb.com>
parents:
24626
diff
changeset
|
466 replacementlen = int(lines[index]) |
d71c2da01d0d
histedit: replace pickle with custom serialization
Durham Goode <durham@fb.com>
parents:
24626
diff
changeset
|
467 index += 1 |
49284
d44e3c45f0e4
py3: replace `pycompat.xrange` by `range`
Manuel Jacob <me@manueljacob.de>
parents:
49248
diff
changeset
|
468 for i in range(replacementlen): |
24756
d71c2da01d0d
histedit: replace pickle with custom serialization
Durham Goode <durham@fb.com>
parents:
24626
diff
changeset
|
469 replacement = lines[index] |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
470 original = bin(replacement[:40]) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
471 succ = [ |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
472 bin(replacement[i : i + 40]) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
473 for i in range(40, len(replacement), 40) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
474 ] |
24756
d71c2da01d0d
histedit: replace pickle with custom serialization
Durham Goode <durham@fb.com>
parents:
24626
diff
changeset
|
475 replacements.append((original, succ)) |
d71c2da01d0d
histedit: replace pickle with custom serialization
Durham Goode <durham@fb.com>
parents:
24626
diff
changeset
|
476 index += 1 |
d71c2da01d0d
histedit: replace pickle with custom serialization
Durham Goode <durham@fb.com>
parents:
24626
diff
changeset
|
477 |
24757
7b59f16174c5
histedit: store backup file before histedit
Durham Goode <durham@fb.com>
parents:
24756
diff
changeset
|
478 backupfile = lines[index] |
7b59f16174c5
histedit: store backup file before histedit
Durham Goode <durham@fb.com>
parents:
24756
diff
changeset
|
479 index += 1 |
7b59f16174c5
histedit: store backup file before histedit
Durham Goode <durham@fb.com>
parents:
24756
diff
changeset
|
480 |
24756
d71c2da01d0d
histedit: replace pickle with custom serialization
Durham Goode <durham@fb.com>
parents:
24626
diff
changeset
|
481 fp.close() |
d71c2da01d0d
histedit: replace pickle with custom serialization
Durham Goode <durham@fb.com>
parents:
24626
diff
changeset
|
482 |
24757
7b59f16174c5
histedit: store backup file before histedit
Durham Goode <durham@fb.com>
parents:
24756
diff
changeset
|
483 return parentctxnode, rules, keep, topmost, replacements, backupfile |
24756
d71c2da01d0d
histedit: replace pickle with custom serialization
Durham Goode <durham@fb.com>
parents:
24626
diff
changeset
|
484 |
22978
d4e764521249
histedit: add clear method to remove state
David Soria Parra <davidsp@fb.com>
parents:
22977
diff
changeset
|
485 def clear(self): |
26583
49b568a4e539
histedit: check presence of statefile before deleting it
Christian Delahousse <cdelahousse@fb.com>
parents:
26582
diff
changeset
|
486 if self.inprogress(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
487 self.repo.vfs.unlink(b'histedit-state') |
22978
d4e764521249
histedit: add clear method to remove state
David Soria Parra <davidsp@fb.com>
parents:
22977
diff
changeset
|
488 |
26582
42b908673866
histedit: add inprogress method to state class
Christian Delahousse <cdelahousse@fb.com>
parents:
26335
diff
changeset
|
489 def inprogress(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
490 return self.repo.vfs.exists(b'histedit-state') |
26582
42b908673866
histedit: add inprogress method to state class
Christian Delahousse <cdelahousse@fb.com>
parents:
26335
diff
changeset
|
491 |
27200
62b9a87a365e
histedit: add actions property to histedit state
Mateusz Kwapich <mitrandir@fb.com>
parents:
27171
diff
changeset
|
492 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48913
diff
changeset
|
493 class histeditaction: |
24765
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
494 def __init__(self, state, node): |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
495 self.state = state |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
496 self.repo = state.repo |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
497 self.node = node |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
498 |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
499 @classmethod |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
500 def fromrule(cls, state, rule): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45893
diff
changeset
|
501 """Parses the given rule, returning an instance of the histeditaction.""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
502 ruleid = rule.strip().split(b' ', 1)[0] |
37106
3d3cff1f6bde
histedit: make histedit's commands accept revsets (issue5746)
Sangeet Kumar Mishra <mail2sangeetmishra@gmail.com>
parents:
37084
diff
changeset
|
503 # ruleid can be anything from rev numbers, hashes, "bookmarks" etc |
3d3cff1f6bde
histedit: make histedit's commands accept revsets (issue5746)
Sangeet Kumar Mishra <mail2sangeetmishra@gmail.com>
parents:
37084
diff
changeset
|
504 # Check for validation of rule ids and get the rulehash |
27547
1cbfeb1dc5aa
histedit: handle exceptions from node.bin in fromrule
timeless <timeless@mozdev.org>
parents:
27546
diff
changeset
|
505 try: |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
506 rev = bin(ruleid) |
49248
63fd0282ad40
node: stop converting binascii.Error to TypeError in bin()
Manuel Jacob <me@manueljacob.de>
parents:
49023
diff
changeset
|
507 except binascii.Error: |
37106
3d3cff1f6bde
histedit: make histedit's commands accept revsets (issue5746)
Sangeet Kumar Mishra <mail2sangeetmishra@gmail.com>
parents:
37084
diff
changeset
|
508 try: |
3d3cff1f6bde
histedit: make histedit's commands accept revsets (issue5746)
Sangeet Kumar Mishra <mail2sangeetmishra@gmail.com>
parents:
37084
diff
changeset
|
509 _ctx = scmutil.revsingle(state.repo, ruleid) |
3d3cff1f6bde
histedit: make histedit's commands accept revsets (issue5746)
Sangeet Kumar Mishra <mail2sangeetmishra@gmail.com>
parents:
37084
diff
changeset
|
510 rulehash = _ctx.hex() |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
511 rev = bin(rulehash) |
37106
3d3cff1f6bde
histedit: make histedit's commands accept revsets (issue5746)
Sangeet Kumar Mishra <mail2sangeetmishra@gmail.com>
parents:
37084
diff
changeset
|
512 except error.RepoLookupError: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
513 raise error.ParseError(_(b"invalid changeset %s") % ruleid) |
27547
1cbfeb1dc5aa
histedit: handle exceptions from node.bin in fromrule
timeless <timeless@mozdev.org>
parents:
27546
diff
changeset
|
514 return cls(state, rev) |
27202
2226cd4f32ed
histedit: add verify() to histeditaction
Mateusz Kwapich <mitrandir@fb.com>
parents:
27201
diff
changeset
|
515 |
29879
b566c5992e07
histedit: move constraint verification to the 'action.verify' method
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29878
diff
changeset
|
516 def verify(self, prev, expected, seen): |
47062
f38bf44e077f
black: make codebase compatible with black v21.4b2 and v20.8b1
Kyle Lippincott <spectral@google.com>
parents:
46941
diff
changeset
|
517 """Verifies semantic correctness of the rule""" |
27202
2226cd4f32ed
histedit: add verify() to histeditaction
Mateusz Kwapich <mitrandir@fb.com>
parents:
27201
diff
changeset
|
518 repo = self.repo |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
519 ha = hex(self.node) |
37678
5f8f013e7d52
scmutil: rename resolvepartialhexnodeid() to resolvehexnodeidprefix()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37506
diff
changeset
|
520 self.node = scmutil.resolvehexnodeidprefix(repo, ha) |
37506
c4131138eadb
histedit: look up partial nodeid as partial nodeid
Martin von Zweigbergk <martinvonz@google.com>
parents:
37505
diff
changeset
|
521 if self.node is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
522 raise error.ParseError(_(b'unknown changeset %s listed') % ha[:12]) |
37505
966061b8826d
histedit: drop unnecessary check for "self.node is not None"
Martin von Zweigbergk <martinvonz@google.com>
parents:
37314
diff
changeset
|
523 self._verifynodeconstraints(prev, expected, seen) |
29879
b566c5992e07
histedit: move constraint verification to the 'action.verify' method
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29878
diff
changeset
|
524 |
29880
a485ec066867
histedt: use inheritance to override the constraints in 'base'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29879
diff
changeset
|
525 def _verifynodeconstraints(self, prev, expected, seen): |
a485ec066867
histedt: use inheritance to override the constraints in 'base'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29879
diff
changeset
|
526 # by default command need a node in the edited list |
a485ec066867
histedt: use inheritance to override the constraints in 'base'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29879
diff
changeset
|
527 if self.node not in expected: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
528 raise error.ParseError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
529 _(b'%s "%s" changeset was not a candidate') |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
530 % (self.verb, short(self.node)), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
531 hint=_(b'only use listed changesets'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
532 ) |
29880
a485ec066867
histedt: use inheritance to override the constraints in 'base'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29879
diff
changeset
|
533 # and only one command per node |
a485ec066867
histedt: use inheritance to override the constraints in 'base'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29879
diff
changeset
|
534 if self.node in seen: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
535 raise error.ParseError( |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
536 _(b'duplicated command for changeset %s') % short(self.node) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
537 ) |
24765
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
538 |
29466
a0efbfbba7b5
histedit: remove unneeded initial parameter
Sean Farley <sean@farley.io>
parents:
29465
diff
changeset
|
539 def torule(self): |
27203
b6a0f0895a25
histedit: add torule method to histedit action objects
Mateusz Kwapich <mitrandir@fb.com>
parents:
27202
diff
changeset
|
540 """build a histedit rule line for an action |
b6a0f0895a25
histedit: add torule method to histedit action objects
Mateusz Kwapich <mitrandir@fb.com>
parents:
27202
diff
changeset
|
541 |
b6a0f0895a25
histedit: add torule method to histedit action objects
Mateusz Kwapich <mitrandir@fb.com>
parents:
27202
diff
changeset
|
542 by default lines are in the form: |
b6a0f0895a25
histedit: add torule method to histedit action objects
Mateusz Kwapich <mitrandir@fb.com>
parents:
27202
diff
changeset
|
543 <hash> <rev> <summary> |
b6a0f0895a25
histedit: add torule method to histedit action objects
Mateusz Kwapich <mitrandir@fb.com>
parents:
27202
diff
changeset
|
544 """ |
b6a0f0895a25
histedit: add torule method to histedit action objects
Mateusz Kwapich <mitrandir@fb.com>
parents:
27202
diff
changeset
|
545 ctx = self.repo[self.node] |
41509
11c076786d56
histedit: add templating support to histedit's rule file generation
Augie Fackler <augie@google.com>
parents:
41399
diff
changeset
|
546 ui = self.repo.ui |
45858
62983988bbf5
histedit: disable color while rendering template for use in plan
Martin von Zweigbergk <martinvonz@google.com>
parents:
45857
diff
changeset
|
547 # We don't want color codes in the commit message template, so |
62983988bbf5
histedit: disable color while rendering template for use in plan
Martin von Zweigbergk <martinvonz@google.com>
parents:
45857
diff
changeset
|
548 # disable the label() template function while we render it. |
62983988bbf5
histedit: disable color while rendering template for use in plan
Martin von Zweigbergk <martinvonz@google.com>
parents:
45857
diff
changeset
|
549 with ui.configoverride( |
62983988bbf5
histedit: disable color while rendering template for use in plan
Martin von Zweigbergk <martinvonz@google.com>
parents:
45857
diff
changeset
|
550 {(b'templatealias', b'label(l,x)'): b"x"}, b'histedit' |
62983988bbf5
histedit: disable color while rendering template for use in plan
Martin von Zweigbergk <martinvonz@google.com>
parents:
45857
diff
changeset
|
551 ): |
45857
ec6ba70be853
tests: show how `hg histedit` can put color codes in histedit plan
Martin von Zweigbergk <martinvonz@google.com>
parents:
45791
diff
changeset
|
552 summary = cmdutil.rendertemplate( |
ec6ba70be853
tests: show how `hg histedit` can put color codes in histedit plan
Martin von Zweigbergk <martinvonz@google.com>
parents:
45791
diff
changeset
|
553 ctx, ui.config(b'histedit', b'summary-template') |
ec6ba70be853
tests: show how `hg histedit` can put color codes in histedit plan
Martin von Zweigbergk <martinvonz@google.com>
parents:
45791
diff
changeset
|
554 ) |
49022
e160f073c37b
histedit: use new function for getting first line of a string
Martin von Zweigbergk <martinvonz@google.com>
parents:
48946
diff
changeset
|
555 line = b'%s %s %s' % (self.verb, ctx, stringutil.firstline(summary)) |
27203
b6a0f0895a25
histedit: add torule method to histedit action objects
Mateusz Kwapich <mitrandir@fb.com>
parents:
27202
diff
changeset
|
556 # trim to 75 columns by default so it's not stupidly wide in my editor |
b6a0f0895a25
histedit: add torule method to histedit action objects
Mateusz Kwapich <mitrandir@fb.com>
parents:
27202
diff
changeset
|
557 # (the 5 more are left for verb) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
558 maxlen = self.repo.ui.configint(b'histedit', b'linelen') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
559 maxlen = max(maxlen, 22) # avoid truncating hash |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37016
diff
changeset
|
560 return stringutil.ellipsis(line, maxlen) |
27203
b6a0f0895a25
histedit: add torule method to histedit action objects
Mateusz Kwapich <mitrandir@fb.com>
parents:
27202
diff
changeset
|
561 |
27206
7a523b6d5265
histedit: add tostate method to histedit action
Mateusz Kwapich <mitrandir@fb.com>
parents:
27205
diff
changeset
|
562 def tostate(self): |
7a523b6d5265
histedit: add tostate method to histedit action
Mateusz Kwapich <mitrandir@fb.com>
parents:
27205
diff
changeset
|
563 """Print an action in format used by histedit state files |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45893
diff
changeset
|
564 (the first line is a verb, the remainder is the second) |
27206
7a523b6d5265
histedit: add tostate method to histedit action
Mateusz Kwapich <mitrandir@fb.com>
parents:
27205
diff
changeset
|
565 """ |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
566 return b"%s\n%s" % (self.verb, hex(self.node)) |
27206
7a523b6d5265
histedit: add tostate method to histedit action
Mateusz Kwapich <mitrandir@fb.com>
parents:
27205
diff
changeset
|
567 |
24765
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
568 def run(self): |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
569 """Runs the action. The default behavior is simply apply the action's |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
570 rulectx onto the current parentctx.""" |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
571 self.applychange() |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
572 self.continuedirty() |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
573 return self.continueclean() |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
574 |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
575 def applychange(self): |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
576 """Applies the changes from this action's rulectx onto the current |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
577 parentctx, but does not commit them.""" |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
578 repo = self.repo |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
579 rulectx = repo[self.node] |
47437
7a430116f639
ui: add a context manager for silencing the ui (pushbuffer+popbuffer)
Martin von Zweigbergk <martinvonz@google.com>
parents:
47435
diff
changeset
|
580 with repo.ui.silent(): |
7a430116f639
ui: add a context manager for silencing the ui (pushbuffer+popbuffer)
Martin von Zweigbergk <martinvonz@google.com>
parents:
47435
diff
changeset
|
581 hg.update(repo, self.state.parentctxnode, quietempty=True) |
24765
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
582 stats = applychanges(repo.ui, repo, rulectx, {}) |
50257
a301f0fad046
branch: pass current transaction when writing branch in histedit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49972
diff
changeset
|
583 repo.dirstate.setbranch(rulectx.branch(), repo.currenttransaction()) |
37125
6f570c501e3e
merge: deprecate accessing update results by index
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37108
diff
changeset
|
584 if stats.unresolvedcount: |
27629
e7ff83b2bcfe
histedit: list action when intervention is required
timeless <timeless@mozdev.org>
parents:
27627
diff
changeset
|
585 raise error.InterventionRequired( |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
586 _(b'Fix up the change (%s %s)') % (self.verb, short(self.node)), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
587 hint=_(b'hg histedit --continue to resume'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
588 ) |
24765
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
589 |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
590 def continuedirty(self): |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
591 """Continues the action when changes have been applied to the working |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
592 copy. The default behavior is to commit the dirty changes.""" |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
593 repo = self.repo |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
594 rulectx = repo[self.node] |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
595 |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
596 editor = self.commiteditor() |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
597 commit = commitfuncfor(repo, rulectx) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
598 if repo.ui.configbool(b'rewrite', b'update-timestamp'): |
41213
704a3aa3dc0a
histedit: add rewrite.update-timestamp support to fold and mess
Taapas Agrawal <taapas2897@gmail.com>
parents:
41212
diff
changeset
|
599 date = dateutil.makedate() |
704a3aa3dc0a
histedit: add rewrite.update-timestamp support to fold and mess
Taapas Agrawal <taapas2897@gmail.com>
parents:
41212
diff
changeset
|
600 else: |
704a3aa3dc0a
histedit: add rewrite.update-timestamp support to fold and mess
Taapas Agrawal <taapas2897@gmail.com>
parents:
41212
diff
changeset
|
601 date = rulectx.date() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
602 commit( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
603 text=rulectx.description(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
604 user=rulectx.user(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
605 date=date, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
606 extra=rulectx.extra(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
607 editor=editor, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
608 ) |
24765
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
609 |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
610 def commiteditor(self): |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
611 """The editor to be used to edit the commit message.""" |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
612 return False |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
613 |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
614 def continueclean(self): |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
615 """Continues the action when the working copy is clean. The default |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
616 behavior is to accept the current commit as the new version of the |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
617 rulectx.""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
618 ctx = self.repo[b'.'] |
24765
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
619 if ctx.node() == self.state.parentctxnode: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
620 self.repo.ui.warn( |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
621 _(b'%s: skipping changeset (no changes)\n') % short(self.node) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
622 ) |
24765
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
623 return ctx, [(self.node, tuple())] |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
624 if ctx.node() == self.node: |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
625 # Nothing changed |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
626 return ctx, [] |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
627 return ctx, [(self.node, (ctx.node(),))] |
bdf84cc2115b
histedit: add a new histeditaction class
Durham Goode <durham@fb.com>
parents:
24764
diff
changeset
|
628 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
629 |
18436
b38c10502af9
histedit: factor most commit creation in a function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18370
diff
changeset
|
630 def commitfuncfor(repo, src): |
b38c10502af9
histedit: factor most commit creation in a function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18370
diff
changeset
|
631 """Build a commit function for the replacement of <src> |
b38c10502af9
histedit: factor most commit creation in a function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18370
diff
changeset
|
632 |
18644
3e92772d5383
spelling: fix some minor issues found by spell checker
Mads Kiilerich <mads@kiilerich.com>
parents:
18609
diff
changeset
|
633 This function ensure we apply the same treatment to all changesets. |
18436
b38c10502af9
histedit: factor most commit creation in a function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18370
diff
changeset
|
634 |
18437
358c23e8f1c6
histedit: record histedit source (issue3681)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18436
diff
changeset
|
635 - Add a 'histedit_source' entry in extra. |
18436
b38c10502af9
histedit: factor most commit creation in a function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18370
diff
changeset
|
636 |
25450
7e36c3000ead
histedit: copyedit docstring wording problem I noticed while here
Augie Fackler <augie@google.com>
parents:
25412
diff
changeset
|
637 Note that fold has its own separated logic because its handling is a bit |
18436
b38c10502af9
histedit: factor most commit creation in a function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18370
diff
changeset
|
638 different and not easily factored out of the fold method. |
b38c10502af9
histedit: factor most commit creation in a function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18370
diff
changeset
|
639 """ |
18440
35513c59f376
histedit: proper phase conservation (issue3724)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18437
diff
changeset
|
640 phasemin = src.phase() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
641 |
18436
b38c10502af9
histedit: factor most commit creation in a function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18370
diff
changeset
|
642 def commitfunc(**kwargs): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
643 overrides = {(b'phases', b'new-commit'): phasemin} |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
644 with repo.ui.configoverride(overrides, b'histedit'): |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43376
diff
changeset
|
645 extra = kwargs.get('extra', {}).copy() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
646 extra[b'histedit_source'] = src.hex() |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43376
diff
changeset
|
647 kwargs['extra'] = extra |
18440
35513c59f376
histedit: proper phase conservation (issue3724)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18437
diff
changeset
|
648 return repo.commit(**kwargs) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
649 |
18436
b38c10502af9
histedit: factor most commit creation in a function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18370
diff
changeset
|
650 return commitfunc |
b38c10502af9
histedit: factor most commit creation in a function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18370
diff
changeset
|
651 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
652 |
17647
d34ba4991188
histedit: replaces patching logic by merges
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17645
diff
changeset
|
653 def applychanges(ui, repo, ctx, opts): |
d34ba4991188
histedit: replaces patching logic by merges
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17645
diff
changeset
|
654 """Merge changeset from ctx (only) in the current working directory""" |
45375
8c466bcb0879
revert: remove dangerous `parents` argument from `cmdutil.revert()`
Martin von Zweigbergk <martinvonz@google.com>
parents:
45019
diff
changeset
|
655 if ctx.p1().node() == repo.dirstate.p1(): |
26171 | 656 # edits are "in place" we do not need to make any merge, |
27603
8a87627d263a
histedit: fix comment in applychanges
timeless <timeless@mozdev.org>
parents:
27600
diff
changeset
|
657 # just applies changes on parent for editing |
47437
7a430116f639
ui: add a context manager for silencing the ui (pushbuffer+popbuffer)
Martin von Zweigbergk <martinvonz@google.com>
parents:
47435
diff
changeset
|
658 with ui.silent(): |
7a430116f639
ui: add a context manager for silencing the ui (pushbuffer+popbuffer)
Martin von Zweigbergk <martinvonz@google.com>
parents:
47435
diff
changeset
|
659 cmdutil.revert(ui, repo, ctx, all=True) |
7a430116f639
ui: add a context manager for silencing the ui (pushbuffer+popbuffer)
Martin von Zweigbergk <martinvonz@google.com>
parents:
47435
diff
changeset
|
660 stats = mergemod.updateresult(0, 0, 0, 0) |
17647
d34ba4991188
histedit: replaces patching logic by merges
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17645
diff
changeset
|
661 else: |
d34ba4991188
histedit: replaces patching logic by merges
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17645
diff
changeset
|
662 try: |
d34ba4991188
histedit: replaces patching logic by merges
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17645
diff
changeset
|
663 # ui.forcemerge is an internal variable, do not document |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
664 repo.ui.setconfig( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
665 b'ui', b'forcemerge', opts.get(b'tool', b''), b'histedit' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
666 ) |
48591
f1162b125991
histedit: attempt to make merge labels more helpful
Martin von Zweigbergk <martinvonz@google.com>
parents:
48371
diff
changeset
|
667 stats = mergemod.graft( |
f1162b125991
histedit: attempt to make merge labels more helpful
Martin von Zweigbergk <martinvonz@google.com>
parents:
48371
diff
changeset
|
668 repo, |
f1162b125991
histedit: attempt to make merge labels more helpful
Martin von Zweigbergk <martinvonz@google.com>
parents:
48371
diff
changeset
|
669 ctx, |
f1162b125991
histedit: attempt to make merge labels more helpful
Martin von Zweigbergk <martinvonz@google.com>
parents:
48371
diff
changeset
|
670 labels=[ |
f1162b125991
histedit: attempt to make merge labels more helpful
Martin von Zweigbergk <martinvonz@google.com>
parents:
48371
diff
changeset
|
671 b'already edited', |
f1162b125991
histedit: attempt to make merge labels more helpful
Martin von Zweigbergk <martinvonz@google.com>
parents:
48371
diff
changeset
|
672 b'current change', |
f1162b125991
histedit: attempt to make merge labels more helpful
Martin von Zweigbergk <martinvonz@google.com>
parents:
48371
diff
changeset
|
673 b'parent of current change', |
f1162b125991
histedit: attempt to make merge labels more helpful
Martin von Zweigbergk <martinvonz@google.com>
parents:
48371
diff
changeset
|
674 ], |
f1162b125991
histedit: attempt to make merge labels more helpful
Martin von Zweigbergk <martinvonz@google.com>
parents:
48371
diff
changeset
|
675 ) |
17647
d34ba4991188
histedit: replaces patching logic by merges
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17645
diff
changeset
|
676 finally: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
677 repo.ui.setconfig(b'ui', b'forcemerge', b'', b'histedit') |
17647
d34ba4991188
histedit: replaces patching logic by merges
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17645
diff
changeset
|
678 return stats |
17407
31c123a2f273
histedit: factored out diff/patch logic
Leah Xue <leahxue@fb.com>
parents:
17340
diff
changeset
|
679 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
680 |
36403
10de411d7207
histedit: rename variables so they have "ctx" in them
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36238
diff
changeset
|
681 def collapse(repo, firstctx, lastctx, commitopts, skipprompt=False): |
17644
9ae073f10572
histedit: fold in memory
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17643
diff
changeset
|
682 """collapse the set of revisions from first to last as new one. |
9ae073f10572
histedit: fold in memory
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17643
diff
changeset
|
683 |
9ae073f10572
histedit: fold in memory
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17643
diff
changeset
|
684 Expected commit options are: |
9ae073f10572
histedit: fold in memory
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17643
diff
changeset
|
685 - message |
9ae073f10572
histedit: fold in memory
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17643
diff
changeset
|
686 - date |
9ae073f10572
histedit: fold in memory
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17643
diff
changeset
|
687 - username |
17738
b8424c92ba2b
spelling: fix minor spell checker issues
Mads Kiilerich <mads@kiilerich.com>
parents:
17666
diff
changeset
|
688 Commit message is edited in all cases. |
17644
9ae073f10572
histedit: fold in memory
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17643
diff
changeset
|
689 |
9ae073f10572
histedit: fold in memory
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17643
diff
changeset
|
690 This function works in memory.""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
691 ctxs = list(repo.set(b'%d::%d', firstctx.rev(), lastctx.rev())) |
17644
9ae073f10572
histedit: fold in memory
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17643
diff
changeset
|
692 if not ctxs: |
9ae073f10572
histedit: fold in memory
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17643
diff
changeset
|
693 return None |
25452
43906060a3f4
histedit: abort rather than edit a public changeset (issue4704)
Augie Fackler <augie@google.com>
parents:
25450
diff
changeset
|
694 for c in ctxs: |
43906060a3f4
histedit: abort rather than edit a public changeset (issue4704)
Augie Fackler <augie@google.com>
parents:
25450
diff
changeset
|
695 if not c.mutable(): |
27545
a67d2e059a51
histedit: use parse-error exception for parsing
timeless <timeless@mozdev.org>
parents:
27543
diff
changeset
|
696 raise error.ParseError( |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
697 _(b"cannot fold into public change %s") % short(c.node()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
698 ) |
41397
0bd56c291359
cleanup: use p1() and p2() instead of parents()[0] and parents()[1]
Martin von Zweigbergk <martinvonz@google.com>
parents:
41223
diff
changeset
|
699 base = firstctx.p1() |
17644
9ae073f10572
histedit: fold in memory
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17643
diff
changeset
|
700 |
9ae073f10572
histedit: fold in memory
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17643
diff
changeset
|
701 # commit a new version of the old changeset, including the update |
9ae073f10572
histedit: fold in memory
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17643
diff
changeset
|
702 # collect all files which might be affected |
9ae073f10572
histedit: fold in memory
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17643
diff
changeset
|
703 files = set() |
9ae073f10572
histedit: fold in memory
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17643
diff
changeset
|
704 for ctx in ctxs: |
9ae073f10572
histedit: fold in memory
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17643
diff
changeset
|
705 files.update(ctx.files()) |
9ae073f10572
histedit: fold in memory
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17643
diff
changeset
|
706 |
9ae073f10572
histedit: fold in memory
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17643
diff
changeset
|
707 # Recompute copies (avoid recording a -> b -> a) |
36403
10de411d7207
histedit: rename variables so they have "ctx" in them
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36238
diff
changeset
|
708 copied = copies.pathcopies(base, lastctx) |
17644
9ae073f10572
histedit: fold in memory
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17643
diff
changeset
|
709 |
9ae073f10572
histedit: fold in memory
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17643
diff
changeset
|
710 # prune files which were reverted by the updates |
36403
10de411d7207
histedit: rename variables so they have "ctx" in them
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36238
diff
changeset
|
711 files = [f for f in files if not cmdutil.samefile(f, lastctx, base)] |
17644
9ae073f10572
histedit: fold in memory
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17643
diff
changeset
|
712 # commit version of these files as defined by head |
36403
10de411d7207
histedit: rename variables so they have "ctx" in them
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36238
diff
changeset
|
713 headmf = lastctx.manifest() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
714 |
17644
9ae073f10572
histedit: fold in memory
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17643
diff
changeset
|
715 def filectxfn(repo, ctx, path): |
9ae073f10572
histedit: fold in memory
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17643
diff
changeset
|
716 if path in headmf: |
36403
10de411d7207
histedit: rename variables so they have "ctx" in them
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36238
diff
changeset
|
717 fctx = lastctx[path] |
17644
9ae073f10572
histedit: fold in memory
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17643
diff
changeset
|
718 flags = fctx.flags() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
719 mctx = context.memfilectx( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
720 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
721 ctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
722 fctx.path(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
723 fctx.data(), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
724 islink=b'l' in flags, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
725 isexec=b'x' in flags, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
726 copysource=copied.get(path), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
727 ) |
17644
9ae073f10572
histedit: fold in memory
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17643
diff
changeset
|
728 return mctx |
22296
650b5b6e75ed
convert: use None value for missing files instead of overloading IOError
Mads Kiilerich <madski@unity3d.com>
parents:
22280
diff
changeset
|
729 return None |
17644
9ae073f10572
histedit: fold in memory
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17643
diff
changeset
|
730 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
731 if commitopts.get(b'message'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
732 message = commitopts[b'message'] |
17644
9ae073f10572
histedit: fold in memory
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17643
diff
changeset
|
733 else: |
36403
10de411d7207
histedit: rename variables so they have "ctx" in them
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36238
diff
changeset
|
734 message = firstctx.description() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
735 user = commitopts.get(b'user') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
736 date = commitopts.get(b'date') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
737 extra = commitopts.get(b'extra') |
17644
9ae073f10572
histedit: fold in memory
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17643
diff
changeset
|
738 |
36403
10de411d7207
histedit: rename variables so they have "ctx" in them
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36238
diff
changeset
|
739 parents = (firstctx.p1().node(), firstctx.p2().node()) |
22152
d2a5986cb89d
histedit: add "roll" command to fold commit data and drop message (issue4256)
Mike Edgar <adgar@google.com>
parents:
22059
diff
changeset
|
740 editor = None |
24828
5045a003260b
histedit: fix rollup prompting for a commit message (issue4606)
Durham Goode <durham@fb.com>
parents:
24810
diff
changeset
|
741 if not skipprompt: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
742 editor = cmdutil.getcommiteditor(edit=True, editform=b'histedit.fold') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
743 new = context.memctx( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
744 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
745 parents=parents, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
746 text=message, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
747 files=files, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
748 filectxfn=filectxfn, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
749 user=user, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
750 date=date, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
751 extra=extra, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
752 editor=editor, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
753 ) |
17644
9ae073f10572
histedit: fold in memory
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17643
diff
changeset
|
754 return repo.commitctx(new) |
9ae073f10572
histedit: fold in memory
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17643
diff
changeset
|
755 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
756 |
26981
cda2e980281e
histedit: extracts _isdirtywc function
liscju <piotr.listkiewicz@gmail.com>
parents:
26798
diff
changeset
|
757 def _isdirtywc(repo): |
cda2e980281e
histedit: extracts _isdirtywc function
liscju <piotr.listkiewicz@gmail.com>
parents:
26798
diff
changeset
|
758 return repo[None].dirty(missing=True) |
cda2e980281e
histedit: extracts _isdirtywc function
liscju <piotr.listkiewicz@gmail.com>
parents:
26798
diff
changeset
|
759 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
760 |
27084
383f10b67fd6
histedit: add abortdirty function
Mateusz Kwapich <mitrandir@fb.com>
parents:
27083
diff
changeset
|
761 def abortdirty(): |
48054
f27a83399abb
histedit: use more specific exceptions for more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
48053
diff
changeset
|
762 raise error.StateError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
763 _(b'working copy has pending changes'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
764 hint=_( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
765 b'amend, commit, or revert them and run histedit ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
766 b'--continue, or abort with histedit --abort' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
767 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
768 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
769 |
27084
383f10b67fd6
histedit: add abortdirty function
Mateusz Kwapich <mitrandir@fb.com>
parents:
27083
diff
changeset
|
770 |
27675
d073f4c70575
histedit: replace @addhisteditaction with @action
timeless <timeless@mozdev.org>
parents:
27674
diff
changeset
|
771 def action(verbs, message, priority=False, internal=False): |
d073f4c70575
histedit: replace @addhisteditaction with @action
timeless <timeless@mozdev.org>
parents:
27674
diff
changeset
|
772 def wrap(cls): |
d073f4c70575
histedit: replace @addhisteditaction with @action
timeless <timeless@mozdev.org>
parents:
27674
diff
changeset
|
773 assert not priority or not internal |
d073f4c70575
histedit: replace @addhisteditaction with @action
timeless <timeless@mozdev.org>
parents:
27674
diff
changeset
|
774 verb = verbs[0] |
d073f4c70575
histedit: replace @addhisteditaction with @action
timeless <timeless@mozdev.org>
parents:
27674
diff
changeset
|
775 if priority: |
d073f4c70575
histedit: replace @addhisteditaction with @action
timeless <timeless@mozdev.org>
parents:
27674
diff
changeset
|
776 primaryactions.add(verb) |
d073f4c70575
histedit: replace @addhisteditaction with @action
timeless <timeless@mozdev.org>
parents:
27674
diff
changeset
|
777 elif internal: |
d073f4c70575
histedit: replace @addhisteditaction with @action
timeless <timeless@mozdev.org>
parents:
27674
diff
changeset
|
778 internalactions.add(verb) |
d073f4c70575
histedit: replace @addhisteditaction with @action
timeless <timeless@mozdev.org>
parents:
27674
diff
changeset
|
779 elif len(verbs) > 1: |
d073f4c70575
histedit: replace @addhisteditaction with @action
timeless <timeless@mozdev.org>
parents:
27674
diff
changeset
|
780 secondaryactions.add(verb) |
d073f4c70575
histedit: replace @addhisteditaction with @action
timeless <timeless@mozdev.org>
parents:
27674
diff
changeset
|
781 else: |
d073f4c70575
histedit: replace @addhisteditaction with @action
timeless <timeless@mozdev.org>
parents:
27674
diff
changeset
|
782 tertiaryactions.add(verb) |
27201
dcb536d2e138
histedit: add addhisteditaction decorator
Mateusz Kwapich <mitrandir@fb.com>
parents:
27200
diff
changeset
|
783 |
27675
d073f4c70575
histedit: replace @addhisteditaction with @action
timeless <timeless@mozdev.org>
parents:
27674
diff
changeset
|
784 cls.verb = verb |
d073f4c70575
histedit: replace @addhisteditaction with @action
timeless <timeless@mozdev.org>
parents:
27674
diff
changeset
|
785 cls.verbs = verbs |
d073f4c70575
histedit: replace @addhisteditaction with @action
timeless <timeless@mozdev.org>
parents:
27674
diff
changeset
|
786 cls.message = message |
27201
dcb536d2e138
histedit: add addhisteditaction decorator
Mateusz Kwapich <mitrandir@fb.com>
parents:
27200
diff
changeset
|
787 for verb in verbs: |
dcb536d2e138
histedit: add addhisteditaction decorator
Mateusz Kwapich <mitrandir@fb.com>
parents:
27200
diff
changeset
|
788 actiontable[verb] = cls |
dcb536d2e138
histedit: add addhisteditaction decorator
Mateusz Kwapich <mitrandir@fb.com>
parents:
27200
diff
changeset
|
789 return cls |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
790 |
27201
dcb536d2e138
histedit: add addhisteditaction decorator
Mateusz Kwapich <mitrandir@fb.com>
parents:
27200
diff
changeset
|
791 return wrap |
dcb536d2e138
histedit: add addhisteditaction decorator
Mateusz Kwapich <mitrandir@fb.com>
parents:
27200
diff
changeset
|
792 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
793 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
794 @action([b'pick', b'p'], _(b'use commit'), priority=True) |
24767
477e76936b1d
histedit: convert pick action into a class
Durham Goode <durham@fb.com>
parents:
24766
diff
changeset
|
795 class pick(histeditaction): |
477e76936b1d
histedit: convert pick action into a class
Durham Goode <durham@fb.com>
parents:
24766
diff
changeset
|
796 def run(self): |
477e76936b1d
histedit: convert pick action into a class
Durham Goode <durham@fb.com>
parents:
24766
diff
changeset
|
797 rulectx = self.repo[self.node] |
41397
0bd56c291359
cleanup: use p1() and p2() instead of parents()[0] and parents()[1]
Martin von Zweigbergk <martinvonz@google.com>
parents:
41223
diff
changeset
|
798 if rulectx.p1().node() == self.state.parentctxnode: |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
799 self.repo.ui.debug(b'node %s unchanged\n' % short(self.node)) |
24767
477e76936b1d
histedit: convert pick action into a class
Durham Goode <durham@fb.com>
parents:
24766
diff
changeset
|
800 return rulectx, [] |
17064
168cc52ad7c2
histedit: new extension for interactive history editing
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
801 |
24767
477e76936b1d
histedit: convert pick action into a class
Durham Goode <durham@fb.com>
parents:
24766
diff
changeset
|
802 return super(pick, self).run() |
17064
168cc52ad7c2
histedit: new extension for interactive history editing
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
803 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
804 |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
805 @action( |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
806 [b'edit', b'e'], |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
807 _(b'use commit, but allow edits before making new commit'), |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
808 priority=True, |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
809 ) |
24770
facdb20e60e9
histedit: convert edit action into a class
Durham Goode <durham@fb.com>
parents:
24769
diff
changeset
|
810 class edit(histeditaction): |
facdb20e60e9
histedit: convert edit action into a class
Durham Goode <durham@fb.com>
parents:
24769
diff
changeset
|
811 def run(self): |
facdb20e60e9
histedit: convert edit action into a class
Durham Goode <durham@fb.com>
parents:
24769
diff
changeset
|
812 repo = self.repo |
facdb20e60e9
histedit: convert edit action into a class
Durham Goode <durham@fb.com>
parents:
24769
diff
changeset
|
813 rulectx = repo[self.node] |
27407
bf4d5d8dc2aa
histedit: omit useless message from update (edit)
timeless <timeless@mozdev.org>
parents:
27406
diff
changeset
|
814 hg.update(repo, self.state.parentctxnode, quietempty=True) |
24770
facdb20e60e9
histedit: convert edit action into a class
Durham Goode <durham@fb.com>
parents:
24769
diff
changeset
|
815 applychanges(repo.ui, repo, rulectx, {}) |
46103
3f82a915ab2a
histedit: tweak `edit` message to try and guide users to our workflow
Augie Fackler <augie@google.com>
parents:
45942
diff
changeset
|
816 hint = _(b'to edit %s, `hg histedit --continue` after making changes') |
24770
facdb20e60e9
histedit: convert edit action into a class
Durham Goode <durham@fb.com>
parents:
24769
diff
changeset
|
817 raise error.InterventionRequired( |
46103
3f82a915ab2a
histedit: tweak `edit` message to try and guide users to our workflow
Augie Fackler <augie@google.com>
parents:
45942
diff
changeset
|
818 _(b'Editing (%s), commit as needed now to split the change') |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
819 % short(self.node), |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
820 hint=hint % short(self.node), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
821 ) |
24770
facdb20e60e9
histedit: convert edit action into a class
Durham Goode <durham@fb.com>
parents:
24769
diff
changeset
|
822 |
facdb20e60e9
histedit: convert edit action into a class
Durham Goode <durham@fb.com>
parents:
24769
diff
changeset
|
823 def commiteditor(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
824 return cmdutil.getcommiteditor(edit=True, editform=b'histedit.edit') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
825 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
826 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
827 @action([b'fold', b'f'], _(b'use commit, but combine it with the one above')) |
24771
3133e246c912
histedit: convert fold/roll actions into a class
Durham Goode <durham@fb.com>
parents:
24770
diff
changeset
|
828 class fold(histeditaction): |
29879
b566c5992e07
histedit: move constraint verification to the 'action.verify' method
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29878
diff
changeset
|
829 def verify(self, prev, expected, seen): |
47062
f38bf44e077f
black: make codebase compatible with black v21.4b2 and v20.8b1
Kyle Lippincott <spectral@google.com>
parents:
46941
diff
changeset
|
830 """Verifies semantic correctness of the fold rule""" |
29879
b566c5992e07
histedit: move constraint verification to the 'action.verify' method
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29878
diff
changeset
|
831 super(fold, self).verify(prev, expected, seen) |
27542
bf0900d3819c
histedit: check fold of public change during verify
timeless <timeless@mozdev.org>
parents:
27541
diff
changeset
|
832 repo = self.repo |
bf0900d3819c
histedit: check fold of public change during verify
timeless <timeless@mozdev.org>
parents:
27541
diff
changeset
|
833 if not prev: |
41397
0bd56c291359
cleanup: use p1() and p2() instead of parents()[0] and parents()[1]
Martin von Zweigbergk <martinvonz@google.com>
parents:
41223
diff
changeset
|
834 c = repo[self.node].p1() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
835 elif not prev.verb in (b'pick', b'base'): |
27542
bf0900d3819c
histedit: check fold of public change during verify
timeless <timeless@mozdev.org>
parents:
27541
diff
changeset
|
836 return |
bf0900d3819c
histedit: check fold of public change during verify
timeless <timeless@mozdev.org>
parents:
27541
diff
changeset
|
837 else: |
bf0900d3819c
histedit: check fold of public change during verify
timeless <timeless@mozdev.org>
parents:
27541
diff
changeset
|
838 c = repo[prev.node] |
bf0900d3819c
histedit: check fold of public change during verify
timeless <timeless@mozdev.org>
parents:
27541
diff
changeset
|
839 if not c.mutable(): |
27545
a67d2e059a51
histedit: use parse-error exception for parsing
timeless <timeless@mozdev.org>
parents:
27543
diff
changeset
|
840 raise error.ParseError( |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
841 _(b"cannot fold into public change %s") % short(c.node()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
842 ) |
27542
bf0900d3819c
histedit: check fold of public change during verify
timeless <timeless@mozdev.org>
parents:
27541
diff
changeset
|
843 |
24771
3133e246c912
histedit: convert fold/roll actions into a class
Durham Goode <durham@fb.com>
parents:
24770
diff
changeset
|
844 def continuedirty(self): |
3133e246c912
histedit: convert fold/roll actions into a class
Durham Goode <durham@fb.com>
parents:
24770
diff
changeset
|
845 repo = self.repo |
3133e246c912
histedit: convert fold/roll actions into a class
Durham Goode <durham@fb.com>
parents:
24770
diff
changeset
|
846 rulectx = repo[self.node] |
3133e246c912
histedit: convert fold/roll actions into a class
Durham Goode <durham@fb.com>
parents:
24770
diff
changeset
|
847 |
3133e246c912
histedit: convert fold/roll actions into a class
Durham Goode <durham@fb.com>
parents:
24770
diff
changeset
|
848 commit = commitfuncfor(repo, rulectx) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
849 commit( |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
850 text=b'fold-temp-revision %s' % short(self.node), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
851 user=rulectx.user(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
852 date=rulectx.date(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
853 extra=rulectx.extra(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
854 ) |
24771
3133e246c912
histedit: convert fold/roll actions into a class
Durham Goode <durham@fb.com>
parents:
24770
diff
changeset
|
855 |
3133e246c912
histedit: convert fold/roll actions into a class
Durham Goode <durham@fb.com>
parents:
24770
diff
changeset
|
856 def continueclean(self): |
3133e246c912
histedit: convert fold/roll actions into a class
Durham Goode <durham@fb.com>
parents:
24770
diff
changeset
|
857 repo = self.repo |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
858 ctx = repo[b'.'] |
24771
3133e246c912
histedit: convert fold/roll actions into a class
Durham Goode <durham@fb.com>
parents:
24770
diff
changeset
|
859 rulectx = repo[self.node] |
3133e246c912
histedit: convert fold/roll actions into a class
Durham Goode <durham@fb.com>
parents:
24770
diff
changeset
|
860 parentctxnode = self.state.parentctxnode |
3133e246c912
histedit: convert fold/roll actions into a class
Durham Goode <durham@fb.com>
parents:
24770
diff
changeset
|
861 if ctx.node() == parentctxnode: |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
862 repo.ui.warn(_(b'%s: empty changeset\n') % short(self.node)) |
24771
3133e246c912
histedit: convert fold/roll actions into a class
Durham Goode <durham@fb.com>
parents:
24770
diff
changeset
|
863 return ctx, [(self.node, (parentctxnode,))] |
22152
d2a5986cb89d
histedit: add "roll" command to fold commit data and drop message (issue4256)
Mike Edgar <adgar@google.com>
parents:
22059
diff
changeset
|
864 |
24771
3133e246c912
histedit: convert fold/roll actions into a class
Durham Goode <durham@fb.com>
parents:
24770
diff
changeset
|
865 parentctx = repo[parentctxnode] |
44452
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
44441
diff
changeset
|
866 newcommits = { |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
867 c.node() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
868 for c in repo.set(b'(%d::. - %d)', parentctx.rev(), parentctx.rev()) |
44452
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
44441
diff
changeset
|
869 } |
24771
3133e246c912
histedit: convert fold/roll actions into a class
Durham Goode <durham@fb.com>
parents:
24770
diff
changeset
|
870 if not newcommits: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
871 repo.ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
872 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
873 b'%s: cannot fold - working copy is not a ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
874 b'descendant of previous commit %s\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
875 ) |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
876 % (short(self.node), short(parentctxnode)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
877 ) |
24771
3133e246c912
histedit: convert fold/roll actions into a class
Durham Goode <durham@fb.com>
parents:
24770
diff
changeset
|
878 return ctx, [(self.node, (ctx.node(),))] |
3133e246c912
histedit: convert fold/roll actions into a class
Durham Goode <durham@fb.com>
parents:
24770
diff
changeset
|
879 |
3133e246c912
histedit: convert fold/roll actions into a class
Durham Goode <durham@fb.com>
parents:
24770
diff
changeset
|
880 middlecommits = newcommits.copy() |
3133e246c912
histedit: convert fold/roll actions into a class
Durham Goode <durham@fb.com>
parents:
24770
diff
changeset
|
881 middlecommits.discard(ctx.node()) |
3133e246c912
histedit: convert fold/roll actions into a class
Durham Goode <durham@fb.com>
parents:
24770
diff
changeset
|
882 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
883 return self.finishfold( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
884 repo.ui, repo, parentctx, rulectx, ctx.node(), middlecommits |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
885 ) |
24771
3133e246c912
histedit: convert fold/roll actions into a class
Durham Goode <durham@fb.com>
parents:
24770
diff
changeset
|
886 |
24773
090da03361c5
histedit: improve roll action integration with fold
Durham Goode <durham@fb.com>
parents:
24772
diff
changeset
|
887 def skipprompt(self): |
26246
bf81b696b8f4
histedit: use one editor when multiple folds happen in a row (issue3524) (BC)
Augie Fackler <augie@google.com>
parents:
26203
diff
changeset
|
888 """Returns true if the rule should skip the message editor. |
bf81b696b8f4
histedit: use one editor when multiple folds happen in a row (issue3524) (BC)
Augie Fackler <augie@google.com>
parents:
26203
diff
changeset
|
889 |
bf81b696b8f4
histedit: use one editor when multiple folds happen in a row (issue3524) (BC)
Augie Fackler <augie@google.com>
parents:
26203
diff
changeset
|
890 For example, 'fold' wants to show an editor, but 'rollup' |
bf81b696b8f4
histedit: use one editor when multiple folds happen in a row (issue3524) (BC)
Augie Fackler <augie@google.com>
parents:
26203
diff
changeset
|
891 doesn't want to. |
bf81b696b8f4
histedit: use one editor when multiple folds happen in a row (issue3524) (BC)
Augie Fackler <augie@google.com>
parents:
26203
diff
changeset
|
892 """ |
24773
090da03361c5
histedit: improve roll action integration with fold
Durham Goode <durham@fb.com>
parents:
24772
diff
changeset
|
893 return False |
24772
8f6494eb16eb
histedit: move finishfold into fold class
Durham Goode <durham@fb.com>
parents:
24771
diff
changeset
|
894 |
26246
bf81b696b8f4
histedit: use one editor when multiple folds happen in a row (issue3524) (BC)
Augie Fackler <augie@google.com>
parents:
26203
diff
changeset
|
895 def mergedescs(self): |
bf81b696b8f4
histedit: use one editor when multiple folds happen in a row (issue3524) (BC)
Augie Fackler <augie@google.com>
parents:
26203
diff
changeset
|
896 """Returns true if the rule should merge messages of multiple changes. |
bf81b696b8f4
histedit: use one editor when multiple folds happen in a row (issue3524) (BC)
Augie Fackler <augie@google.com>
parents:
26203
diff
changeset
|
897 |
bf81b696b8f4
histedit: use one editor when multiple folds happen in a row (issue3524) (BC)
Augie Fackler <augie@google.com>
parents:
26203
diff
changeset
|
898 This exists mainly so that 'rollup' rules can be a subclass of |
bf81b696b8f4
histedit: use one editor when multiple folds happen in a row (issue3524) (BC)
Augie Fackler <augie@google.com>
parents:
26203
diff
changeset
|
899 'fold'. |
bf81b696b8f4
histedit: use one editor when multiple folds happen in a row (issue3524) (BC)
Augie Fackler <augie@google.com>
parents:
26203
diff
changeset
|
900 """ |
bf81b696b8f4
histedit: use one editor when multiple folds happen in a row (issue3524) (BC)
Augie Fackler <augie@google.com>
parents:
26203
diff
changeset
|
901 return True |
bf81b696b8f4
histedit: use one editor when multiple folds happen in a row (issue3524) (BC)
Augie Fackler <augie@google.com>
parents:
26203
diff
changeset
|
902 |
31056
37ab9e20991c
histedit: modify rollup to discard date from the rollup commit (issue4820)
Ben Schmidt <insightfuls@users.noreply.github.com>
parents:
31055
diff
changeset
|
903 def firstdate(self): |
37ab9e20991c
histedit: modify rollup to discard date from the rollup commit (issue4820)
Ben Schmidt <insightfuls@users.noreply.github.com>
parents:
31055
diff
changeset
|
904 """Returns true if the rule should preserve the date of the first |
37ab9e20991c
histedit: modify rollup to discard date from the rollup commit (issue4820)
Ben Schmidt <insightfuls@users.noreply.github.com>
parents:
31055
diff
changeset
|
905 change. |
37ab9e20991c
histedit: modify rollup to discard date from the rollup commit (issue4820)
Ben Schmidt <insightfuls@users.noreply.github.com>
parents:
31055
diff
changeset
|
906 |
37ab9e20991c
histedit: modify rollup to discard date from the rollup commit (issue4820)
Ben Schmidt <insightfuls@users.noreply.github.com>
parents:
31055
diff
changeset
|
907 This exists mainly so that 'rollup' rules can be a subclass of |
37ab9e20991c
histedit: modify rollup to discard date from the rollup commit (issue4820)
Ben Schmidt <insightfuls@users.noreply.github.com>
parents:
31055
diff
changeset
|
908 'fold'. |
37ab9e20991c
histedit: modify rollup to discard date from the rollup commit (issue4820)
Ben Schmidt <insightfuls@users.noreply.github.com>
parents:
31055
diff
changeset
|
909 """ |
37ab9e20991c
histedit: modify rollup to discard date from the rollup commit (issue4820)
Ben Schmidt <insightfuls@users.noreply.github.com>
parents:
31055
diff
changeset
|
910 return False |
37ab9e20991c
histedit: modify rollup to discard date from the rollup commit (issue4820)
Ben Schmidt <insightfuls@users.noreply.github.com>
parents:
31055
diff
changeset
|
911 |
24773
090da03361c5
histedit: improve roll action integration with fold
Durham Goode <durham@fb.com>
parents:
24772
diff
changeset
|
912 def finishfold(self, ui, repo, ctx, oldctx, newnode, internalchanges): |
45577
5c8230ca37f2
merge: replace calls to hg.updaterepo() by merge.update()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45450
diff
changeset
|
913 mergemod.update(ctx.p1()) |
24772
8f6494eb16eb
histedit: move finishfold into fold class
Durham Goode <durham@fb.com>
parents:
24771
diff
changeset
|
914 ### prepare new commit data |
24773
090da03361c5
histedit: improve roll action integration with fold
Durham Goode <durham@fb.com>
parents:
24772
diff
changeset
|
915 commitopts = {} |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
916 commitopts[b'user'] = ctx.user() |
24772
8f6494eb16eb
histedit: move finishfold into fold class
Durham Goode <durham@fb.com>
parents:
24771
diff
changeset
|
917 # commit message |
26246
bf81b696b8f4
histedit: use one editor when multiple folds happen in a row (issue3524) (BC)
Augie Fackler <augie@google.com>
parents:
26203
diff
changeset
|
918 if not self.mergedescs(): |
24772
8f6494eb16eb
histedit: move finishfold into fold class
Durham Goode <durham@fb.com>
parents:
24771
diff
changeset
|
919 newmessage = ctx.description() |
8f6494eb16eb
histedit: move finishfold into fold class
Durham Goode <durham@fb.com>
parents:
24771
diff
changeset
|
920 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
921 newmessage = ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
922 b'\n***\n'.join( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
923 [ctx.description()] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
924 + [repo[r].description() for r in internalchanges] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
925 + [oldctx.description()] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
926 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
927 + b'\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
928 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
929 commitopts[b'message'] = newmessage |
24772
8f6494eb16eb
histedit: move finishfold into fold class
Durham Goode <durham@fb.com>
parents:
24771
diff
changeset
|
930 # date |
31056
37ab9e20991c
histedit: modify rollup to discard date from the rollup commit (issue4820)
Ben Schmidt <insightfuls@users.noreply.github.com>
parents:
31055
diff
changeset
|
931 if self.firstdate(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
932 commitopts[b'date'] = ctx.date() |
31056
37ab9e20991c
histedit: modify rollup to discard date from the rollup commit (issue4820)
Ben Schmidt <insightfuls@users.noreply.github.com>
parents:
31055
diff
changeset
|
933 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
934 commitopts[b'date'] = max(ctx.date(), oldctx.date()) |
41213
704a3aa3dc0a
histedit: add rewrite.update-timestamp support to fold and mess
Taapas Agrawal <taapas2897@gmail.com>
parents:
41212
diff
changeset
|
935 # if date is to be updated to current |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
936 if ui.configbool(b'rewrite', b'update-timestamp'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
937 commitopts[b'date'] = dateutil.makedate() |
41213
704a3aa3dc0a
histedit: add rewrite.update-timestamp support to fold and mess
Taapas Agrawal <taapas2897@gmail.com>
parents:
41212
diff
changeset
|
938 |
24772
8f6494eb16eb
histedit: move finishfold into fold class
Durham Goode <durham@fb.com>
parents:
24771
diff
changeset
|
939 extra = ctx.extra().copy() |
8f6494eb16eb
histedit: move finishfold into fold class
Durham Goode <durham@fb.com>
parents:
24771
diff
changeset
|
940 # histedit_source |
8f6494eb16eb
histedit: move finishfold into fold class
Durham Goode <durham@fb.com>
parents:
24771
diff
changeset
|
941 # note: ctx is likely a temporary commit but that the best we can do |
8f6494eb16eb
histedit: move finishfold into fold class
Durham Goode <durham@fb.com>
parents:
24771
diff
changeset
|
942 # here. This is sufficient to solve issue3681 anyway. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
943 extra[b'histedit_source'] = b'%s,%s' % (ctx.hex(), oldctx.hex()) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
944 commitopts[b'extra'] = extra |
31459
f84fbd27b6d3
histedit: get rid of ui.backupconfig
Jun Wu <quark@fb.com>
parents:
31329
diff
changeset
|
945 phasemin = max(ctx.phase(), oldctx.phase()) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
946 overrides = {(b'phases', b'new-commit'): phasemin} |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
947 with repo.ui.configoverride(overrides, b'histedit'): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
948 n = collapse( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
949 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
950 ctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
951 repo[newnode], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
952 commitopts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
953 skipprompt=self.skipprompt(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
954 ) |
24772
8f6494eb16eb
histedit: move finishfold into fold class
Durham Goode <durham@fb.com>
parents:
24771
diff
changeset
|
955 if n is None: |
8f6494eb16eb
histedit: move finishfold into fold class
Durham Goode <durham@fb.com>
parents:
24771
diff
changeset
|
956 return ctx, [] |
45577
5c8230ca37f2
merge: replace calls to hg.updaterepo() by merge.update()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45450
diff
changeset
|
957 mergemod.update(repo[n]) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
958 replacements = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
959 (oldctx.node(), (newnode,)), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
960 (ctx.node(), (n,)), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
961 (newnode, (n,)), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
962 ] |
24772
8f6494eb16eb
histedit: move finishfold into fold class
Durham Goode <durham@fb.com>
parents:
24771
diff
changeset
|
963 for ich in internalchanges: |
8f6494eb16eb
histedit: move finishfold into fold class
Durham Goode <durham@fb.com>
parents:
24771
diff
changeset
|
964 replacements.append((ich, (n,))) |
8f6494eb16eb
histedit: move finishfold into fold class
Durham Goode <durham@fb.com>
parents:
24771
diff
changeset
|
965 return repo[n], replacements |
24771
3133e246c912
histedit: convert fold/roll actions into a class
Durham Goode <durham@fb.com>
parents:
24770
diff
changeset
|
966 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
967 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
968 @action( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
969 [b'base', b'b'], |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
970 _(b'checkout changeset and apply further changesets from there'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
971 ) |
27085
d50ff8f4891f
histedit: add an experimental base action
Mateusz Kwapich <mitrandir@fb.com>
parents:
27084
diff
changeset
|
972 class base(histeditaction): |
d50ff8f4891f
histedit: add an experimental base action
Mateusz Kwapich <mitrandir@fb.com>
parents:
27084
diff
changeset
|
973 def run(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
974 if self.repo[b'.'].node() != self.node: |
44270
f546d2170b0f
merge: introduce a clean_update() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44212
diff
changeset
|
975 mergemod.clean_update(self.repo[self.node]) |
27085
d50ff8f4891f
histedit: add an experimental base action
Mateusz Kwapich <mitrandir@fb.com>
parents:
27084
diff
changeset
|
976 return self.continueclean() |
d50ff8f4891f
histedit: add an experimental base action
Mateusz Kwapich <mitrandir@fb.com>
parents:
27084
diff
changeset
|
977 |
d50ff8f4891f
histedit: add an experimental base action
Mateusz Kwapich <mitrandir@fb.com>
parents:
27084
diff
changeset
|
978 def continuedirty(self): |
d50ff8f4891f
histedit: add an experimental base action
Mateusz Kwapich <mitrandir@fb.com>
parents:
27084
diff
changeset
|
979 abortdirty() |
d50ff8f4891f
histedit: add an experimental base action
Mateusz Kwapich <mitrandir@fb.com>
parents:
27084
diff
changeset
|
980 |
d50ff8f4891f
histedit: add an experimental base action
Mateusz Kwapich <mitrandir@fb.com>
parents:
27084
diff
changeset
|
981 def continueclean(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
982 basectx = self.repo[b'.'] |
27085
d50ff8f4891f
histedit: add an experimental base action
Mateusz Kwapich <mitrandir@fb.com>
parents:
27084
diff
changeset
|
983 return basectx, [] |
d50ff8f4891f
histedit: add an experimental base action
Mateusz Kwapich <mitrandir@fb.com>
parents:
27084
diff
changeset
|
984 |
29880
a485ec066867
histedt: use inheritance to override the constraints in 'base'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29879
diff
changeset
|
985 def _verifynodeconstraints(self, prev, expected, seen): |
a485ec066867
histedt: use inheritance to override the constraints in 'base'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29879
diff
changeset
|
986 # base can only be use with a node not in the edited set |
a485ec066867
histedt: use inheritance to override the constraints in 'base'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29879
diff
changeset
|
987 if self.node in expected: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
988 msg = _(b'%s "%s" changeset was an edited list candidate') |
29887
6d66200bff3b
histedit: correct output of error when 'base' is from the edit list
Augie Fackler <augie@google.com>
parents:
29881
diff
changeset
|
989 raise error.ParseError( |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
990 msg % (self.verb, short(self.node)), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
991 hint=_(b'base must only use unlisted changesets'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
992 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
993 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
994 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
995 @action( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
996 [b'_multifold'], |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
997 _( |
49883
e90767a71dc0
histedit: byteify the help for the multifold action
Matt Harbison <matt_harbison@yahoo.com>
parents:
49284
diff
changeset
|
998 b"""fold subclass used for when multiple folds happen in a row |
26246
bf81b696b8f4
histedit: use one editor when multiple folds happen in a row (issue3524) (BC)
Augie Fackler <augie@google.com>
parents:
26203
diff
changeset
|
999 |
bf81b696b8f4
histedit: use one editor when multiple folds happen in a row (issue3524) (BC)
Augie Fackler <augie@google.com>
parents:
26203
diff
changeset
|
1000 We only want to fire the editor for the folded message once when |
bf81b696b8f4
histedit: use one editor when multiple folds happen in a row (issue3524) (BC)
Augie Fackler <augie@google.com>
parents:
26203
diff
changeset
|
1001 (say) four changes are folded down into a single change. This is |
bf81b696b8f4
histedit: use one editor when multiple folds happen in a row (issue3524) (BC)
Augie Fackler <augie@google.com>
parents:
26203
diff
changeset
|
1002 similar to rollup, but we should preserve both messages so that |
bf81b696b8f4
histedit: use one editor when multiple folds happen in a row (issue3524) (BC)
Augie Fackler <augie@google.com>
parents:
26203
diff
changeset
|
1003 when the last fold operation runs we can show the user all the |
bf81b696b8f4
histedit: use one editor when multiple folds happen in a row (issue3524) (BC)
Augie Fackler <augie@google.com>
parents:
26203
diff
changeset
|
1004 commit messages in their editor. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1005 """ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1006 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1007 internal=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1008 ) |
27675
d073f4c70575
histedit: replace @addhisteditaction with @action
timeless <timeless@mozdev.org>
parents:
27674
diff
changeset
|
1009 class _multifold(fold): |
26246
bf81b696b8f4
histedit: use one editor when multiple folds happen in a row (issue3524) (BC)
Augie Fackler <augie@google.com>
parents:
26203
diff
changeset
|
1010 def skipprompt(self): |
bf81b696b8f4
histedit: use one editor when multiple folds happen in a row (issue3524) (BC)
Augie Fackler <augie@google.com>
parents:
26203
diff
changeset
|
1011 return True |
bf81b696b8f4
histedit: use one editor when multiple folds happen in a row (issue3524) (BC)
Augie Fackler <augie@google.com>
parents:
26203
diff
changeset
|
1012 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1013 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1014 @action( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1015 [b"roll", b"r"], |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1016 _(b"like fold, but discard this commit's description and date"), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1017 ) |
24771
3133e246c912
histedit: convert fold/roll actions into a class
Durham Goode <durham@fb.com>
parents:
24770
diff
changeset
|
1018 class rollup(fold): |
26246
bf81b696b8f4
histedit: use one editor when multiple folds happen in a row (issue3524) (BC)
Augie Fackler <augie@google.com>
parents:
26203
diff
changeset
|
1019 def mergedescs(self): |
bf81b696b8f4
histedit: use one editor when multiple folds happen in a row (issue3524) (BC)
Augie Fackler <augie@google.com>
parents:
26203
diff
changeset
|
1020 return False |
bf81b696b8f4
histedit: use one editor when multiple folds happen in a row (issue3524) (BC)
Augie Fackler <augie@google.com>
parents:
26203
diff
changeset
|
1021 |
24773
090da03361c5
histedit: improve roll action integration with fold
Durham Goode <durham@fb.com>
parents:
24772
diff
changeset
|
1022 def skipprompt(self): |
090da03361c5
histedit: improve roll action integration with fold
Durham Goode <durham@fb.com>
parents:
24772
diff
changeset
|
1023 return True |
17064
168cc52ad7c2
histedit: new extension for interactive history editing
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
1024 |
31056
37ab9e20991c
histedit: modify rollup to discard date from the rollup commit (issue4820)
Ben Schmidt <insightfuls@users.noreply.github.com>
parents:
31055
diff
changeset
|
1025 def firstdate(self): |
37ab9e20991c
histedit: modify rollup to discard date from the rollup commit (issue4820)
Ben Schmidt <insightfuls@users.noreply.github.com>
parents:
31055
diff
changeset
|
1026 return True |
37ab9e20991c
histedit: modify rollup to discard date from the rollup commit (issue4820)
Ben Schmidt <insightfuls@users.noreply.github.com>
parents:
31055
diff
changeset
|
1027 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1028 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1029 @action([b"drop", b"d"], _(b'remove commit from history')) |
24768
342671704344
histedit: convert drop action into a class
Durham Goode <durham@fb.com>
parents:
24767
diff
changeset
|
1030 class drop(histeditaction): |
342671704344
histedit: convert drop action into a class
Durham Goode <durham@fb.com>
parents:
24767
diff
changeset
|
1031 def run(self): |
342671704344
histedit: convert drop action into a class
Durham Goode <durham@fb.com>
parents:
24767
diff
changeset
|
1032 parentctx = self.repo[self.state.parentctxnode] |
342671704344
histedit: convert drop action into a class
Durham Goode <durham@fb.com>
parents:
24767
diff
changeset
|
1033 return parentctx, [(self.node, tuple())] |
17064
168cc52ad7c2
histedit: new extension for interactive history editing
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
1034 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1035 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1036 @action( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1037 [b"mess", b"m"], |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1038 _(b'edit commit message without changing commit content'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1039 priority=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1040 ) |
24769
e875b94dc94c
histedit: convert message action into a class
Durham Goode <durham@fb.com>
parents:
24768
diff
changeset
|
1041 class message(histeditaction): |
e875b94dc94c
histedit: convert message action into a class
Durham Goode <durham@fb.com>
parents:
24768
diff
changeset
|
1042 def commiteditor(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1043 return cmdutil.getcommiteditor(edit=True, editform=b'histedit.mess') |
17064
168cc52ad7c2
histedit: new extension for interactive history editing
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
1044 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1045 |
26335
6c93834d7d66
histedit: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26246
diff
changeset
|
1046 def findoutgoing(ui, repo, remote=None, force=False, opts=None): |
19021
26b41a902195
histedit: move outgoing processing to its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
19020
diff
changeset
|
1047 """utility function to find the first outgoing changeset |
26b41a902195
histedit: move outgoing processing to its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
19020
diff
changeset
|
1048 |
26171 | 1049 Used by initialization code""" |
26335
6c93834d7d66
histedit: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26246
diff
changeset
|
1050 if opts is None: |
6c93834d7d66
histedit: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26246
diff
changeset
|
1051 opts = {} |
46941
d689d48527ea
histedit: use `get_unique_push_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46908
diff
changeset
|
1052 path = urlutil.get_unique_push_path(b'histedit', repo, ui, remote) |
49712
905eb32fdf4e
path: pass `path` to `peer` in `hg histedit`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49703
diff
changeset
|
1053 |
905eb32fdf4e
path: pass `path` to `peer` in `hg histedit`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49703
diff
changeset
|
1054 ui.status(_(b'comparing with %s\n') % urlutil.hidepassword(path.loc)) |
19021
26b41a902195
histedit: move outgoing processing to its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
19020
diff
changeset
|
1055 |
46941
d689d48527ea
histedit: use `get_unique_push_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46908
diff
changeset
|
1056 revs, checkout = hg.addbranchrevs(repo, repo, (path.branch, []), None) |
49712
905eb32fdf4e
path: pass `path` to `peer` in `hg histedit`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49703
diff
changeset
|
1057 other = hg.peer(repo, opts, path) |
19021
26b41a902195
histedit: move outgoing processing to its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
19020
diff
changeset
|
1058 |
26b41a902195
histedit: move outgoing processing to its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
19020
diff
changeset
|
1059 if revs: |
26b41a902195
histedit: move outgoing processing to its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
19020
diff
changeset
|
1060 revs = [repo.lookup(rev) for rev in revs] |
26b41a902195
histedit: move outgoing processing to its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
19020
diff
changeset
|
1061 |
26b41a902195
histedit: move outgoing processing to its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
19020
diff
changeset
|
1062 outgoing = discovery.findcommonoutgoing(repo, other, revs, force=force) |
26b41a902195
histedit: move outgoing processing to its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
19020
diff
changeset
|
1063 if not outgoing.missing: |
48054
f27a83399abb
histedit: use more specific exceptions for more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
48053
diff
changeset
|
1064 raise error.StateError(_(b'no outgoing ancestors')) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1065 roots = list(repo.revs(b"roots(%ln)", outgoing.missing)) |
40029
e2697acd9381
cleanup: some Yoda conditions, this patch removes
Martin von Zweigbergk <martinvonz@google.com>
parents:
39914
diff
changeset
|
1066 if len(roots) > 1: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1067 msg = _(b'there are ambiguous outgoing revisions') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1068 hint = _(b"see 'hg help histedit' for more detail") |
48054
f27a83399abb
histedit: use more specific exceptions for more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
48053
diff
changeset
|
1069 raise error.StateError(msg, hint=hint) |
37314
8474005fcfe2
histedit: avoid repo.lookup() for converting revnum to nodeid
Martin von Zweigbergk <martinvonz@google.com>
parents:
37268
diff
changeset
|
1070 return repo[roots[0]].node() |
19021
26b41a902195
histedit: move outgoing processing to its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
19020
diff
changeset
|
1071 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1072 |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1073 # Curses Support |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1074 try: |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1075 import curses |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1076 except ImportError: |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1077 curses = None |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1078 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1079 KEY_LIST = [b'pick', b'edit', b'fold', b'drop', b'mess', b'roll'] |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1080 ACTION_LABELS = { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1081 b'fold': b'^fold', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1082 b'roll': b'^roll', |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1083 } |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1084 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1085 COLOR_HELP, COLOR_SELECTED, COLOR_OK, COLOR_WARN, COLOR_CURRENT = 1, 2, 3, 4, 5 |
42089
16692aa3472b
chistedit: add basic colours to diff view
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
42088
diff
changeset
|
1086 COLOR_DIFF_ADD_LINE, COLOR_DIFF_DEL_LINE, COLOR_DIFF_OFFSET = 6, 7, 8 |
43663
1d29da62af76
histedit: define new colour pairs for roll action
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43662
diff
changeset
|
1087 COLOR_ROLL, COLOR_ROLL_CURRENT, COLOR_ROLL_SELECTED = 9, 10, 11 |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1088 |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1089 E_QUIT, E_HISTEDIT = 1, 2 |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1090 E_PAGEDOWN, E_PAGEUP, E_LINEUP, E_LINEDOWN, E_RESIZE = 3, 4, 5, 6, 7 |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1091 MODE_INIT, MODE_PATCH, MODE_RULES, MODE_HELP = 0, 1, 2, 3 |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1092 |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1093 KEYTABLE = { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1094 b'global': { |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1095 b'h': b'next-action', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1096 b'KEY_RIGHT': b'next-action', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1097 b'l': b'prev-action', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1098 b'KEY_LEFT': b'prev-action', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1099 b'q': b'quit', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1100 b'c': b'histedit', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1101 b'C': b'histedit', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1102 b'v': b'showpatch', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1103 b'?': b'help', |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1104 }, |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1105 MODE_RULES: { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1106 b'd': b'action-drop', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1107 b'e': b'action-edit', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1108 b'f': b'action-fold', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1109 b'm': b'action-mess', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1110 b'p': b'action-pick', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1111 b'r': b'action-roll', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1112 b' ': b'select', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1113 b'j': b'down', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1114 b'k': b'up', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1115 b'KEY_DOWN': b'down', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1116 b'KEY_UP': b'up', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1117 b'J': b'move-down', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1118 b'K': b'move-up', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1119 b'KEY_NPAGE': b'move-down', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1120 b'KEY_PPAGE': b'move-up', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1121 b'0': b'goto', # Used for 0..9 |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1122 }, |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1123 MODE_PATCH: { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1124 b' ': b'page-down', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1125 b'KEY_NPAGE': b'page-down', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1126 b'KEY_PPAGE': b'page-up', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1127 b'j': b'line-down', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1128 b'k': b'line-up', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1129 b'KEY_DOWN': b'line-down', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1130 b'KEY_UP': b'line-up', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1131 b'J': b'down', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1132 b'K': b'up', |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1133 }, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1134 MODE_HELP: {}, |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1135 } |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1136 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1137 |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1138 def screen_size(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1139 return struct.unpack(b'hh', fcntl.ioctl(1, termios.TIOCGWINSZ, b' ')) |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1140 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1141 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48913
diff
changeset
|
1142 class histeditrule: |
44567
ad5a10f49dfa
chistedit: support histedit.summary-template in curses histedit plan
Kyle Lippincott <spectral@google.com>
parents:
44452
diff
changeset
|
1143 def __init__(self, ui, ctx, pos, action=b'pick'): |
ad5a10f49dfa
chistedit: support histedit.summary-template in curses histedit plan
Kyle Lippincott <spectral@google.com>
parents:
44452
diff
changeset
|
1144 self.ui = ui |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1145 self.ctx = ctx |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1146 self.action = action |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1147 self.origpos = pos |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1148 self.pos = pos |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1149 self.conflicts = [] |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1150 |
43368
d8215ff082da
py3: make chistedit render
Martin von Zweigbergk <martinvonz@google.com>
parents:
43228
diff
changeset
|
1151 def __bytes__(self): |
43662
4323a32c7afe
histeditrule: split __bytes__ property into prefix and desc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43569
diff
changeset
|
1152 # Example display of several histeditrules: |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1153 # |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1154 # #10 pick 316392:06a16c25c053 add option to skip tests |
43662
4323a32c7afe
histeditrule: split __bytes__ property into prefix and desc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43569
diff
changeset
|
1155 # #11 ^roll 316393:71313c964cc5 <RED>oops a fixup commit</RED> |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1156 # #12 pick 316394:ab31f3973b0d include mfbt for mozilla-config.h |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1157 # #13 ^fold 316395:14ce5803f4c3 fix warnings |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1158 # |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1159 # The carets point to the changeset being folded into ("roll this |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1160 # changeset into the changeset above"). |
43662
4323a32c7afe
histeditrule: split __bytes__ property into prefix and desc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43569
diff
changeset
|
1161 return b'%s%s' % (self.prefix, self.desc) |
4323a32c7afe
histeditrule: split __bytes__ property into prefix and desc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43569
diff
changeset
|
1162 |
4323a32c7afe
histeditrule: split __bytes__ property into prefix and desc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43569
diff
changeset
|
1163 __str__ = encoding.strmethod(__bytes__) |
4323a32c7afe
histeditrule: split __bytes__ property into prefix and desc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43569
diff
changeset
|
1164 |
4323a32c7afe
histeditrule: split __bytes__ property into prefix and desc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43569
diff
changeset
|
1165 @property |
4323a32c7afe
histeditrule: split __bytes__ property into prefix and desc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43569
diff
changeset
|
1166 def prefix(self): |
4323a32c7afe
histeditrule: split __bytes__ property into prefix and desc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43569
diff
changeset
|
1167 # Some actions ('fold' and 'roll') combine a patch with a |
4323a32c7afe
histeditrule: split __bytes__ property into prefix and desc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43569
diff
changeset
|
1168 # previous one. Add a marker showing which patch they apply |
4323a32c7afe
histeditrule: split __bytes__ property into prefix and desc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43569
diff
changeset
|
1169 # to. |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1170 action = ACTION_LABELS.get(self.action, self.action) |
43662
4323a32c7afe
histeditrule: split __bytes__ property into prefix and desc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43569
diff
changeset
|
1171 |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1172 h = self.ctx.hex()[0:12] |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1173 r = self.ctx.rev() |
43662
4323a32c7afe
histeditrule: split __bytes__ property into prefix and desc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43569
diff
changeset
|
1174 |
4323a32c7afe
histeditrule: split __bytes__ property into prefix and desc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43569
diff
changeset
|
1175 return b"#%s %s %d:%s " % ( |
43368
d8215ff082da
py3: make chistedit render
Martin von Zweigbergk <martinvonz@google.com>
parents:
43228
diff
changeset
|
1176 (b'%d' % self.origpos).ljust(2), |
d8215ff082da
py3: make chistedit render
Martin von Zweigbergk <martinvonz@google.com>
parents:
43228
diff
changeset
|
1177 action.ljust(6), |
d8215ff082da
py3: make chistedit render
Martin von Zweigbergk <martinvonz@google.com>
parents:
43228
diff
changeset
|
1178 r, |
d8215ff082da
py3: make chistedit render
Martin von Zweigbergk <martinvonz@google.com>
parents:
43228
diff
changeset
|
1179 h, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1180 ) |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1181 |
45450
47d10ade5bc4
histedit: cache description line
Martin von Zweigbergk <martinvonz@google.com>
parents:
45375
diff
changeset
|
1182 @util.propertycache |
43662
4323a32c7afe
histeditrule: split __bytes__ property into prefix and desc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43569
diff
changeset
|
1183 def desc(self): |
45791
1f9736eb0e65
histedit: drop fallback to empty string from rendertemplate()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45577
diff
changeset
|
1184 summary = cmdutil.rendertemplate( |
1f9736eb0e65
histedit: drop fallback to empty string from rendertemplate()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45577
diff
changeset
|
1185 self.ctx, self.ui.config(b'histedit', b'summary-template') |
44567
ad5a10f49dfa
chistedit: support histedit.summary-template in curses histedit plan
Kyle Lippincott <spectral@google.com>
parents:
44452
diff
changeset
|
1186 ) |
ad5a10f49dfa
chistedit: support histedit.summary-template in curses histedit plan
Kyle Lippincott <spectral@google.com>
parents:
44452
diff
changeset
|
1187 if summary: |
ad5a10f49dfa
chistedit: support histedit.summary-template in curses histedit plan
Kyle Lippincott <spectral@google.com>
parents:
44452
diff
changeset
|
1188 return summary |
43662
4323a32c7afe
histeditrule: split __bytes__ property into prefix and desc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43569
diff
changeset
|
1189 # This is split off from the prefix property so that we can |
4323a32c7afe
histeditrule: split __bytes__ property into prefix and desc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43569
diff
changeset
|
1190 # separately make the description for 'roll' red (since it |
4323a32c7afe
histeditrule: split __bytes__ property into prefix and desc
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43569
diff
changeset
|
1191 # will get discarded). |
49022
e160f073c37b
histedit: use new function for getting first line of a string
Martin von Zweigbergk <martinvonz@google.com>
parents:
48946
diff
changeset
|
1192 return stringutil.firstline(self.ctx.description()) |
43368
d8215ff082da
py3: make chistedit render
Martin von Zweigbergk <martinvonz@google.com>
parents:
43228
diff
changeset
|
1193 |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1194 def checkconflicts(self, other): |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1195 if other.pos > self.pos and other.origpos <= self.origpos: |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1196 if set(other.ctx.files()) & set(self.ctx.files()) != set(): |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1197 self.conflicts.append(other) |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1198 return self.conflicts |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1199 |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1200 if other in self.conflicts: |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1201 self.conflicts.remove(other) |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1202 return self.conflicts |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1203 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1204 |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1205 def makecommands(rules): |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1206 """Returns a list of commands consumable by histedit --commands based on |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1207 our list of rules""" |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1208 commands = [] |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1209 for rules in rules: |
43371
85ab79bc7dab
py3: avoid another b''.format() in chistedit
Martin von Zweigbergk <martinvonz@google.com>
parents:
43370
diff
changeset
|
1210 commands.append(b'%s %s\n' % (rules.action, rules.ctx)) |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1211 return commands |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1212 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1213 |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1214 def addln(win, y, x, line, color=None): |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1215 """Add a line to the given window left padding but 100% filled with |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1216 whitespace characters, so that the color appears on the whole line""" |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1217 maxy, maxx = win.getmaxyx() |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1218 length = maxx - 1 - x |
43368
d8215ff082da
py3: make chistedit render
Martin von Zweigbergk <martinvonz@google.com>
parents:
43228
diff
changeset
|
1219 line = bytes(line).ljust(length)[:length] |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1220 if y < 0: |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1221 y = maxy + y |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1222 if x < 0: |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1223 x = maxx + x |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1224 if color: |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1225 win.addstr(y, x, line, color) |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1226 else: |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1227 win.addstr(y, x, line) |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1228 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1229 |
42233
4ad191041be2
histedit: Show file names in multiple line format
Yu Feng <rainwoodman@gmail.com>
parents:
42160
diff
changeset
|
1230 def _trunc_head(line, n): |
4ad191041be2
histedit: Show file names in multiple line format
Yu Feng <rainwoodman@gmail.com>
parents:
42160
diff
changeset
|
1231 if len(line) <= n: |
4ad191041be2
histedit: Show file names in multiple line format
Yu Feng <rainwoodman@gmail.com>
parents:
42160
diff
changeset
|
1232 return line |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1233 return b'> ' + line[-(n - 2) :] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1234 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1235 |
42233
4ad191041be2
histedit: Show file names in multiple line format
Yu Feng <rainwoodman@gmail.com>
parents:
42160
diff
changeset
|
1236 def _trunc_tail(line, n): |
4ad191041be2
histedit: Show file names in multiple line format
Yu Feng <rainwoodman@gmail.com>
parents:
42160
diff
changeset
|
1237 if len(line) <= n: |
4ad191041be2
histedit: Show file names in multiple line format
Yu Feng <rainwoodman@gmail.com>
parents:
42160
diff
changeset
|
1238 return line |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1239 return line[: n - 2] + b' >' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1240 |
42233
4ad191041be2
histedit: Show file names in multiple line format
Yu Feng <rainwoodman@gmail.com>
parents:
42160
diff
changeset
|
1241 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48913
diff
changeset
|
1242 class _chistedit_state: |
48200
b6fc7d188f68
chistedit: move view state from a dict to a custom class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48116
diff
changeset
|
1243 def __init__( |
b6fc7d188f68
chistedit: move view state from a dict to a custom class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48116
diff
changeset
|
1244 self, |
b6fc7d188f68
chistedit: move view state from a dict to a custom class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48116
diff
changeset
|
1245 repo, |
b6fc7d188f68
chistedit: move view state from a dict to a custom class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48116
diff
changeset
|
1246 rules, |
48202
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1247 stdscr, |
48200
b6fc7d188f68
chistedit: move view state from a dict to a custom class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48116
diff
changeset
|
1248 ): |
b6fc7d188f68
chistedit: move view state from a dict to a custom class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48116
diff
changeset
|
1249 self.repo = repo |
b6fc7d188f68
chistedit: move view state from a dict to a custom class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48116
diff
changeset
|
1250 self.rules = rules |
48202
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1251 self.stdscr = stdscr |
48233
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1252 self.later_on_top = repo.ui.configbool( |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1253 b'histedit', b'later-commits-first' |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1254 ) |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1255 # The current item in display order, initialized to point to the top |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1256 # of the screen. |
48200
b6fc7d188f68
chistedit: move view state from a dict to a custom class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48116
diff
changeset
|
1257 self.pos = 0 |
b6fc7d188f68
chistedit: move view state from a dict to a custom class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48116
diff
changeset
|
1258 self.selected = None |
b6fc7d188f68
chistedit: move view state from a dict to a custom class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48116
diff
changeset
|
1259 self.mode = (MODE_INIT, MODE_INIT) |
b6fc7d188f68
chistedit: move view state from a dict to a custom class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48116
diff
changeset
|
1260 self.page_height = None |
b6fc7d188f68
chistedit: move view state from a dict to a custom class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48116
diff
changeset
|
1261 self.modes = { |
b6fc7d188f68
chistedit: move view state from a dict to a custom class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48116
diff
changeset
|
1262 MODE_RULES: { |
b6fc7d188f68
chistedit: move view state from a dict to a custom class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48116
diff
changeset
|
1263 b'line_offset': 0, |
b6fc7d188f68
chistedit: move view state from a dict to a custom class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48116
diff
changeset
|
1264 }, |
b6fc7d188f68
chistedit: move view state from a dict to a custom class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48116
diff
changeset
|
1265 MODE_PATCH: { |
b6fc7d188f68
chistedit: move view state from a dict to a custom class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48116
diff
changeset
|
1266 b'line_offset': 0, |
b6fc7d188f68
chistedit: move view state from a dict to a custom class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48116
diff
changeset
|
1267 }, |
b6fc7d188f68
chistedit: move view state from a dict to a custom class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48116
diff
changeset
|
1268 } |
b6fc7d188f68
chistedit: move view state from a dict to a custom class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48116
diff
changeset
|
1269 |
48201
8ac61257c807
chistedit: move rendercommit() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48200
diff
changeset
|
1270 def render_commit(self, win): |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1271 """Renders the commit window that shows the log of the current selected |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1272 commit""" |
48233
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1273 rule = self.rules[self.display_pos_to_rule_pos(self.pos)] |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1274 |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1275 ctx = rule.ctx |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1276 win.box() |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1277 |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1278 maxy, maxx = win.getmaxyx() |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1279 length = maxx - 3 |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1280 |
43376
b27cf9f52194
histedit: restore hex nodeids to be 12 digits long
Martin von Zweigbergk <martinvonz@google.com>
parents:
43373
diff
changeset
|
1281 line = b"changeset: %d:%s" % (ctx.rev(), ctx.hex()[:12]) |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1282 win.addstr(1, 1, line[:length]) |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1283 |
43368
d8215ff082da
py3: make chistedit render
Martin von Zweigbergk <martinvonz@google.com>
parents:
43228
diff
changeset
|
1284 line = b"user: %s" % ctx.user() |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1285 win.addstr(2, 1, line[:length]) |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1286 |
48201
8ac61257c807
chistedit: move rendercommit() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48200
diff
changeset
|
1287 bms = self.repo.nodebookmarks(ctx.node()) |
43368
d8215ff082da
py3: make chistedit render
Martin von Zweigbergk <martinvonz@google.com>
parents:
43228
diff
changeset
|
1288 line = b"bookmark: %s" % b' '.join(bms) |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1289 win.addstr(3, 1, line[:length]) |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1290 |
49022
e160f073c37b
histedit: use new function for getting first line of a string
Martin von Zweigbergk <martinvonz@google.com>
parents:
48946
diff
changeset
|
1291 line = b"summary: %s" % stringutil.firstline(ctx.description()) |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1292 win.addstr(4, 1, line[:length]) |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1293 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1294 line = b"files: " |
42233
4ad191041be2
histedit: Show file names in multiple line format
Yu Feng <rainwoodman@gmail.com>
parents:
42160
diff
changeset
|
1295 win.addstr(5, 1, line) |
4ad191041be2
histedit: Show file names in multiple line format
Yu Feng <rainwoodman@gmail.com>
parents:
42160
diff
changeset
|
1296 fnx = 1 + len(line) |
4ad191041be2
histedit: Show file names in multiple line format
Yu Feng <rainwoodman@gmail.com>
parents:
42160
diff
changeset
|
1297 fnmaxx = length - fnx + 1 |
4ad191041be2
histedit: Show file names in multiple line format
Yu Feng <rainwoodman@gmail.com>
parents:
42160
diff
changeset
|
1298 y = 5 |
4ad191041be2
histedit: Show file names in multiple line format
Yu Feng <rainwoodman@gmail.com>
parents:
42160
diff
changeset
|
1299 fnmaxn = maxy - (1 + y) - 1 |
4ad191041be2
histedit: Show file names in multiple line format
Yu Feng <rainwoodman@gmail.com>
parents:
42160
diff
changeset
|
1300 files = ctx.files() |
4ad191041be2
histedit: Show file names in multiple line format
Yu Feng <rainwoodman@gmail.com>
parents:
42160
diff
changeset
|
1301 for i, line1 in enumerate(files): |
4ad191041be2
histedit: Show file names in multiple line format
Yu Feng <rainwoodman@gmail.com>
parents:
42160
diff
changeset
|
1302 if len(files) > fnmaxn and i == fnmaxn - 1: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1303 win.addstr(y, fnx, _trunc_tail(b','.join(files[i:]), fnmaxx)) |
42233
4ad191041be2
histedit: Show file names in multiple line format
Yu Feng <rainwoodman@gmail.com>
parents:
42160
diff
changeset
|
1304 y = y + 1 |
4ad191041be2
histedit: Show file names in multiple line format
Yu Feng <rainwoodman@gmail.com>
parents:
42160
diff
changeset
|
1305 break |
4ad191041be2
histedit: Show file names in multiple line format
Yu Feng <rainwoodman@gmail.com>
parents:
42160
diff
changeset
|
1306 win.addstr(y, fnx, _trunc_head(line1, fnmaxx)) |
4ad191041be2
histedit: Show file names in multiple line format
Yu Feng <rainwoodman@gmail.com>
parents:
42160
diff
changeset
|
1307 y = y + 1 |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1308 |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1309 conflicts = rule.conflicts |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1310 if len(conflicts) > 0: |
43376
b27cf9f52194
histedit: restore hex nodeids to be 12 digits long
Martin von Zweigbergk <martinvonz@google.com>
parents:
43373
diff
changeset
|
1311 conflictstr = b','.join(map(lambda r: r.ctx.hex()[:12], conflicts)) |
43368
d8215ff082da
py3: make chistedit render
Martin von Zweigbergk <martinvonz@google.com>
parents:
43228
diff
changeset
|
1312 conflictstr = b"changed files overlap with %s" % conflictstr |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1313 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1314 conflictstr = b'no overlap' |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1315 |
42233
4ad191041be2
histedit: Show file names in multiple line format
Yu Feng <rainwoodman@gmail.com>
parents:
42160
diff
changeset
|
1316 win.addstr(y, 1, conflictstr[:length]) |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1317 win.noutrefresh() |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1318 |
48202
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1319 def helplines(self): |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1320 if self.mode[0] == MODE_PATCH: |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1321 help = b"""\ |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1322 ?: help, k/up: line up, j/down: line down, v: stop viewing patch |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1323 pgup: prev page, space/pgdn: next page, c: commit, q: abort |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1324 """ |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1325 else: |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1326 help = b"""\ |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1327 ?: help, k/up: move up, j/down: move down, space: select, v: view patch |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1328 d: drop, e: edit, f: fold, m: mess, p: pick, r: roll |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1329 pgup/K: move patch up, pgdn/J: move patch down, c: commit, q: abort |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1330 """ |
48371
9503e15dc588
chistedit: explain which order the commits are presented in
Martin von Zweigbergk <martinvonz@google.com>
parents:
48233
diff
changeset
|
1331 if self.later_on_top: |
9503e15dc588
chistedit: explain which order the commits are presented in
Martin von Zweigbergk <martinvonz@google.com>
parents:
48233
diff
changeset
|
1332 help += b"Newer commits are shown above older commits.\n" |
9503e15dc588
chistedit: explain which order the commits are presented in
Martin von Zweigbergk <martinvonz@google.com>
parents:
48233
diff
changeset
|
1333 else: |
9503e15dc588
chistedit: explain which order the commits are presented in
Martin von Zweigbergk <martinvonz@google.com>
parents:
48233
diff
changeset
|
1334 help += b"Older commits are shown above newer commits.\n" |
48202
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1335 return help.splitlines() |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1336 |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1337 def render_help(self, win): |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1338 maxy, maxx = win.getmaxyx() |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1339 for y, line in enumerate(self.helplines()): |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1340 if y >= maxy: |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1341 break |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1342 addln(win, y, 0, line, curses.color_pair(COLOR_HELP)) |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1343 win.noutrefresh() |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1344 |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1345 def layout(self): |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1346 maxy, maxx = self.stdscr.getmaxyx() |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1347 helplen = len(self.helplines()) |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1348 mainlen = maxy - helplen - 12 |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1349 if mainlen < 1: |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1350 raise error.Abort( |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1351 _(b"terminal dimensions %d by %d too small for curses histedit") |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1352 % (maxy, maxx), |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1353 hint=_( |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1354 b"enlarge your terminal or use --config ui.interface=text" |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1355 ), |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1356 ) |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1357 return { |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1358 b'commit': (12, maxx), |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1359 b'help': (helplen, maxx), |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1360 b'main': (mainlen, maxx), |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1361 } |
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1362 |
48233
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1363 def display_pos_to_rule_pos(self, display_pos): |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1364 """Converts a position in display order to rule order. |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1365 |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1366 The `display_pos` is the order from the top in display order, not |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1367 considering which items are currently visible on the screen. Thus, |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1368 `display_pos=0` is the item at the top (possibly after scrolling to |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1369 the top) |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1370 """ |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1371 if self.later_on_top: |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1372 return len(self.rules) - 1 - display_pos |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1373 else: |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1374 return display_pos |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1375 |
48203
8dd2422b0109
chistedit: move renderrules() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48202
diff
changeset
|
1376 def render_rules(self, rulesscr): |
8dd2422b0109
chistedit: move renderrules() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48202
diff
changeset
|
1377 start = self.modes[MODE_RULES][b'line_offset'] |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1378 |
48214
1895027c5051
chistedit: remove some local variable and access state on self instead
Martin von Zweigbergk <martinvonz@google.com>
parents:
48213
diff
changeset
|
1379 conflicts = [r.ctx for r in self.rules if r.conflicts] |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1380 if len(conflicts) > 0: |
43370
7f56b0cbd245
py3: render message about conflicts in chistedit code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43369
diff
changeset
|
1381 line = b"potential conflict in %s" % b','.join( |
7f56b0cbd245
py3: render message about conflicts in chistedit code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43369
diff
changeset
|
1382 map(pycompat.bytestr, conflicts) |
7f56b0cbd245
py3: render message about conflicts in chistedit code
Martin von Zweigbergk <martinvonz@google.com>
parents:
43369
diff
changeset
|
1383 ) |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1384 addln(rulesscr, -1, 0, line, curses.color_pair(COLOR_WARN)) |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1385 |
48233
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1386 for display_pos in range(start, len(self.rules)): |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1387 y = display_pos - start |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1388 if y < 0 or y >= self.page_height: |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1389 continue |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1390 rule_pos = self.display_pos_to_rule_pos(display_pos) |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1391 rule = self.rules[rule_pos] |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1392 if len(rule.conflicts) > 0: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1393 rulesscr.addstr(y, 0, b" ", curses.color_pair(COLOR_WARN)) |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1394 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1395 rulesscr.addstr(y, 0, b" ", curses.COLOR_BLACK) |
43664
bde66eb4051d
histedit: render a rolled up description using the proper roll colours
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43663
diff
changeset
|
1396 |
48233
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1397 if display_pos == self.selected: |
43664
bde66eb4051d
histedit: render a rolled up description using the proper roll colours
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43663
diff
changeset
|
1398 rollcolor = COLOR_ROLL_SELECTED |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1399 addln(rulesscr, y, 2, rule, curses.color_pair(COLOR_SELECTED)) |
48233
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1400 elif display_pos == self.pos: |
43664
bde66eb4051d
histedit: render a rolled up description using the proper roll colours
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43663
diff
changeset
|
1401 rollcolor = COLOR_ROLL_CURRENT |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1402 addln( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1403 rulesscr, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1404 y, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1405 2, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1406 rule, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1407 curses.color_pair(COLOR_CURRENT) | curses.A_BOLD, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1408 ) |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1409 else: |
43664
bde66eb4051d
histedit: render a rolled up description using the proper roll colours
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43663
diff
changeset
|
1410 rollcolor = COLOR_ROLL |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1411 addln(rulesscr, y, 2, rule) |
43664
bde66eb4051d
histedit: render a rolled up description using the proper roll colours
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43663
diff
changeset
|
1412 |
bde66eb4051d
histedit: render a rolled up description using the proper roll colours
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43663
diff
changeset
|
1413 if rule.action == b'roll': |
bde66eb4051d
histedit: render a rolled up description using the proper roll colours
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43663
diff
changeset
|
1414 rulesscr.addstr( |
bde66eb4051d
histedit: render a rolled up description using the proper roll colours
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43663
diff
changeset
|
1415 y, |
bde66eb4051d
histedit: render a rolled up description using the proper roll colours
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43663
diff
changeset
|
1416 2 + len(rule.prefix), |
bde66eb4051d
histedit: render a rolled up description using the proper roll colours
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43663
diff
changeset
|
1417 rule.desc, |
bde66eb4051d
histedit: render a rolled up description using the proper roll colours
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43663
diff
changeset
|
1418 curses.color_pair(rollcolor), |
bde66eb4051d
histedit: render a rolled up description using the proper roll colours
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43663
diff
changeset
|
1419 ) |
bde66eb4051d
histedit: render a rolled up description using the proper roll colours
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43663
diff
changeset
|
1420 |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1421 rulesscr.noutrefresh() |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1422 |
48204
33ece8857efa
chistedit: move renderpatch() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48203
diff
changeset
|
1423 def render_string(self, win, output, diffcolors=False): |
33ece8857efa
chistedit: move renderpatch() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48203
diff
changeset
|
1424 maxy, maxx = win.getmaxyx() |
33ece8857efa
chistedit: move renderpatch() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48203
diff
changeset
|
1425 length = min(maxy - 1, len(output)) |
33ece8857efa
chistedit: move renderpatch() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48203
diff
changeset
|
1426 for y in range(0, length): |
33ece8857efa
chistedit: move renderpatch() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48203
diff
changeset
|
1427 line = output[y] |
33ece8857efa
chistedit: move renderpatch() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48203
diff
changeset
|
1428 if diffcolors: |
50302
22d7cb8174ef
histedit: fix diff colors
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
50257
diff
changeset
|
1429 if line.startswith(b'+'): |
48204
33ece8857efa
chistedit: move renderpatch() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48203
diff
changeset
|
1430 win.addstr( |
33ece8857efa
chistedit: move renderpatch() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48203
diff
changeset
|
1431 y, 0, line, curses.color_pair(COLOR_DIFF_ADD_LINE) |
33ece8857efa
chistedit: move renderpatch() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48203
diff
changeset
|
1432 ) |
50302
22d7cb8174ef
histedit: fix diff colors
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
50257
diff
changeset
|
1433 elif line.startswith(b'-'): |
48204
33ece8857efa
chistedit: move renderpatch() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48203
diff
changeset
|
1434 win.addstr( |
33ece8857efa
chistedit: move renderpatch() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48203
diff
changeset
|
1435 y, 0, line, curses.color_pair(COLOR_DIFF_DEL_LINE) |
33ece8857efa
chistedit: move renderpatch() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48203
diff
changeset
|
1436 ) |
33ece8857efa
chistedit: move renderpatch() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48203
diff
changeset
|
1437 elif line.startswith(b'@@ '): |
33ece8857efa
chistedit: move renderpatch() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48203
diff
changeset
|
1438 win.addstr(y, 0, line, curses.color_pair(COLOR_DIFF_OFFSET)) |
33ece8857efa
chistedit: move renderpatch() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48203
diff
changeset
|
1439 else: |
33ece8857efa
chistedit: move renderpatch() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48203
diff
changeset
|
1440 win.addstr(y, 0, line) |
33ece8857efa
chistedit: move renderpatch() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48203
diff
changeset
|
1441 else: |
33ece8857efa
chistedit: move renderpatch() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48203
diff
changeset
|
1442 win.addstr(y, 0, line) |
33ece8857efa
chistedit: move renderpatch() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48203
diff
changeset
|
1443 win.noutrefresh() |
33ece8857efa
chistedit: move renderpatch() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48203
diff
changeset
|
1444 |
33ece8857efa
chistedit: move renderpatch() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48203
diff
changeset
|
1445 def render_patch(self, win): |
33ece8857efa
chistedit: move renderpatch() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48203
diff
changeset
|
1446 start = self.modes[MODE_PATCH][b'line_offset'] |
33ece8857efa
chistedit: move renderpatch() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48203
diff
changeset
|
1447 content = self.modes[MODE_PATCH][b'patchcontents'] |
33ece8857efa
chistedit: move renderpatch() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48203
diff
changeset
|
1448 self.render_string(win, content[start:], diffcolors=True) |
33ece8857efa
chistedit: move renderpatch() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48203
diff
changeset
|
1449 |
48205
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1450 def event(self, ch): |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1451 """Change state based on the current character input |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1452 |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1453 This takes the current state and based on the current character input from |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1454 the user we change the state. |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1455 """ |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1456 oldpos = self.pos |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1457 |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1458 if ch in (curses.KEY_RESIZE, b"KEY_RESIZE"): |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1459 return E_RESIZE |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1460 |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1461 lookup_ch = ch |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1462 if ch is not None and b'0' <= ch <= b'9': |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1463 lookup_ch = b'0' |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1464 |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1465 curmode, prevmode = self.mode |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1466 action = KEYTABLE[curmode].get( |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1467 lookup_ch, KEYTABLE[b'global'].get(lookup_ch) |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1468 ) |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1469 if action is None: |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1470 return |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1471 if action in (b'down', b'move-down'): |
48214
1895027c5051
chistedit: remove some local variable and access state on self instead
Martin von Zweigbergk <martinvonz@google.com>
parents:
48213
diff
changeset
|
1472 newpos = min(oldpos + 1, len(self.rules) - 1) |
48207
fb30ad66a572
chistedit: move movecursor() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48206
diff
changeset
|
1473 self.move_cursor(oldpos, newpos) |
48214
1895027c5051
chistedit: remove some local variable and access state on self instead
Martin von Zweigbergk <martinvonz@google.com>
parents:
48213
diff
changeset
|
1474 if self.selected is not None or action == b'move-down': |
48210
0444956ecbcf
chistedit: move swap() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48209
diff
changeset
|
1475 self.swap(oldpos, newpos) |
48205
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1476 elif action in (b'up', b'move-up'): |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1477 newpos = max(0, oldpos - 1) |
48207
fb30ad66a572
chistedit: move movecursor() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48206
diff
changeset
|
1478 self.move_cursor(oldpos, newpos) |
48214
1895027c5051
chistedit: remove some local variable and access state on self instead
Martin von Zweigbergk <martinvonz@google.com>
parents:
48213
diff
changeset
|
1479 if self.selected is not None or action == b'move-up': |
48210
0444956ecbcf
chistedit: move swap() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48209
diff
changeset
|
1480 self.swap(oldpos, newpos) |
48205
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1481 elif action == b'next-action': |
48212
7913f533592d
chistedit: move cycleaction() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48211
diff
changeset
|
1482 self.cycle_action(oldpos, next=True) |
48205
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1483 elif action == b'prev-action': |
48212
7913f533592d
chistedit: move cycleaction() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48211
diff
changeset
|
1484 self.cycle_action(oldpos, next=False) |
48205
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1485 elif action == b'select': |
48214
1895027c5051
chistedit: remove some local variable and access state on self instead
Martin von Zweigbergk <martinvonz@google.com>
parents:
48213
diff
changeset
|
1486 self.selected = oldpos if self.selected is None else None |
1895027c5051
chistedit: remove some local variable and access state on self instead
Martin von Zweigbergk <martinvonz@google.com>
parents:
48213
diff
changeset
|
1487 self.make_selection(self.selected) |
1895027c5051
chistedit: remove some local variable and access state on self instead
Martin von Zweigbergk <martinvonz@google.com>
parents:
48213
diff
changeset
|
1488 elif action == b'goto' and int(ch) < len(self.rules) <= 10: |
1895027c5051
chistedit: remove some local variable and access state on self instead
Martin von Zweigbergk <martinvonz@google.com>
parents:
48213
diff
changeset
|
1489 newrule = next((r for r in self.rules if r.origpos == int(ch))) |
48207
fb30ad66a572
chistedit: move movecursor() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48206
diff
changeset
|
1490 self.move_cursor(oldpos, newrule.pos) |
48214
1895027c5051
chistedit: remove some local variable and access state on self instead
Martin von Zweigbergk <martinvonz@google.com>
parents:
48213
diff
changeset
|
1491 if self.selected is not None: |
48210
0444956ecbcf
chistedit: move swap() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48209
diff
changeset
|
1492 self.swap(oldpos, newrule.pos) |
48205
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1493 elif action.startswith(b'action-'): |
48211
141aafac446c
chistedit: move changeaction() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48210
diff
changeset
|
1494 self.change_action(oldpos, action[7:]) |
48205
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1495 elif action == b'showpatch': |
48208
7d2464b6e30b
chistedit: move changemode() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48207
diff
changeset
|
1496 self.change_mode(MODE_PATCH if curmode != MODE_PATCH else prevmode) |
48205
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1497 elif action == b'help': |
48208
7d2464b6e30b
chistedit: move changemode() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48207
diff
changeset
|
1498 self.change_mode(MODE_HELP if curmode != MODE_HELP else prevmode) |
48205
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1499 elif action == b'quit': |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1500 return E_QUIT |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1501 elif action == b'histedit': |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1502 return E_HISTEDIT |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1503 elif action == b'page-down': |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1504 return E_PAGEDOWN |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1505 elif action == b'page-up': |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1506 return E_PAGEUP |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1507 elif action == b'line-down': |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1508 return E_LINEDOWN |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1509 elif action == b'line-up': |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1510 return E_LINEUP |
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1511 |
48206
c7690fabce5f
chistedit: move patchcontents() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48205
diff
changeset
|
1512 def patch_contents(self): |
c7690fabce5f
chistedit: move patchcontents() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48205
diff
changeset
|
1513 repo = self.repo |
48233
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1514 rule = self.rules[self.display_pos_to_rule_pos(self.pos)] |
48206
c7690fabce5f
chistedit: move patchcontents() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48205
diff
changeset
|
1515 displayer = logcmdutil.changesetdisplayer( |
c7690fabce5f
chistedit: move patchcontents() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48205
diff
changeset
|
1516 repo.ui, |
c7690fabce5f
chistedit: move patchcontents() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48205
diff
changeset
|
1517 repo, |
c7690fabce5f
chistedit: move patchcontents() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48205
diff
changeset
|
1518 {b"patch": True, b"template": b"status"}, |
c7690fabce5f
chistedit: move patchcontents() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48205
diff
changeset
|
1519 buffered=True, |
c7690fabce5f
chistedit: move patchcontents() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48205
diff
changeset
|
1520 ) |
c7690fabce5f
chistedit: move patchcontents() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48205
diff
changeset
|
1521 overrides = {(b'ui', b'verbose'): True} |
c7690fabce5f
chistedit: move patchcontents() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48205
diff
changeset
|
1522 with repo.ui.configoverride(overrides, source=b'histedit'): |
c7690fabce5f
chistedit: move patchcontents() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48205
diff
changeset
|
1523 displayer.show(rule.ctx) |
c7690fabce5f
chistedit: move patchcontents() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48205
diff
changeset
|
1524 displayer.close() |
c7690fabce5f
chistedit: move patchcontents() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48205
diff
changeset
|
1525 return displayer.hunk[rule.ctx.rev()].splitlines() |
c7690fabce5f
chistedit: move patchcontents() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48205
diff
changeset
|
1526 |
48207
fb30ad66a572
chistedit: move movecursor() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48206
diff
changeset
|
1527 def move_cursor(self, oldpos, newpos): |
fb30ad66a572
chistedit: move movecursor() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48206
diff
changeset
|
1528 """Change the rule/changeset that the cursor is pointing to, regardless of |
fb30ad66a572
chistedit: move movecursor() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48206
diff
changeset
|
1529 current mode (you can switch between patches from the view patch window).""" |
fb30ad66a572
chistedit: move movecursor() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48206
diff
changeset
|
1530 self.pos = newpos |
fb30ad66a572
chistedit: move movecursor() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48206
diff
changeset
|
1531 |
fb30ad66a572
chistedit: move movecursor() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48206
diff
changeset
|
1532 mode, _ = self.mode |
fb30ad66a572
chistedit: move movecursor() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48206
diff
changeset
|
1533 if mode == MODE_RULES: |
fb30ad66a572
chistedit: move movecursor() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48206
diff
changeset
|
1534 # Scroll through the list by updating the view for MODE_RULES, so that |
fb30ad66a572
chistedit: move movecursor() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48206
diff
changeset
|
1535 # even if we are not currently viewing the rules, switching back will |
fb30ad66a572
chistedit: move movecursor() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48206
diff
changeset
|
1536 # result in the cursor's rule being visible. |
fb30ad66a572
chistedit: move movecursor() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48206
diff
changeset
|
1537 modestate = self.modes[MODE_RULES] |
fb30ad66a572
chistedit: move movecursor() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48206
diff
changeset
|
1538 if newpos < modestate[b'line_offset']: |
fb30ad66a572
chistedit: move movecursor() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48206
diff
changeset
|
1539 modestate[b'line_offset'] = newpos |
fb30ad66a572
chistedit: move movecursor() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48206
diff
changeset
|
1540 elif newpos > modestate[b'line_offset'] + self.page_height - 1: |
fb30ad66a572
chistedit: move movecursor() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48206
diff
changeset
|
1541 modestate[b'line_offset'] = newpos - self.page_height + 1 |
fb30ad66a572
chistedit: move movecursor() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48206
diff
changeset
|
1542 |
fb30ad66a572
chistedit: move movecursor() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48206
diff
changeset
|
1543 # Reset the patch view region to the top of the new patch. |
fb30ad66a572
chistedit: move movecursor() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48206
diff
changeset
|
1544 self.modes[MODE_PATCH][b'line_offset'] = 0 |
fb30ad66a572
chistedit: move movecursor() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48206
diff
changeset
|
1545 |
48208
7d2464b6e30b
chistedit: move changemode() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48207
diff
changeset
|
1546 def change_mode(self, mode): |
7d2464b6e30b
chistedit: move changemode() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48207
diff
changeset
|
1547 curmode, _ = self.mode |
7d2464b6e30b
chistedit: move changemode() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48207
diff
changeset
|
1548 self.mode = (mode, curmode) |
7d2464b6e30b
chistedit: move changemode() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48207
diff
changeset
|
1549 if mode == MODE_PATCH: |
7d2464b6e30b
chistedit: move changemode() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48207
diff
changeset
|
1550 self.modes[MODE_PATCH][b'patchcontents'] = self.patch_contents() |
7d2464b6e30b
chistedit: move changemode() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48207
diff
changeset
|
1551 |
48209
0f498e03b016
chistedit: move makeselection() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48208
diff
changeset
|
1552 def make_selection(self, pos): |
0f498e03b016
chistedit: move makeselection() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48208
diff
changeset
|
1553 self.selected = pos |
0f498e03b016
chistedit: move makeselection() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48208
diff
changeset
|
1554 |
48210
0444956ecbcf
chistedit: move swap() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48209
diff
changeset
|
1555 def swap(self, oldpos, newpos): |
0444956ecbcf
chistedit: move swap() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48209
diff
changeset
|
1556 """Swap two positions and calculate necessary conflicts in |
0444956ecbcf
chistedit: move swap() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48209
diff
changeset
|
1557 O(|newpos-oldpos|) time""" |
48233
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1558 old_rule_pos = self.display_pos_to_rule_pos(oldpos) |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1559 new_rule_pos = self.display_pos_to_rule_pos(newpos) |
48210
0444956ecbcf
chistedit: move swap() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48209
diff
changeset
|
1560 |
0444956ecbcf
chistedit: move swap() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48209
diff
changeset
|
1561 rules = self.rules |
48233
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1562 assert 0 <= old_rule_pos < len(rules) and 0 <= new_rule_pos < len(rules) |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1563 |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1564 rules[old_rule_pos], rules[new_rule_pos] = ( |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1565 rules[new_rule_pos], |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1566 rules[old_rule_pos], |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1567 ) |
48210
0444956ecbcf
chistedit: move swap() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48209
diff
changeset
|
1568 |
0444956ecbcf
chistedit: move swap() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48209
diff
changeset
|
1569 # TODO: swap should not know about histeditrule's internals |
48233
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1570 rules[new_rule_pos].pos = new_rule_pos |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1571 rules[old_rule_pos].pos = old_rule_pos |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1572 |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1573 start = min(old_rule_pos, new_rule_pos) |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1574 end = max(old_rule_pos, new_rule_pos) |
49284
d44e3c45f0e4
py3: replace `pycompat.xrange` by `range`
Manuel Jacob <me@manueljacob.de>
parents:
49248
diff
changeset
|
1575 for r in range(start, end + 1): |
48233
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1576 rules[new_rule_pos].checkconflicts(rules[r]) |
c820866c52f9
chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com>
parents:
48215
diff
changeset
|
1577 rules[old_rule_pos].checkconflicts(rules[r]) |
48210
0444956ecbcf
chistedit: move swap() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48209
diff
changeset
|
1578 |
0444956ecbcf
chistedit: move swap() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48209
diff
changeset
|
1579 if self.selected: |
0444956ecbcf
chistedit: move swap() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48209
diff
changeset
|
1580 self.make_selection(newpos) |
0444956ecbcf
chistedit: move swap() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48209
diff
changeset
|
1581 |
48211
141aafac446c
chistedit: move changeaction() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48210
diff
changeset
|
1582 def change_action(self, pos, action): |
141aafac446c
chistedit: move changeaction() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48210
diff
changeset
|
1583 """Change the action state on the given position to the new action""" |
51627
6ec4c745c598
chistedit: change action for the correct item
Anton Shestakov <av6@dwimlabs.net>
parents:
51174
diff
changeset
|
1584 rule_pos = self.display_pos_to_rule_pos(pos) |
6ec4c745c598
chistedit: change action for the correct item
Anton Shestakov <av6@dwimlabs.net>
parents:
51174
diff
changeset
|
1585 assert 0 <= rule_pos < len(self.rules) |
6ec4c745c598
chistedit: change action for the correct item
Anton Shestakov <av6@dwimlabs.net>
parents:
51174
diff
changeset
|
1586 self.rules[rule_pos].action = action |
48211
141aafac446c
chistedit: move changeaction() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48210
diff
changeset
|
1587 |
48212
7913f533592d
chistedit: move cycleaction() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48211
diff
changeset
|
1588 def cycle_action(self, pos, next=False): |
7913f533592d
chistedit: move cycleaction() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48211
diff
changeset
|
1589 """Changes the action state the next or the previous action from |
7913f533592d
chistedit: move cycleaction() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48211
diff
changeset
|
1590 the action list""" |
51627
6ec4c745c598
chistedit: change action for the correct item
Anton Shestakov <av6@dwimlabs.net>
parents:
51174
diff
changeset
|
1591 rule_pos = self.display_pos_to_rule_pos(pos) |
6ec4c745c598
chistedit: change action for the correct item
Anton Shestakov <av6@dwimlabs.net>
parents:
51174
diff
changeset
|
1592 assert 0 <= rule_pos < len(self.rules) |
6ec4c745c598
chistedit: change action for the correct item
Anton Shestakov <av6@dwimlabs.net>
parents:
51174
diff
changeset
|
1593 current = self.rules[rule_pos].action |
48212
7913f533592d
chistedit: move cycleaction() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48211
diff
changeset
|
1594 |
7913f533592d
chistedit: move cycleaction() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48211
diff
changeset
|
1595 assert current in KEY_LIST |
7913f533592d
chistedit: move cycleaction() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48211
diff
changeset
|
1596 |
7913f533592d
chistedit: move cycleaction() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48211
diff
changeset
|
1597 index = KEY_LIST.index(current) |
7913f533592d
chistedit: move cycleaction() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48211
diff
changeset
|
1598 if next: |
7913f533592d
chistedit: move cycleaction() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48211
diff
changeset
|
1599 index += 1 |
7913f533592d
chistedit: move cycleaction() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48211
diff
changeset
|
1600 else: |
7913f533592d
chistedit: move cycleaction() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48211
diff
changeset
|
1601 index -= 1 |
51627
6ec4c745c598
chistedit: change action for the correct item
Anton Shestakov <av6@dwimlabs.net>
parents:
51174
diff
changeset
|
1602 # using pos instead of rule_pos because change_action() also calls |
6ec4c745c598
chistedit: change action for the correct item
Anton Shestakov <av6@dwimlabs.net>
parents:
51174
diff
changeset
|
1603 # display_pos_to_rule_pos() |
48212
7913f533592d
chistedit: move cycleaction() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48211
diff
changeset
|
1604 self.change_action(pos, KEY_LIST[index % len(KEY_LIST)]) |
7913f533592d
chistedit: move cycleaction() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48211
diff
changeset
|
1605 |
48213
1302905b2d49
chistedit: move changeview() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48212
diff
changeset
|
1606 def change_view(self, delta, unit): |
1302905b2d49
chistedit: move changeview() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48212
diff
changeset
|
1607 """Change the region of whatever is being viewed (a patch or the list of |
1302905b2d49
chistedit: move changeview() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48212
diff
changeset
|
1608 changesets). 'delta' is an amount (+/- 1) and 'unit' is 'page' or 'line'.""" |
1302905b2d49
chistedit: move changeview() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48212
diff
changeset
|
1609 mode, _ = self.mode |
1302905b2d49
chistedit: move changeview() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48212
diff
changeset
|
1610 if mode != MODE_PATCH: |
1302905b2d49
chistedit: move changeview() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48212
diff
changeset
|
1611 return |
1302905b2d49
chistedit: move changeview() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48212
diff
changeset
|
1612 mode_state = self.modes[mode] |
1302905b2d49
chistedit: move changeview() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48212
diff
changeset
|
1613 num_lines = len(mode_state[b'patchcontents']) |
1302905b2d49
chistedit: move changeview() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48212
diff
changeset
|
1614 page_height = self.page_height |
1302905b2d49
chistedit: move changeview() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48212
diff
changeset
|
1615 unit = page_height if unit == b'page' else 1 |
1302905b2d49
chistedit: move changeview() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48212
diff
changeset
|
1616 num_pages = 1 + (num_lines - 1) // page_height |
1302905b2d49
chistedit: move changeview() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48212
diff
changeset
|
1617 max_offset = (num_pages - 1) * page_height |
1302905b2d49
chistedit: move changeview() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48212
diff
changeset
|
1618 newline = mode_state[b'line_offset'] + delta * unit |
1302905b2d49
chistedit: move changeview() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48212
diff
changeset
|
1619 mode_state[b'line_offset'] = max(0, min(max_offset, newline)) |
1302905b2d49
chistedit: move changeview() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48212
diff
changeset
|
1620 |
48203
8dd2422b0109
chistedit: move renderrules() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48202
diff
changeset
|
1621 |
8dd2422b0109
chistedit: move renderrules() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48202
diff
changeset
|
1622 def _chisteditmain(repo, rules, stdscr): |
8dd2422b0109
chistedit: move renderrules() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48202
diff
changeset
|
1623 try: |
8dd2422b0109
chistedit: move renderrules() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48202
diff
changeset
|
1624 curses.use_default_colors() |
8dd2422b0109
chistedit: move renderrules() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48202
diff
changeset
|
1625 except curses.error: |
8dd2422b0109
chistedit: move renderrules() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48202
diff
changeset
|
1626 pass |
8dd2422b0109
chistedit: move renderrules() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48202
diff
changeset
|
1627 |
8dd2422b0109
chistedit: move renderrules() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48202
diff
changeset
|
1628 # initialize color pattern |
8dd2422b0109
chistedit: move renderrules() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48202
diff
changeset
|
1629 curses.init_pair(COLOR_HELP, curses.COLOR_WHITE, curses.COLOR_BLUE) |
8dd2422b0109
chistedit: move renderrules() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48202
diff
changeset
|
1630 curses.init_pair(COLOR_SELECTED, curses.COLOR_BLACK, curses.COLOR_WHITE) |
8dd2422b0109
chistedit: move renderrules() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48202
diff
changeset
|
1631 curses.init_pair(COLOR_WARN, curses.COLOR_BLACK, curses.COLOR_YELLOW) |
8dd2422b0109
chistedit: move renderrules() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48202
diff
changeset
|
1632 curses.init_pair(COLOR_OK, curses.COLOR_BLACK, curses.COLOR_GREEN) |
8dd2422b0109
chistedit: move renderrules() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48202
diff
changeset
|
1633 curses.init_pair(COLOR_CURRENT, curses.COLOR_WHITE, curses.COLOR_MAGENTA) |
8dd2422b0109
chistedit: move renderrules() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48202
diff
changeset
|
1634 curses.init_pair(COLOR_DIFF_ADD_LINE, curses.COLOR_GREEN, -1) |
8dd2422b0109
chistedit: move renderrules() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48202
diff
changeset
|
1635 curses.init_pair(COLOR_DIFF_DEL_LINE, curses.COLOR_RED, -1) |
8dd2422b0109
chistedit: move renderrules() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48202
diff
changeset
|
1636 curses.init_pair(COLOR_DIFF_OFFSET, curses.COLOR_MAGENTA, -1) |
8dd2422b0109
chistedit: move renderrules() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48202
diff
changeset
|
1637 curses.init_pair(COLOR_ROLL, curses.COLOR_RED, -1) |
8dd2422b0109
chistedit: move renderrules() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48202
diff
changeset
|
1638 curses.init_pair( |
8dd2422b0109
chistedit: move renderrules() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48202
diff
changeset
|
1639 COLOR_ROLL_CURRENT, curses.COLOR_BLACK, curses.COLOR_MAGENTA |
8dd2422b0109
chistedit: move renderrules() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48202
diff
changeset
|
1640 ) |
8dd2422b0109
chistedit: move renderrules() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48202
diff
changeset
|
1641 curses.init_pair(COLOR_ROLL_SELECTED, curses.COLOR_RED, curses.COLOR_WHITE) |
8dd2422b0109
chistedit: move renderrules() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48202
diff
changeset
|
1642 |
8dd2422b0109
chistedit: move renderrules() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48202
diff
changeset
|
1643 # don't display the cursor |
8dd2422b0109
chistedit: move renderrules() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48202
diff
changeset
|
1644 try: |
8dd2422b0109
chistedit: move renderrules() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48202
diff
changeset
|
1645 curses.curs_set(0) |
8dd2422b0109
chistedit: move renderrules() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48202
diff
changeset
|
1646 except curses.error: |
8dd2422b0109
chistedit: move renderrules() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48202
diff
changeset
|
1647 pass |
8dd2422b0109
chistedit: move renderrules() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48202
diff
changeset
|
1648 |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1649 def drawvertwin(size, y, x): |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1650 win = curses.newwin(size[0], size[1], y, x) |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1651 y += size[0] |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1652 return win, y, x |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1653 |
48202
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1654 state = _chistedit_state(repo, rules, stdscr) |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1655 |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1656 # eventloop |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1657 ch = None |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1658 stdscr.clear() |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1659 stdscr.refresh() |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1660 while True: |
48200
b6fc7d188f68
chistedit: move view state from a dict to a custom class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48116
diff
changeset
|
1661 oldmode, unused = state.mode |
46396
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1662 if oldmode == MODE_INIT: |
48208
7d2464b6e30b
chistedit: move changemode() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48207
diff
changeset
|
1663 state.change_mode(MODE_RULES) |
48205
3fdeb657602f
chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48204
diff
changeset
|
1664 e = state.event(ch) |
46396
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1665 |
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1666 if e == E_QUIT: |
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1667 return False |
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1668 if e == E_HISTEDIT: |
48200
b6fc7d188f68
chistedit: move view state from a dict to a custom class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48116
diff
changeset
|
1669 return state.rules |
46396
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1670 else: |
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1671 if e == E_RESIZE: |
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1672 size = screen_size() |
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1673 if size != stdscr.getmaxyx(): |
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1674 curses.resizeterm(*size) |
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1675 |
48202
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1676 sizes = state.layout() |
48200
b6fc7d188f68
chistedit: move view state from a dict to a custom class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48116
diff
changeset
|
1677 curmode, unused = state.mode |
46396
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1678 if curmode != oldmode: |
48200
b6fc7d188f68
chistedit: move view state from a dict to a custom class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48116
diff
changeset
|
1679 state.page_height = sizes[b'main'][0] |
46396
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1680 # Adjust the view to fit the current screen size. |
48207
fb30ad66a572
chistedit: move movecursor() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48206
diff
changeset
|
1681 state.move_cursor(state.pos, state.pos) |
46396
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1682 |
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1683 # Pack the windows against the top, each pane spread across the |
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1684 # full width of the screen. |
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1685 y, x = (0, 0) |
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1686 helpwin, y, x = drawvertwin(sizes[b'help'], y, x) |
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1687 mainwin, y, x = drawvertwin(sizes[b'main'], y, x) |
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1688 commitwin, y, x = drawvertwin(sizes[b'commit'], y, x) |
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1689 |
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1690 if e in (E_PAGEDOWN, E_PAGEUP, E_LINEDOWN, E_LINEUP): |
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1691 if e == E_PAGEDOWN: |
48213
1302905b2d49
chistedit: move changeview() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48212
diff
changeset
|
1692 state.change_view(+1, b'page') |
46396
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1693 elif e == E_PAGEUP: |
48213
1302905b2d49
chistedit: move changeview() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48212
diff
changeset
|
1694 state.change_view(-1, b'page') |
46396
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1695 elif e == E_LINEDOWN: |
48213
1302905b2d49
chistedit: move changeview() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48212
diff
changeset
|
1696 state.change_view(+1, b'line') |
46396
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1697 elif e == E_LINEUP: |
48213
1302905b2d49
chistedit: move changeview() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48212
diff
changeset
|
1698 state.change_view(-1, b'line') |
46396
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1699 |
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1700 # start rendering |
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1701 commitwin.erase() |
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1702 helpwin.erase() |
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1703 mainwin.erase() |
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1704 if curmode == MODE_PATCH: |
48204
33ece8857efa
chistedit: move renderpatch() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48203
diff
changeset
|
1705 state.render_patch(mainwin) |
46396
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1706 elif curmode == MODE_HELP: |
48204
33ece8857efa
chistedit: move renderpatch() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48203
diff
changeset
|
1707 state.render_string(mainwin, __doc__.strip().splitlines()) |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1708 else: |
48203
8dd2422b0109
chistedit: move renderrules() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48202
diff
changeset
|
1709 state.render_rules(mainwin) |
48201
8ac61257c807
chistedit: move rendercommit() onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48200
diff
changeset
|
1710 state.render_commit(commitwin) |
48202
9006eafa0942
chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com>
parents:
48201
diff
changeset
|
1711 state.render_help(helpwin) |
46396
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1712 curses.doupdate() |
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1713 # done rendering |
11ce2977572f
histedit: rip out mysterious catch-all ignore curses.error handler
Augie Fackler <augie@google.com>
parents:
46395
diff
changeset
|
1714 ch = encoding.strtolocal(stdscr.getkey()) |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1715 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1716 |
51795
73476a9e5ced
histedit: create state and acquire locks earlier
Anton Shestakov <av6@dwimlabs.net>
parents:
51627
diff
changeset
|
1717 def _chistedit(ui, repo, state, freeargs, opts): |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1718 """interactively edit changeset history via a curses interface |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1719 |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1720 Provides a ncurses interface to histedit. Press ? in chistedit mode |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1721 to see an extensive help. Requires python-curses to be installed.""" |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1722 |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1723 if curses is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1724 raise error.Abort(_(b"Python curses library required")) |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1725 |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1726 # disable color |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1727 ui._colormode = None |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1728 |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1729 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1730 keep = opts.get(b'keep') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1731 revs = opts.get(b'rev', [])[:] |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1732 cmdutil.checkunfinished(repo) |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1733 cmdutil.bailifchanged(repo) |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1734 |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1735 revs.extend(freeargs) |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1736 if not revs: |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1737 defaultrev = destutil.desthistedit(ui, repo) |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1738 if defaultrev is not None: |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1739 revs.append(defaultrev) |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1740 if len(revs) != 1: |
48054
f27a83399abb
histedit: use more specific exceptions for more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
48053
diff
changeset
|
1741 raise error.InputError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1742 _(b'histedit requires exactly one ancestor revision') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1743 ) |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1744 |
48116
5ced12cfa41b
errors: raise InputError on bad revset to revrange() iff provided by the user
Martin von Zweigbergk <martinvonz@google.com>
parents:
48054
diff
changeset
|
1745 rr = list(repo.set(b'roots(%ld)', logcmdutil.revrange(repo, revs))) |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1746 if len(rr) != 1: |
48054
f27a83399abb
histedit: use more specific exceptions for more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
48053
diff
changeset
|
1747 raise error.InputError( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1748 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1749 b'The specified revisions must have ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1750 b'exactly one common root' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1751 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1752 ) |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1753 root = rr[0].node() |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1754 |
41399
5cb8158a61f7
cleanup: use p1() instead of parents() when we only need the first parent
Martin von Zweigbergk <martinvonz@google.com>
parents:
41397
diff
changeset
|
1755 topmost = repo.dirstate.p1() |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1756 revs = between(repo, root, topmost, keep) |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1757 if not revs: |
48054
f27a83399abb
histedit: use more specific exceptions for more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
48053
diff
changeset
|
1758 raise error.InputError( |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
1759 _(b'%s is not an ancestor of working directory') % short(root) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1760 ) |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1761 |
48215
d8cff8564f5a
chistedit: rename a confusingly named variable
Martin von Zweigbergk <martinvonz@google.com>
parents:
48214
diff
changeset
|
1762 rules = [] |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1763 for i, r in enumerate(revs): |
48215
d8cff8564f5a
chistedit: rename a confusingly named variable
Martin von Zweigbergk <martinvonz@google.com>
parents:
48214
diff
changeset
|
1764 rules.append(histeditrule(ui, repo[r], i)) |
45011
1bab6b61b62b
curses: do not initialize LC_ALL to user settings (issue6358)
Manuel Jacob <me@manueljacob.de>
parents:
44661
diff
changeset
|
1765 with util.with_lc_ctype(): |
48215
d8cff8564f5a
chistedit: rename a confusingly named variable
Martin von Zweigbergk <martinvonz@google.com>
parents:
48214
diff
changeset
|
1766 rc = curses.wrapper(functools.partial(_chisteditmain, repo, rules)) |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1767 if rc is False: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1768 ui.write(_(b"histedit aborted\n")) |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1769 return 0 |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1770 if type(rc) is list: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1771 ui.status(_(b"performing changes\n")) |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1772 rules = makecommands(rc) |
43372
66a0c5faed1e
py3: open chistedit file in binary mode using vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
43371
diff
changeset
|
1773 with repo.vfs(b'chistedit', b'w+') as fp: |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1774 for r in rules: |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1775 fp.write(r) |
44402
9b8e13a038db
histedit: py3 fixes for curses mode
Steve Fink <sfink@mozilla.com>
parents:
43995
diff
changeset
|
1776 opts[b'commands'] = fp.name |
51795
73476a9e5ced
histedit: create state and acquire locks earlier
Anton Shestakov <av6@dwimlabs.net>
parents:
51627
diff
changeset
|
1777 return _texthistedit(ui, repo, state, freeargs, opts) |
40602
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1778 except KeyboardInterrupt: |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1779 pass |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1780 return -1 |
c36175456350
histedit: import chistedit curses UI from hg-experimental
Augie Fackler <augie@google.com>
parents:
40366
diff
changeset
|
1781 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1782 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1783 @command( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1784 b'histedit', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1785 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1786 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1787 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1788 b'commands', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1789 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1790 _(b'read history edits from the specified file'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1791 _(b'FILE'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1792 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1793 (b'c', b'continue', False, _(b'continue an edit already in progress')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1794 (b'', b'edit-plan', False, _(b'edit remaining actions list')), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1795 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1796 b'k', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1797 b'keep', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1798 False, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1799 _(b"don't strip old nodes after edit is complete"), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1800 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1801 (b'', b'abort', False, _(b'abort an edit in progress')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1802 (b'o', b'outgoing', False, _(b'changesets not found in destination')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1803 ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1804 b'f', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1805 b'force', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1806 False, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1807 _(b'force outgoing even for unrelated repositories'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1808 ), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1809 (b'r', b'rev', [], _(b'first revision to be edited'), _(b'REV')), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1810 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1811 + cmdutil.formatteropts, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1812 _(b"[OPTIONS] ([ANCESTOR] | --outgoing [URL])"), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1813 helpcategory=command.CATEGORY_CHANGE_MANAGEMENT, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1814 ) |
19020
12c06686d371
histedit: move all arguments checks to the beginning of the command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
19018
diff
changeset
|
1815 def histedit(ui, repo, *freeargs, **opts): |
17131
4fb2d3d16743
histedit: add extension docstring from external README
Augie Fackler <raf@durin42.com>
parents:
17130
diff
changeset
|
1816 """interactively edit changeset history |
19621
11de0651d3b6
histedit: add description about basic histedit function to command help
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19519
diff
changeset
|
1817 |
27713
fb2c77ba577a
histedit: explain basics of histedit commands
timeless <timeless@mozdev.org>
parents:
27712
diff
changeset
|
1818 This command lets you edit a linear series of changesets (up to |
fb2c77ba577a
histedit: explain basics of histedit commands
timeless <timeless@mozdev.org>
parents:
27712
diff
changeset
|
1819 and including the working directory, which should be clean). |
27956
f3eb98b8fe12
doc: prevent non-literal text block from being treated as literal one
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27955
diff
changeset
|
1820 You can: |
27713
fb2c77ba577a
histedit: explain basics of histedit commands
timeless <timeless@mozdev.org>
parents:
27712
diff
changeset
|
1821 |
fb2c77ba577a
histedit: explain basics of histedit commands
timeless <timeless@mozdev.org>
parents:
27712
diff
changeset
|
1822 - `pick` to [re]order a changeset |
fb2c77ba577a
histedit: explain basics of histedit commands
timeless <timeless@mozdev.org>
parents:
27712
diff
changeset
|
1823 |
fb2c77ba577a
histedit: explain basics of histedit commands
timeless <timeless@mozdev.org>
parents:
27712
diff
changeset
|
1824 - `drop` to omit changeset |
fb2c77ba577a
histedit: explain basics of histedit commands
timeless <timeless@mozdev.org>
parents:
27712
diff
changeset
|
1825 |
fb2c77ba577a
histedit: explain basics of histedit commands
timeless <timeless@mozdev.org>
parents:
27712
diff
changeset
|
1826 - `mess` to reword the changeset commit message |
fb2c77ba577a
histedit: explain basics of histedit commands
timeless <timeless@mozdev.org>
parents:
27712
diff
changeset
|
1827 |
31055
f1b63ec4b987
histedit: improve documentation and behaviour of dates
Ben Schmidt <insightfuls@users.noreply.github.com>
parents:
30983
diff
changeset
|
1828 - `fold` to combine it with the preceding changeset (using the later date) |
27713
fb2c77ba577a
histedit: explain basics of histedit commands
timeless <timeless@mozdev.org>
parents:
27712
diff
changeset
|
1829 |
31056
37ab9e20991c
histedit: modify rollup to discard date from the rollup commit (issue4820)
Ben Schmidt <insightfuls@users.noreply.github.com>
parents:
31055
diff
changeset
|
1830 - `roll` like fold, but discarding this commit's description and date |
27713
fb2c77ba577a
histedit: explain basics of histedit commands
timeless <timeless@mozdev.org>
parents:
27712
diff
changeset
|
1831 |
31055
f1b63ec4b987
histedit: improve documentation and behaviour of dates
Ben Schmidt <insightfuls@users.noreply.github.com>
parents:
30983
diff
changeset
|
1832 - `edit` to edit this changeset (preserving date) |
19622
3d0ece7523c8
histedit: add description about "histedit --outgoing" to command help
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19621
diff
changeset
|
1833 |
34489
270e344a6c74
histedit: removing the experimental config 'histeditng'
Saurabh Singh <singhsrb@fb.com>
parents:
34475
diff
changeset
|
1834 - `base` to checkout changeset and apply further changesets from there |
270e344a6c74
histedit: removing the experimental config 'histeditng'
Saurabh Singh <singhsrb@fb.com>
parents:
34475
diff
changeset
|
1835 |
27972
92a61d7618ac
histedit: fix typo in documentation
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
27958
diff
changeset
|
1836 There are a number of ways to select the root changeset: |
27714 | 1837 |
1838 - Specify ANCESTOR directly | |
27262
3d0feb2f978b
histedit: pick an appropriate base changeset by default (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27217
diff
changeset
|
1839 |
27714 | 1840 - Use --outgoing -- it will be the first linear changeset not |
28077
27ae22a4f9f9
doc: describe full help document hierarchy to create a valid link in HTML
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28004
diff
changeset
|
1841 included in destination. (See :hg:`help config.paths.default-push`) |
27714 | 1842 |
1843 - Otherwise, the value from the "histedit.defaultrev" config option | |
1844 is used as a revset to select the base revision when ANCESTOR is not | |
1845 specified. The first revision returned by the revset is used. By | |
1846 default, this selects the editable history that is unique to the | |
1847 ancestry of the working directory. | |
19842
1aaefba2a3a9
histedit: add more detailed help about "--outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19841
diff
changeset
|
1848 |
27630
9358124b4a65
histedit: hide --outgoing warnings
timeless <timeless@mozdev.org>
parents:
27629
diff
changeset
|
1849 .. container:: verbose |
19842
1aaefba2a3a9
histedit: add more detailed help about "--outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19841
diff
changeset
|
1850 |
27630
9358124b4a65
histedit: hide --outgoing warnings
timeless <timeless@mozdev.org>
parents:
27629
diff
changeset
|
1851 If you use --outgoing, this command will abort if there are ambiguous |
9358124b4a65
histedit: hide --outgoing warnings
timeless <timeless@mozdev.org>
parents:
27629
diff
changeset
|
1852 outgoing revisions. For example, if there are multiple branches |
9358124b4a65
histedit: hide --outgoing warnings
timeless <timeless@mozdev.org>
parents:
27629
diff
changeset
|
1853 containing outgoing revisions. |
9358124b4a65
histedit: hide --outgoing warnings
timeless <timeless@mozdev.org>
parents:
27629
diff
changeset
|
1854 |
9358124b4a65
histedit: hide --outgoing warnings
timeless <timeless@mozdev.org>
parents:
27629
diff
changeset
|
1855 Use "min(outgoing() and ::.)" or similar revset specification |
9358124b4a65
histedit: hide --outgoing warnings
timeless <timeless@mozdev.org>
parents:
27629
diff
changeset
|
1856 instead of --outgoing to specify edit target revision exactly in |
9358124b4a65
histedit: hide --outgoing warnings
timeless <timeless@mozdev.org>
parents:
27629
diff
changeset
|
1857 such ambiguous situation. See :hg:`help revsets` for detail about |
9358124b4a65
histedit: hide --outgoing warnings
timeless <timeless@mozdev.org>
parents:
27629
diff
changeset
|
1858 selecting revisions. |
19972
1e13a5a9c66e
histedit: add description about exit code
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19852
diff
changeset
|
1859 |
27145
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1860 .. container:: verbose |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1861 |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1862 Examples: |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1863 |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1864 - A number of changes have been made. |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1865 Revision 3 is no longer needed. |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1866 |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1867 Start history editing from revision 3:: |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1868 |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1869 hg histedit -r 3 |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1870 |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1871 An editor opens, containing the list of revisions, |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1872 with specific actions specified:: |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1873 |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1874 pick 5339bf82f0ca 3 Zworgle the foobar |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1875 pick 8ef592ce7cc4 4 Bedazzle the zerlog |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1876 pick 0a9639fcda9d 5 Morgify the cromulancy |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1877 |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1878 Additional information about the possible actions |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1879 to take appears below the list of revisions. |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1880 |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1881 To remove revision 3 from the history, |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1882 its action (at the beginning of the relevant line) |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1883 is changed to 'drop':: |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1884 |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1885 drop 5339bf82f0ca 3 Zworgle the foobar |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1886 pick 8ef592ce7cc4 4 Bedazzle the zerlog |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1887 pick 0a9639fcda9d 5 Morgify the cromulancy |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1888 |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1889 - A number of changes have been made. |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1890 Revision 2 and 4 need to be swapped. |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1891 |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1892 Start history editing from revision 2:: |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1893 |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1894 hg histedit -r 2 |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1895 |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1896 An editor opens, containing the list of revisions, |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1897 with specific actions specified:: |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1898 |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1899 pick 252a1af424ad 2 Blorb a morgwazzle |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1900 pick 5339bf82f0ca 3 Zworgle the foobar |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1901 pick 8ef592ce7cc4 4 Bedazzle the zerlog |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1902 |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1903 To swap revision 2 and 4, its lines are swapped |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1904 in the editor:: |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1905 |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1906 pick 8ef592ce7cc4 4 Bedazzle the zerlog |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1907 pick 5339bf82f0ca 3 Zworgle the foobar |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1908 pick 252a1af424ad 2 Blorb a morgwazzle |
3a2fd83182fb
histedit: add examples
Mathias De Maré <mathias.demare@gmail.com>
parents:
27086
diff
changeset
|
1909 |
19972
1e13a5a9c66e
histedit: add description about exit code
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19852
diff
changeset
|
1910 Returns 0 on success, 1 if user intervention is required (not only |
1e13a5a9c66e
histedit: add description about exit code
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19852
diff
changeset
|
1911 for intentional "edit" command, but also for resolving unexpected |
1e13a5a9c66e
histedit: add description about exit code
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19852
diff
changeset
|
1912 conflicts). |
17064
168cc52ad7c2
histedit: new extension for interactive history editing
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
1913 """ |
44402
9b8e13a038db
histedit: py3 fixes for curses mode
Steve Fink <sfink@mozilla.com>
parents:
43995
diff
changeset
|
1914 opts = pycompat.byteskwargs(opts) |
9b8e13a038db
histedit: py3 fixes for curses mode
Steve Fink <sfink@mozilla.com>
parents:
43995
diff
changeset
|
1915 |
22984
e0b5f5e3afe8
histedit: move locks into state
David Soria Parra <davidsp@fb.com>
parents:
22983
diff
changeset
|
1916 state = histeditstate(repo) |
41166
9365b8cb90e0
histedit: use context manager for locks
Martin von Zweigbergk <martinvonz@google.com>
parents:
41165
diff
changeset
|
1917 with repo.wlock() as wlock, repo.lock() as lock: |
9365b8cb90e0
histedit: use context manager for locks
Martin von Zweigbergk <martinvonz@google.com>
parents:
41165
diff
changeset
|
1918 state.wlock = wlock |
9365b8cb90e0
histedit: use context manager for locks
Martin von Zweigbergk <martinvonz@google.com>
parents:
41165
diff
changeset
|
1919 state.lock = lock |
51795
73476a9e5ced
histedit: create state and acquire locks earlier
Anton Shestakov <av6@dwimlabs.net>
parents:
51627
diff
changeset
|
1920 # kludge: _chistedit only works for starting an edit, not aborting |
73476a9e5ced
histedit: create state and acquire locks earlier
Anton Shestakov <av6@dwimlabs.net>
parents:
51627
diff
changeset
|
1921 # or continuing, so fall back to regular _texthistedit for those |
73476a9e5ced
histedit: create state and acquire locks earlier
Anton Shestakov <av6@dwimlabs.net>
parents:
51627
diff
changeset
|
1922 # operations. |
73476a9e5ced
histedit: create state and acquire locks earlier
Anton Shestakov <av6@dwimlabs.net>
parents:
51627
diff
changeset
|
1923 if ui.interface(b'histedit') == b'curses' and _getgoal(opts) == goalnew: |
73476a9e5ced
histedit: create state and acquire locks earlier
Anton Shestakov <av6@dwimlabs.net>
parents:
51627
diff
changeset
|
1924 return _chistedit(ui, repo, state, freeargs, opts) |
73476a9e5ced
histedit: create state and acquire locks earlier
Anton Shestakov <av6@dwimlabs.net>
parents:
51627
diff
changeset
|
1925 return _texthistedit(ui, repo, state, freeargs, opts) |
73476a9e5ced
histedit: create state and acquire locks earlier
Anton Shestakov <av6@dwimlabs.net>
parents:
51627
diff
changeset
|
1926 |
73476a9e5ced
histedit: create state and acquire locks earlier
Anton Shestakov <av6@dwimlabs.net>
parents:
51627
diff
changeset
|
1927 |
73476a9e5ced
histedit: create state and acquire locks earlier
Anton Shestakov <av6@dwimlabs.net>
parents:
51627
diff
changeset
|
1928 def _texthistedit(ui, repo, state, freeargs, opts): |
73476a9e5ced
histedit: create state and acquire locks earlier
Anton Shestakov <av6@dwimlabs.net>
parents:
51627
diff
changeset
|
1929 _histedit(ui, repo, state, freeargs, opts) |
20071
4778f398ec83
histedit: hold wlock and lock while in progress
Siddharth Agarwal <sid0@fb.com>
parents:
19972
diff
changeset
|
1930 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1931 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1932 goalcontinue = b'continue' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1933 goalabort = b'abort' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1934 goaleditplan = b'edit-plan' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1935 goalnew = b'new' |
28144
ed6d650b7cb7
histedit: change string literals to constants in goal naming
Kostia Balytskyi <ikostia@fb.com>
parents:
28134
diff
changeset
|
1936 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1937 |
28134
df206e030c59
histedit: break _histedit function into smaller pieces
Kostia Balytskyi <ikostia@fb.com>
parents:
28133
diff
changeset
|
1938 def _getgoal(opts): |
41223
32ef47b3c91c
histedit: fix call to _getgoal() by adding a byteskwargs() wrapper
Augie Fackler <augie@google.com>
parents:
41213
diff
changeset
|
1939 if opts.get(b'continue'): |
28144
ed6d650b7cb7
histedit: change string literals to constants in goal naming
Kostia Balytskyi <ikostia@fb.com>
parents:
28134
diff
changeset
|
1940 return goalcontinue |
41223
32ef47b3c91c
histedit: fix call to _getgoal() by adding a byteskwargs() wrapper
Augie Fackler <augie@google.com>
parents:
41213
diff
changeset
|
1941 if opts.get(b'abort'): |
28144
ed6d650b7cb7
histedit: change string literals to constants in goal naming
Kostia Balytskyi <ikostia@fb.com>
parents:
28134
diff
changeset
|
1942 return goalabort |
41223
32ef47b3c91c
histedit: fix call to _getgoal() by adding a byteskwargs() wrapper
Augie Fackler <augie@google.com>
parents:
41213
diff
changeset
|
1943 if opts.get(b'edit_plan'): |
28144
ed6d650b7cb7
histedit: change string literals to constants in goal naming
Kostia Balytskyi <ikostia@fb.com>
parents:
28134
diff
changeset
|
1944 return goaleditplan |
ed6d650b7cb7
histedit: change string literals to constants in goal naming
Kostia Balytskyi <ikostia@fb.com>
parents:
28134
diff
changeset
|
1945 return goalnew |
28134
df206e030c59
histedit: break _histedit function into smaller pieces
Kostia Balytskyi <ikostia@fb.com>
parents:
28133
diff
changeset
|
1946 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1947 |
30262
bc5d0e6fd9f3
histedit: use ui.fin to read commands from stdin
Yuya Nishihara <yuya@tcha.org>
parents:
30025
diff
changeset
|
1948 def _readfile(ui, path): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1949 if path == b'-': |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1950 with ui.timeblockedsection(b'histedit'): |
30983
d4825798818b
histedit: log the time taken to read in the commands list
Simon Farnsworth <simonfar@fb.com>
parents:
30848
diff
changeset
|
1951 return ui.fin.read() |
28550 | 1952 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1953 with open(path, b'rb') as f: |
28550 | 1954 return f.read() |
1955 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1956 |
48053
6256c7525222
histedit: remove redundant checks for unfinished histedit state
Martin von Zweigbergk <martinvonz@google.com>
parents:
47437
diff
changeset
|
1957 def _validateargs(ui, repo, freeargs, opts, goal, rules, revs): |
27169
dd214130a4f6
histedit: improve grammar for _histedit comment
timeless <timeless@mozdev.org>
parents:
27154
diff
changeset
|
1958 # TODO only abort if we try to histedit mq patches, not just |
17064
168cc52ad7c2
histedit: new extension for interactive history editing
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
1959 # blanket if mq patches are applied somewhere |
168cc52ad7c2
histedit: new extension for interactive history editing
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
1960 mq = getattr(repo, 'mq', None) |
168cc52ad7c2
histedit: new extension for interactive history editing
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
1961 if mq and mq.applied: |
48054
f27a83399abb
histedit: use more specific exceptions for more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
48053
diff
changeset
|
1962 raise error.StateError(_(b'source has mq patches applied')) |
17064
168cc52ad7c2
histedit: new extension for interactive history editing
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
1963 |
19020
12c06686d371
histedit: move all arguments checks to the beginning of the command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
19018
diff
changeset
|
1964 # basic argument incompatibility processing |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1965 outg = opts.get(b'outgoing') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1966 editplan = opts.get(b'edit_plan') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1967 abort = opts.get(b'abort') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1968 force = opts.get(b'force') |
19020
12c06686d371
histedit: move all arguments checks to the beginning of the command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
19018
diff
changeset
|
1969 if force and not outg: |
48054
f27a83399abb
histedit: use more specific exceptions for more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
48053
diff
changeset
|
1970 raise error.InputError(_(b'--force only allowed with --outgoing')) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1971 if goal == b'continue': |
25149
3f0744eeaeaf
cleanup: use __builtins__.any instead of util.any
Augie Fackler <augie@google.com>
parents:
24959
diff
changeset
|
1972 if any((outg, abort, revs, freeargs, rules, editplan)): |
48054
f27a83399abb
histedit: use more specific exceptions for more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
48053
diff
changeset
|
1973 raise error.InputError(_(b'no arguments allowed with --continue')) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1974 elif goal == b'abort': |
25149
3f0744eeaeaf
cleanup: use __builtins__.any instead of util.any
Augie Fackler <augie@google.com>
parents:
24959
diff
changeset
|
1975 if any((outg, revs, freeargs, rules, editplan)): |
48054
f27a83399abb
histedit: use more specific exceptions for more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
48053
diff
changeset
|
1976 raise error.InputError(_(b'no arguments allowed with --abort')) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1977 elif goal == b'edit-plan': |
25149
3f0744eeaeaf
cleanup: use __builtins__.any instead of util.any
Augie Fackler <augie@google.com>
parents:
24959
diff
changeset
|
1978 if any((outg, revs, freeargs)): |
48054
f27a83399abb
histedit: use more specific exceptions for more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
48053
diff
changeset
|
1979 raise error.InputError( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43105
diff
changeset
|
1980 _(b'only --commands argument allowed with --edit-plan') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1981 ) |
19020
12c06686d371
histedit: move all arguments checks to the beginning of the command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
19018
diff
changeset
|
1982 else: |
12c06686d371
histedit: move all arguments checks to the beginning of the command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
19018
diff
changeset
|
1983 if outg: |
12c06686d371
histedit: move all arguments checks to the beginning of the command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
19018
diff
changeset
|
1984 if revs: |
48054
f27a83399abb
histedit: use more specific exceptions for more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
48053
diff
changeset
|
1985 raise error.InputError( |
f27a83399abb
histedit: use more specific exceptions for more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
48053
diff
changeset
|
1986 _(b'no revisions allowed with --outgoing') |
f27a83399abb
histedit: use more specific exceptions for more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
48053
diff
changeset
|
1987 ) |
19020
12c06686d371
histedit: move all arguments checks to the beginning of the command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
19018
diff
changeset
|
1988 if len(freeargs) > 1: |
48054
f27a83399abb
histedit: use more specific exceptions for more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
48053
diff
changeset
|
1989 raise error.InputError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1990 _(b'only one repo argument allowed with --outgoing') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
1991 ) |
19020
12c06686d371
histedit: move all arguments checks to the beginning of the command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
19018
diff
changeset
|
1992 else: |
19021
26b41a902195
histedit: move outgoing processing to its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
19020
diff
changeset
|
1993 revs.extend(freeargs) |
24009
00d331763442
histedit: allow configuring default behavior
Durham Goode <durham@fb.com>
parents:
24002
diff
changeset
|
1994 if len(revs) == 0: |
27262
3d0feb2f978b
histedit: pick an appropriate base changeset by default (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27217
diff
changeset
|
1995 defaultrev = destutil.desthistedit(ui, repo) |
3d0feb2f978b
histedit: pick an appropriate base changeset by default (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27217
diff
changeset
|
1996 if defaultrev is not None: |
3d0feb2f978b
histedit: pick an appropriate base changeset by default (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27217
diff
changeset
|
1997 revs.append(defaultrev) |
3d0feb2f978b
histedit: pick an appropriate base changeset by default (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27217
diff
changeset
|
1998 |
19021
26b41a902195
histedit: move outgoing processing to its own function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
19020
diff
changeset
|
1999 if len(revs) != 1: |
48054
f27a83399abb
histedit: use more specific exceptions for more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
48053
diff
changeset
|
2000 raise error.InputError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2001 _(b'histedit requires exactly one ancestor revision') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2002 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2003 |
19020
12c06686d371
histedit: move all arguments checks to the beginning of the command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
19018
diff
changeset
|
2004 |
44402
9b8e13a038db
histedit: py3 fixes for curses mode
Steve Fink <sfink@mozilla.com>
parents:
43995
diff
changeset
|
2005 def _histedit(ui, repo, state, freeargs, opts): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2006 fm = ui.formatter(b'histedit', opts) |
35126
a9cc233de513
histedit: add support to output nodechanges using formatter
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34999
diff
changeset
|
2007 fm.startitem() |
28134
df206e030c59
histedit: break _histedit function into smaller pieces
Kostia Balytskyi <ikostia@fb.com>
parents:
28133
diff
changeset
|
2008 goal = _getgoal(opts) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2009 revs = opts.get(b'rev', []) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2010 nobackup = not ui.configbool(b'rewrite', b'backup-bundle') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2011 rules = opts.get(b'commands', b'') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2012 state.keep = opts.get(b'keep', False) |
17064
168cc52ad7c2
histedit: new extension for interactive history editing
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
2013 |
48053
6256c7525222
histedit: remove redundant checks for unfinished histedit state
Martin von Zweigbergk <martinvonz@google.com>
parents:
47437
diff
changeset
|
2014 _validateargs(ui, repo, freeargs, opts, goal, rules, revs) |
22977
29ae3b190ec5
histedit: use state object where necessary
David Soria Parra <davidsp@fb.com>
parents:
22976
diff
changeset
|
2015 |
41103
86f0ed7ac688
histedit: add warning message on editing tagged commits (issue4017)
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
40652
diff
changeset
|
2016 hastags = False |
86f0ed7ac688
histedit: add warning message on editing tagged commits (issue4017)
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
40652
diff
changeset
|
2017 if revs: |
48116
5ced12cfa41b
errors: raise InputError on bad revset to revrange() iff provided by the user
Martin von Zweigbergk <martinvonz@google.com>
parents:
48054
diff
changeset
|
2018 revs = logcmdutil.revrange(repo, revs) |
41103
86f0ed7ac688
histedit: add warning message on editing tagged commits (issue4017)
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
40652
diff
changeset
|
2019 ctxs = [repo[rev] for rev in revs] |
86f0ed7ac688
histedit: add warning message on editing tagged commits (issue4017)
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
40652
diff
changeset
|
2020 for ctx in ctxs: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2021 tags = [tag for tag in ctx.tags() if tag != b'tip'] |
41103
86f0ed7ac688
histedit: add warning message on editing tagged commits (issue4017)
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
40652
diff
changeset
|
2022 if not hastags: |
86f0ed7ac688
histedit: add warning message on editing tagged commits (issue4017)
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
40652
diff
changeset
|
2023 hastags = len(tags) |
86f0ed7ac688
histedit: add warning message on editing tagged commits (issue4017)
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
40652
diff
changeset
|
2024 if hastags: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2025 if ui.promptchoice( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2026 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2027 b'warning: tags associated with the given' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2028 b' changeset will be lost after histedit.\n' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2029 b'do you want to continue (yN)? $$ &Yes $$ &No' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2030 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2031 default=1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2032 ): |
48054
f27a83399abb
histedit: use more specific exceptions for more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
48053
diff
changeset
|
2033 raise error.CanceledError(_(b'histedit cancelled\n')) |
22977
29ae3b190ec5
histedit: use state object where necessary
David Soria Parra <davidsp@fb.com>
parents:
22976
diff
changeset
|
2034 # rebuild state |
28144
ed6d650b7cb7
histedit: change string literals to constants in goal naming
Kostia Balytskyi <ikostia@fb.com>
parents:
28134
diff
changeset
|
2035 if goal == goalcontinue: |
22983
a3a981563ce8
histedit: read state from histeditstate
David Soria Parra <davidsp@fb.com>
parents:
22982
diff
changeset
|
2036 state.read() |
22980
b3483bc1ec8c
histedit: pass state to boostrapcontinue
David Soria Parra <davidsp@fb.com>
parents:
22979
diff
changeset
|
2037 state = bootstrapcontinue(ui, state, opts) |
28144
ed6d650b7cb7
histedit: change string literals to constants in goal naming
Kostia Balytskyi <ikostia@fb.com>
parents:
28134
diff
changeset
|
2038 elif goal == goaleditplan: |
28154
47f56b6bfed1
histedit: renaming parts to which _histedit was split
Kostia Balytskyi <ikostia@fb.com>
parents:
28153
diff
changeset
|
2039 _edithisteditplan(ui, repo, state, rules) |
24142
be7cb25186be
histedit: add --edit-plan option to histedit
Mateusz Kwapich <mitrandir@fb.com>
parents:
24141
diff
changeset
|
2040 return |
28144
ed6d650b7cb7
histedit: change string literals to constants in goal naming
Kostia Balytskyi <ikostia@fb.com>
parents:
28134
diff
changeset
|
2041 elif goal == goalabort: |
38548
7b57b1ed5c0f
histedit: add --no-backup option (issue5825)
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38508
diff
changeset
|
2042 _aborthistedit(ui, repo, state, nobackup=nobackup) |
17064
168cc52ad7c2
histedit: new extension for interactive history editing
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
2043 return |
168cc52ad7c2
histedit: new extension for interactive history editing
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
2044 else: |
28144
ed6d650b7cb7
histedit: change string literals to constants in goal naming
Kostia Balytskyi <ikostia@fb.com>
parents:
28134
diff
changeset
|
2045 # goal == goalnew |
28154
47f56b6bfed1
histedit: renaming parts to which _histedit was split
Kostia Balytskyi <ikostia@fb.com>
parents:
28153
diff
changeset
|
2046 _newhistedit(ui, repo, state, revs, freeargs, opts) |
24757
7b59f16174c5
histedit: store backup file before histedit
Durham Goode <durham@fb.com>
parents:
24756
diff
changeset
|
2047 |
28154
47f56b6bfed1
histedit: renaming parts to which _histedit was split
Kostia Balytskyi <ikostia@fb.com>
parents:
28153
diff
changeset
|
2048 _continuehistedit(ui, repo, state) |
35126
a9cc233de513
histedit: add support to output nodechanges using formatter
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34999
diff
changeset
|
2049 _finishhistedit(ui, repo, state, fm) |
a9cc233de513
histedit: add support to output nodechanges using formatter
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34999
diff
changeset
|
2050 fm.end() |
28133
8fc55388ece5
histedit: break _histedit function into smaller pieces (add _continueaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28132
diff
changeset
|
2051 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2052 |
28154
47f56b6bfed1
histedit: renaming parts to which _histedit was split
Kostia Balytskyi <ikostia@fb.com>
parents:
28153
diff
changeset
|
2053 def _continuehistedit(ui, repo, state): |
47f56b6bfed1
histedit: renaming parts to which _histedit was split
Kostia Balytskyi <ikostia@fb.com>
parents:
28153
diff
changeset
|
2054 """This function runs after either: |
28133
8fc55388ece5
histedit: break _histedit function into smaller pieces (add _continueaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28132
diff
changeset
|
2055 - bootstrapcontinue (if the goal is 'continue') |
28154
47f56b6bfed1
histedit: renaming parts to which _histedit was split
Kostia Balytskyi <ikostia@fb.com>
parents:
28153
diff
changeset
|
2056 - _newhistedit (if the goal is 'new') |
28133
8fc55388ece5
histedit: break _histedit function into smaller pieces (add _continueaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28132
diff
changeset
|
2057 """ |
26246
bf81b696b8f4
histedit: use one editor when multiple folds happen in a row (issue3524) (BC)
Augie Fackler <augie@google.com>
parents:
26203
diff
changeset
|
2058 # preprocess rules so that we can hide inner folds from the user |
bf81b696b8f4
histedit: use one editor when multiple folds happen in a row (issue3524) (BC)
Augie Fackler <augie@google.com>
parents:
26203
diff
changeset
|
2059 # and only show one editor |
27207
2d8dbeb2462c
histedit: change state.rules uses to state.actions
Mateusz Kwapich <mitrandir@fb.com>
parents:
27206
diff
changeset
|
2060 actions = state.actions[:] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2061 for idx, (action, nextact) in enumerate(zip(actions, actions[1:] + [None])): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2062 if action.verb == b'fold' and nextact and nextact.verb == b'fold': |
27207
2d8dbeb2462c
histedit: change state.rules uses to state.actions
Mateusz Kwapich <mitrandir@fb.com>
parents:
27206
diff
changeset
|
2063 state.actions[idx].__class__ = _multifold |
26246
bf81b696b8f4
histedit: use one editor when multiple folds happen in a row (issue3524) (BC)
Augie Fackler <augie@google.com>
parents:
26203
diff
changeset
|
2064 |
31513
68474b72ea63
histedit: add histedit.singletransaction config option
Durham Goode <durham@fb.com>
parents:
31512
diff
changeset
|
2065 # Force an initial state file write, so the user can run --abort/continue |
68474b72ea63
histedit: add histedit.singletransaction config option
Durham Goode <durham@fb.com>
parents:
31512
diff
changeset
|
2066 # even if there's an exception before the first transaction serialize. |
68474b72ea63
histedit: add histedit.singletransaction config option
Durham Goode <durham@fb.com>
parents:
31512
diff
changeset
|
2067 state.write() |
33445
0491004e2233
histedit: create transaction outside of try
Martin von Zweigbergk <martinvonz@google.com>
parents:
33444
diff
changeset
|
2068 |
0491004e2233
histedit: create transaction outside of try
Martin von Zweigbergk <martinvonz@google.com>
parents:
33444
diff
changeset
|
2069 tr = None |
0491004e2233
histedit: create transaction outside of try
Martin von Zweigbergk <martinvonz@google.com>
parents:
33444
diff
changeset
|
2070 # Don't use singletransaction by default since it rolls the entire |
0491004e2233
histedit: create transaction outside of try
Martin von Zweigbergk <martinvonz@google.com>
parents:
33444
diff
changeset
|
2071 # transaction back if an unexpected exception happens (like a |
0491004e2233
histedit: create transaction outside of try
Martin von Zweigbergk <martinvonz@google.com>
parents:
33444
diff
changeset
|
2072 # pretxncommit hook throws, or the user aborts the commit msg editor). |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2073 if ui.configbool(b"histedit", b"singletransaction"): |
33445
0491004e2233
histedit: create transaction outside of try
Martin von Zweigbergk <martinvonz@google.com>
parents:
33444
diff
changeset
|
2074 # Don't use a 'with' for the transaction, since actions may close |
0491004e2233
histedit: create transaction outside of try
Martin von Zweigbergk <martinvonz@google.com>
parents:
33444
diff
changeset
|
2075 # and reopen a transaction. For example, if the action executes an |
0491004e2233
histedit: create transaction outside of try
Martin von Zweigbergk <martinvonz@google.com>
parents:
33444
diff
changeset
|
2076 # external process it may choose to commit the transaction first. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2077 tr = repo.transaction(b'histedit') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2078 progress = ui.makeprogress( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2079 _(b"editing"), unit=_(b'changes'), total=len(state.actions) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2080 ) |
38378
e5d87c69bbcb
histedit: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents:
37678
diff
changeset
|
2081 with progress, util.acceptintervention(tr): |
31513
68474b72ea63
histedit: add histedit.singletransaction config option
Durham Goode <durham@fb.com>
parents:
31512
diff
changeset
|
2082 while state.actions: |
33444
c4e39512a661
histedit: remove transaction from state object
Martin von Zweigbergk <martinvonz@google.com>
parents:
33351
diff
changeset
|
2083 state.write(tr=tr) |
31513
68474b72ea63
histedit: add histedit.singletransaction config option
Durham Goode <durham@fb.com>
parents:
31512
diff
changeset
|
2084 actobj = state.actions[0] |
38378
e5d87c69bbcb
histedit: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents:
37678
diff
changeset
|
2085 progress.increment(item=actobj.torule()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2086 ui.debug( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2087 b'histedit: processing %s %s\n' % (actobj.verb, actobj.torule()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2088 ) |
31513
68474b72ea63
histedit: add histedit.singletransaction config option
Durham Goode <durham@fb.com>
parents:
31512
diff
changeset
|
2089 parentctx, replacement_ = actobj.run() |
68474b72ea63
histedit: add histedit.singletransaction config option
Durham Goode <durham@fb.com>
parents:
31512
diff
changeset
|
2090 state.parentctxnode = parentctx.node() |
68474b72ea63
histedit: add histedit.singletransaction config option
Durham Goode <durham@fb.com>
parents:
31512
diff
changeset
|
2091 state.replacements.extend(replacement_) |
68474b72ea63
histedit: add histedit.singletransaction config option
Durham Goode <durham@fb.com>
parents:
31512
diff
changeset
|
2092 state.actions.pop(0) |
68474b72ea63
histedit: add histedit.singletransaction config option
Durham Goode <durham@fb.com>
parents:
31512
diff
changeset
|
2093 |
24111
11d72683f3de
histedit: don't allow to strip nodes which are necessary to continue histedit
Mateusz Kwapich <mitrandir@fb.com>
parents:
24009
diff
changeset
|
2094 state.write() |
17064
168cc52ad7c2
histedit: new extension for interactive history editing
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
2095 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2096 |
35126
a9cc233de513
histedit: add support to output nodechanges using formatter
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34999
diff
changeset
|
2097 def _finishhistedit(ui, repo, state, fm): |
28153
17c474fdb225
histedit: break _histedit into smaller pieces (add _finishaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28144
diff
changeset
|
2098 """This action runs when histedit is finishing its session""" |
45577
5c8230ca37f2
merge: replace calls to hg.updaterepo() by merge.update()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45450
diff
changeset
|
2099 mergemod.update(repo[state.parentctxnode]) |
17064
168cc52ad7c2
histedit: new extension for interactive history editing
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
2100 |
22985
0c14b9166da6
histedit: remove now-superfluous repo argument from processreplacement
Augie Fackler <raf@durin42.com>
parents:
22984
diff
changeset
|
2101 mapping, tmpnodes, created, ntm = processreplacement(state) |
17758
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2102 if mapping: |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
2103 for prec, succs in mapping.items(): |
17758
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2104 if not succs: |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
2105 ui.debug(b'histedit: %s is dropped\n' % short(prec)) |
17758
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2106 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2107 ui.debug( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2108 b'histedit: %s is replaced by %s\n' |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
2109 % (short(prec), short(succs[0])) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2110 ) |
17758
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2111 if len(succs) > 1: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2112 m = b'histedit: %s' |
17758
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2113 for n in succs[1:]: |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
2114 ui.debug(m % short(n)) |
17758
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2115 |
25330
8594d0b3018e
histedit: fix keep during --continue
Durham Goode <durham@fb.com>
parents:
24959
diff
changeset
|
2116 if not state.keep: |
17758
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2117 if mapping: |
33351
154298576d44
histedit: use scmutil.cleanupnodes (BC)
Jun Wu <quark@fb.com>
parents:
33350
diff
changeset
|
2118 movetopmostbookmarks(repo, state.topmost, ntm) |
17663
c6de8c696644
histedit: extract bookmark logic in a dedicated function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17662
diff
changeset
|
2119 # TODO update mq state |
33350
b320ff822c7e
histedit: unify strip backup files on success (BC)
Jun Wu <quark@fb.com>
parents:
33349
diff
changeset
|
2120 else: |
b320ff822c7e
histedit: unify strip backup files on success (BC)
Jun Wu <quark@fb.com>
parents:
33349
diff
changeset
|
2121 mapping = {} |
b320ff822c7e
histedit: unify strip backup files on success (BC)
Jun Wu <quark@fb.com>
parents:
33349
diff
changeset
|
2122 |
b320ff822c7e
histedit: unify strip backup files on success (BC)
Jun Wu <quark@fb.com>
parents:
33349
diff
changeset
|
2123 for n in tmpnodes: |
39914
b153ca77a52b
histedit: don't cleanup nodes already disposed of
Boris Feld <boris.feld@octobus.net>
parents:
38786
diff
changeset
|
2124 if n in repo: |
b153ca77a52b
histedit: don't cleanup nodes already disposed of
Boris Feld <boris.feld@octobus.net>
parents:
38786
diff
changeset
|
2125 mapping[n] = () |
33350
b320ff822c7e
histedit: unify strip backup files on success (BC)
Jun Wu <quark@fb.com>
parents:
33349
diff
changeset
|
2126 |
33351
154298576d44
histedit: use scmutil.cleanupnodes (BC)
Jun Wu <quark@fb.com>
parents:
33350
diff
changeset
|
2127 # remove entries about unknown nodes |
43547
2b5d07702f94
index: use `index.has_node` in `histedit._finishhistedit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43506
diff
changeset
|
2128 has_node = repo.unfiltered().changelog.index.has_node |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2129 mapping = { |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2130 k: v |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2131 for k, v in mapping.items() |
43547
2b5d07702f94
index: use `index.has_node` in `histedit._finishhistedit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43506
diff
changeset
|
2132 if has_node(k) and all(has_node(n) for n in v) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2133 } |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2134 scmutil.cleanupnodes(repo, mapping, b'histedit') |
35126
a9cc233de513
histedit: add support to output nodechanges using formatter
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34999
diff
changeset
|
2135 hf = fm.hexfunc |
a9cc233de513
histedit: add support to output nodechanges using formatter
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34999
diff
changeset
|
2136 fl = fm.formatlist |
a9cc233de513
histedit: add support to output nodechanges using formatter
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34999
diff
changeset
|
2137 fd = fm.formatdict |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2138 nodechanges = fd( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2139 { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2140 hf(oldn): fl([hf(n) for n in newn], name=b'node') |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
2141 for oldn, newn in mapping.items() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2142 }, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2143 key=b"oldnode", |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2144 value=b"newnodes", |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2145 ) |
35126
a9cc233de513
histedit: add support to output nodechanges using formatter
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34999
diff
changeset
|
2146 fm.data(nodechanges=nodechanges) |
25894
54f9561088c7
histedit: backout ebb5bb9bc32e
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25824
diff
changeset
|
2147 |
22978
d4e764521249
histedit: add clear method to remove state
David Soria Parra <davidsp@fb.com>
parents:
22977
diff
changeset
|
2148 state.clear() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2149 if os.path.exists(repo.sjoin(b'undo')): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2150 os.unlink(repo.sjoin(b'undo')) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2151 if repo.vfs.exists(b'histedit-last-edit.txt'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2152 repo.vfs.unlink(b'histedit-last-edit.txt') |
17064
168cc52ad7c2
histedit: new extension for interactive history editing
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
2153 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2154 |
38548
7b57b1ed5c0f
histedit: add --no-backup option (issue5825)
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38508
diff
changeset
|
2155 def _aborthistedit(ui, repo, state, nobackup=False): |
28130
47317570ab8c
histedit: break _histedit function into smaller pieces (add _abortaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28123
diff
changeset
|
2156 try: |
47317570ab8c
histedit: break _histedit function into smaller pieces (add _abortaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28123
diff
changeset
|
2157 state.read() |
28179
2e11f6756d9c
histedit: unifying the way replacements are computed for abort and success
Kostia Balytskyi <ikostia@fb.com>
parents:
28154
diff
changeset
|
2158 __, leafs, tmpnodes, __ = processreplacement(state) |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
2159 ui.debug(b'restore wc to old parent %s\n' % short(state.topmost)) |
28130
47317570ab8c
histedit: break _histedit function into smaller pieces (add _abortaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28123
diff
changeset
|
2160 |
47317570ab8c
histedit: break _histedit function into smaller pieces (add _abortaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28123
diff
changeset
|
2161 # Recover our old commits if necessary |
47317570ab8c
histedit: break _histedit function into smaller pieces (add _abortaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28123
diff
changeset
|
2162 if not state.topmost in repo and state.backupfile: |
31329
6ce67d3941fc
histedit: directly use repo.vfs.join
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31056
diff
changeset
|
2163 backupfile = repo.vfs.join(state.backupfile) |
28130
47317570ab8c
histedit: break _histedit function into smaller pieces (add _abortaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28123
diff
changeset
|
2164 f = hg.openpath(ui, backupfile) |
47317570ab8c
histedit: break _histedit function into smaller pieces (add _abortaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28123
diff
changeset
|
2165 gen = exchange.readbundle(ui, f, backupfile) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2166 with repo.transaction(b'histedit.abort') as tr: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2167 bundle2.applybundle( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2168 repo, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2169 gen, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2170 tr, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2171 source=b'histedit', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2172 url=b'bundle:' + backupfile, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2173 ) |
28130
47317570ab8c
histedit: break _histedit function into smaller pieces (add _abortaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28123
diff
changeset
|
2174 |
47317570ab8c
histedit: break _histedit function into smaller pieces (add _abortaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28123
diff
changeset
|
2175 os.remove(backupfile) |
47317570ab8c
histedit: break _histedit function into smaller pieces (add _abortaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28123
diff
changeset
|
2176 |
47317570ab8c
histedit: break _histedit function into smaller pieces (add _abortaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28123
diff
changeset
|
2177 # check whether we should update away |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2178 if repo.unfiltered().revs( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2179 b'parents() and (%n or %ln::)', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2180 state.parentctxnode, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2181 leafs | tmpnodes, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2182 ): |
28130
47317570ab8c
histedit: break _histedit function into smaller pieces (add _abortaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28123
diff
changeset
|
2183 hg.clean(repo, state.topmost, show_stats=True, quietempty=True) |
38548
7b57b1ed5c0f
histedit: add --no-backup option (issue5825)
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38508
diff
changeset
|
2184 cleanupnode(ui, repo, tmpnodes, nobackup=nobackup) |
7b57b1ed5c0f
histedit: add --no-backup option (issue5825)
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38508
diff
changeset
|
2185 cleanupnode(ui, repo, leafs, nobackup=nobackup) |
28130
47317570ab8c
histedit: break _histedit function into smaller pieces (add _abortaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28123
diff
changeset
|
2186 except Exception: |
47317570ab8c
histedit: break _histedit function into smaller pieces (add _abortaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28123
diff
changeset
|
2187 if state.inprogress(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2188 ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2189 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2190 b'warning: encountered an exception during histedit ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2191 b'--abort; the repository may not have been completely ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2192 b'cleaned up\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2193 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2194 ) |
28130
47317570ab8c
histedit: break _histedit function into smaller pieces (add _abortaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28123
diff
changeset
|
2195 raise |
47317570ab8c
histedit: break _histedit function into smaller pieces (add _abortaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28123
diff
changeset
|
2196 finally: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2197 state.clear() |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2198 |
28130
47317570ab8c
histedit: break _histedit function into smaller pieces (add _abortaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28123
diff
changeset
|
2199 |
42584
db5560c07a28
abort: added support for histedit
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
2200 def hgaborthistedit(ui, repo): |
db5560c07a28
abort: added support for histedit
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
2201 state = histeditstate(repo) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2202 nobackup = not ui.configbool(b'rewrite', b'backup-bundle') |
42584
db5560c07a28
abort: added support for histedit
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
2203 with repo.wlock() as wlock, repo.lock() as lock: |
db5560c07a28
abort: added support for histedit
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
2204 state.wlock = wlock |
db5560c07a28
abort: added support for histedit
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
2205 state.lock = lock |
db5560c07a28
abort: added support for histedit
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
2206 _aborthistedit(ui, repo, state, nobackup=nobackup) |
db5560c07a28
abort: added support for histedit
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
2207 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2208 |
28154
47f56b6bfed1
histedit: renaming parts to which _histedit was split
Kostia Balytskyi <ikostia@fb.com>
parents:
28153
diff
changeset
|
2209 def _edithisteditplan(ui, repo, state, rules): |
28131
5a2fb2680a39
histedit: break _histedit function into smaller pieces (add _editplanaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28130
diff
changeset
|
2210 state.read() |
5a2fb2680a39
histedit: break _histedit function into smaller pieces (add _editplanaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28130
diff
changeset
|
2211 if not rules: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2212 comment = geteditcomment( |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
2213 ui, short(state.parentctxnode), short(state.topmost) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2214 ) |
28131
5a2fb2680a39
histedit: break _histedit function into smaller pieces (add _editplanaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28130
diff
changeset
|
2215 rules = ruleeditor(repo, ui, state.actions, comment) |
5a2fb2680a39
histedit: break _histedit function into smaller pieces (add _editplanaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28130
diff
changeset
|
2216 else: |
30262
bc5d0e6fd9f3
histedit: use ui.fin to read commands from stdin
Yuya Nishihara <yuya@tcha.org>
parents:
30025
diff
changeset
|
2217 rules = _readfile(ui, rules) |
28131
5a2fb2680a39
histedit: break _histedit function into smaller pieces (add _editplanaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28130
diff
changeset
|
2218 actions = parserules(rules, state) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2219 ctxs = [repo[act.node] for act in state.actions if act.node] |
28131
5a2fb2680a39
histedit: break _histedit function into smaller pieces (add _editplanaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28130
diff
changeset
|
2220 warnverifyactions(ui, repo, actions, state, ctxs) |
5a2fb2680a39
histedit: break _histedit function into smaller pieces (add _editplanaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28130
diff
changeset
|
2221 state.actions = actions |
5a2fb2680a39
histedit: break _histedit function into smaller pieces (add _editplanaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28130
diff
changeset
|
2222 state.write() |
5a2fb2680a39
histedit: break _histedit function into smaller pieces (add _editplanaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28130
diff
changeset
|
2223 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2224 |
28154
47f56b6bfed1
histedit: renaming parts to which _histedit was split
Kostia Balytskyi <ikostia@fb.com>
parents:
28153
diff
changeset
|
2225 def _newhistedit(ui, repo, state, revs, freeargs, opts): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2226 outg = opts.get(b'outgoing') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2227 rules = opts.get(b'commands', b'') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2228 force = opts.get(b'force') |
28132
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2229 |
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2230 cmdutil.checkunfinished(repo) |
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2231 cmdutil.bailifchanged(repo) |
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2232 |
41399
5cb8158a61f7
cleanup: use p1() instead of parents() when we only need the first parent
Martin von Zweigbergk <martinvonz@google.com>
parents:
41397
diff
changeset
|
2233 topmost = repo.dirstate.p1() |
28132
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2234 if outg: |
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2235 if freeargs: |
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2236 remote = freeargs[0] |
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2237 else: |
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2238 remote = None |
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2239 root = findoutgoing(ui, repo, remote, force, opts) |
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2240 else: |
48116
5ced12cfa41b
errors: raise InputError on bad revset to revrange() iff provided by the user
Martin von Zweigbergk <martinvonz@google.com>
parents:
48054
diff
changeset
|
2241 rr = list(repo.set(b'roots(%ld)', logcmdutil.revrange(repo, revs))) |
28132
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2242 if len(rr) != 1: |
48054
f27a83399abb
histedit: use more specific exceptions for more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
48053
diff
changeset
|
2243 raise error.InputError( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2244 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2245 b'The specified revisions must have ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2246 b'exactly one common root' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2247 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2248 ) |
28132
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2249 root = rr[0].node() |
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2250 |
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2251 revs = between(repo, root, topmost, state.keep) |
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2252 if not revs: |
48054
f27a83399abb
histedit: use more specific exceptions for more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
48053
diff
changeset
|
2253 raise error.InputError( |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
2254 _(b'%s is not an ancestor of working directory') % short(root) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2255 ) |
28132
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2256 |
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2257 ctxs = [repo[r] for r in revs] |
42977
699102b10530
histedit: sniff-test for untracked file conflicts before prompting for rules
Augie Fackler <augie@google.com>
parents:
42659
diff
changeset
|
2258 |
699102b10530
histedit: sniff-test for untracked file conflicts before prompting for rules
Augie Fackler <augie@google.com>
parents:
42659
diff
changeset
|
2259 wctx = repo[None] |
699102b10530
histedit: sniff-test for untracked file conflicts before prompting for rules
Augie Fackler <augie@google.com>
parents:
42659
diff
changeset
|
2260 # Please don't ask me why `ancestors` is this value. I figured it |
699102b10530
histedit: sniff-test for untracked file conflicts before prompting for rules
Augie Fackler <augie@google.com>
parents:
42659
diff
changeset
|
2261 # out with print-debugging, not by actually understanding what the |
699102b10530
histedit: sniff-test for untracked file conflicts before prompting for rules
Augie Fackler <augie@google.com>
parents:
42659
diff
changeset
|
2262 # merge code is doing. :( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2263 ancs = [repo[b'.']] |
42977
699102b10530
histedit: sniff-test for untracked file conflicts before prompting for rules
Augie Fackler <augie@google.com>
parents:
42659
diff
changeset
|
2264 # Sniff-test to make sure we won't collide with untracked files in |
699102b10530
histedit: sniff-test for untracked file conflicts before prompting for rules
Augie Fackler <augie@google.com>
parents:
42659
diff
changeset
|
2265 # the working directory. If we don't do this, we can get a |
699102b10530
histedit: sniff-test for untracked file conflicts before prompting for rules
Augie Fackler <augie@google.com>
parents:
42659
diff
changeset
|
2266 # collision after we've started histedit and backing out gets ugly |
699102b10530
histedit: sniff-test for untracked file conflicts before prompting for rules
Augie Fackler <augie@google.com>
parents:
42659
diff
changeset
|
2267 # for everyone, especially the user. |
699102b10530
histedit: sniff-test for untracked file conflicts before prompting for rules
Augie Fackler <augie@google.com>
parents:
42659
diff
changeset
|
2268 for c in [ctxs[0].p1()] + ctxs: |
699102b10530
histedit: sniff-test for untracked file conflicts before prompting for rules
Augie Fackler <augie@google.com>
parents:
42659
diff
changeset
|
2269 try: |
699102b10530
histedit: sniff-test for untracked file conflicts before prompting for rules
Augie Fackler <augie@google.com>
parents:
42659
diff
changeset
|
2270 mergemod.calculateupdates( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2271 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2272 wctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2273 c, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2274 ancs, |
42977
699102b10530
histedit: sniff-test for untracked file conflicts before prompting for rules
Augie Fackler <augie@google.com>
parents:
42659
diff
changeset
|
2275 # These parameters were determined by print-debugging |
699102b10530
histedit: sniff-test for untracked file conflicts before prompting for rules
Augie Fackler <augie@google.com>
parents:
42659
diff
changeset
|
2276 # what happens later on inside histedit. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2277 branchmerge=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2278 force=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2279 acceptremote=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2280 followcopies=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2281 ) |
42977
699102b10530
histedit: sniff-test for untracked file conflicts before prompting for rules
Augie Fackler <augie@google.com>
parents:
42659
diff
changeset
|
2282 except error.Abort: |
48054
f27a83399abb
histedit: use more specific exceptions for more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
48053
diff
changeset
|
2283 raise error.StateError( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2284 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2285 b"untracked files in working directory conflict with files in %s" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2286 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2287 % c |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2288 ) |
42977
699102b10530
histedit: sniff-test for untracked file conflicts before prompting for rules
Augie Fackler <augie@google.com>
parents:
42659
diff
changeset
|
2289 |
28132
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2290 if not rules: |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
2291 comment = geteditcomment(ui, short(root), short(topmost)) |
28132
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2292 actions = [pick(state, r) for r in revs] |
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2293 rules = ruleeditor(repo, ui, actions, comment) |
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2294 else: |
30262
bc5d0e6fd9f3
histedit: use ui.fin to read commands from stdin
Yuya Nishihara <yuya@tcha.org>
parents:
30025
diff
changeset
|
2295 rules = _readfile(ui, rules) |
28132
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2296 actions = parserules(rules, state) |
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2297 warnverifyactions(ui, repo, actions, state, ctxs) |
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2298 |
41397
0bd56c291359
cleanup: use p1() and p2() instead of parents()[0] and parents()[1]
Martin von Zweigbergk <martinvonz@google.com>
parents:
41223
diff
changeset
|
2299 parentctxnode = repo[root].p1().node() |
28132
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2300 |
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2301 state.parentctxnode = parentctxnode |
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2302 state.actions = actions |
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2303 state.topmost = topmost |
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2304 state.replacements = [] |
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2305 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2306 ui.log( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2307 b"histedit", |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2308 b"%d actions to histedit\n", |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2309 len(actions), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2310 histedit_num_actions=len(actions), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2311 ) |
35490
784a85c87c22
histedit: add ui.log for action count
Phil Cohen <phillco@fb.com>
parents:
35414
diff
changeset
|
2312 |
28132
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2313 # Create a backup so we can always abort completely. |
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2314 backupfile = None |
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2315 if not obsolete.isenabled(repo, obsolete.createmarkersopt): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2316 backupfile = repair.backupbundle( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2317 repo, [parentctxnode], [topmost], root, b'histedit' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2318 ) |
28132
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2319 state.backupfile = backupfile |
2d09a400b495
histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com>
parents:
28131
diff
changeset
|
2320 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2321 |
29467
4c4232e51167
histedit: extract common summary code into method
Sean Farley <sean@farley.io>
parents:
29466
diff
changeset
|
2322 def _getsummary(ctx): |
49023
7bdf19f892c6
histedit: remove an unnecessary default value of `b''` for commit message
Martin von Zweigbergk <martinvonz@google.com>
parents:
49022
diff
changeset
|
2323 return stringutil.firstline(ctx.description()) |
29467
4c4232e51167
histedit: extract common summary code into method
Sean Farley <sean@farley.io>
parents:
29466
diff
changeset
|
2324 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2325 |
24774
a9d63d87b837
histedit: delete all non-actionclass related code
Durham Goode <durham@fb.com>
parents:
24773
diff
changeset
|
2326 def bootstrapcontinue(ui, state, opts): |
a9d63d87b837
histedit: delete all non-actionclass related code
Durham Goode <durham@fb.com>
parents:
24773
diff
changeset
|
2327 repo = state.repo |
32057
e5ffc91a2276
histedit: make check for unresolved conflicts explicit (issue5545)
Siddharth Agarwal <sid0@fb.com>
parents:
31638
diff
changeset
|
2328 |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44661
diff
changeset
|
2329 ms = mergestatemod.mergestate.read(repo) |
32057
e5ffc91a2276
histedit: make check for unresolved conflicts explicit (issue5545)
Siddharth Agarwal <sid0@fb.com>
parents:
31638
diff
changeset
|
2330 mergeutil.checkunresolved(ms) |
e5ffc91a2276
histedit: make check for unresolved conflicts explicit (issue5545)
Siddharth Agarwal <sid0@fb.com>
parents:
31638
diff
changeset
|
2331 |
27207
2d8dbeb2462c
histedit: change state.rules uses to state.actions
Mateusz Kwapich <mitrandir@fb.com>
parents:
27206
diff
changeset
|
2332 if state.actions: |
2d8dbeb2462c
histedit: change state.rules uses to state.actions
Mateusz Kwapich <mitrandir@fb.com>
parents:
27206
diff
changeset
|
2333 actobj = state.actions.pop(0) |
24959
3c762cceedde
histedit: fix --continue when rules are finished
Durham Goode <durham@fb.com>
parents:
24958
diff
changeset
|
2334 |
26981
cda2e980281e
histedit: extracts _isdirtywc function
liscju <piotr.listkiewicz@gmail.com>
parents:
26798
diff
changeset
|
2335 if _isdirtywc(repo): |
24959
3c762cceedde
histedit: fix --continue when rules are finished
Durham Goode <durham@fb.com>
parents:
24958
diff
changeset
|
2336 actobj.continuedirty() |
26981
cda2e980281e
histedit: extracts _isdirtywc function
liscju <piotr.listkiewicz@gmail.com>
parents:
26798
diff
changeset
|
2337 if _isdirtywc(repo): |
27084
383f10b67fd6
histedit: add abortdirty function
Mateusz Kwapich <mitrandir@fb.com>
parents:
27083
diff
changeset
|
2338 abortdirty() |
24766
cfb8f5e3ca49
histedit: integrate action class into flow
Durham Goode <durham@fb.com>
parents:
24765
diff
changeset
|
2339 |
24959
3c762cceedde
histedit: fix --continue when rules are finished
Durham Goode <durham@fb.com>
parents:
24958
diff
changeset
|
2340 parentctx, replacements = actobj.continueclean() |
17666
5b6c8f2fbda5
histedit: move `continue` logic into a dedicated function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17665
diff
changeset
|
2341 |
24959
3c762cceedde
histedit: fix --continue when rules are finished
Durham Goode <durham@fb.com>
parents:
24958
diff
changeset
|
2342 state.parentctxnode = parentctx.node() |
3c762cceedde
histedit: fix --continue when rules are finished
Durham Goode <durham@fb.com>
parents:
24958
diff
changeset
|
2343 state.replacements.extend(replacements) |
22980
b3483bc1ec8c
histedit: pass state to boostrapcontinue
David Soria Parra <davidsp@fb.com>
parents:
22979
diff
changeset
|
2344 |
b3483bc1ec8c
histedit: pass state to boostrapcontinue
David Soria Parra <davidsp@fb.com>
parents:
22979
diff
changeset
|
2345 return state |
17666
5b6c8f2fbda5
histedit: move `continue` logic into a dedicated function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17665
diff
changeset
|
2346 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2347 |
17642
bea381c16809
histedit: move `between function` outside the action logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17641
diff
changeset
|
2348 def between(repo, old, new, keep): |
bea381c16809
histedit: move `between function` outside the action logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17641
diff
changeset
|
2349 """select and validate the set of revision to edit |
bea381c16809
histedit: move `between function` outside the action logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17641
diff
changeset
|
2350 |
bea381c16809
histedit: move `between function` outside the action logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17641
diff
changeset
|
2351 When keep is false, the specified set can't have children.""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2352 revs = repo.revs(b'%n::%n', old, new) |
36413
f493829b74dd
histedit: use repo.revs() instead of repo.set() where revisions are needed
Yuya Nishihara <yuya@tcha.org>
parents:
36409
diff
changeset
|
2353 if revs and not keep: |
43933
bde97bee321f
histedit: use rewriteutil.precheck() instead of reimplementing it
Martin von Zweigbergk <martinvonz@google.com>
parents:
43793
diff
changeset
|
2354 rewriteutil.precheck(repo, revs, b'edit') |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2355 if repo.revs(b'(%ld) and merge()', revs): |
48054
f27a83399abb
histedit: use more specific exceptions for more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
48053
diff
changeset
|
2356 raise error.StateError( |
f27a83399abb
histedit: use more specific exceptions for more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
48053
diff
changeset
|
2357 _(b'cannot edit history that contains merges') |
f27a83399abb
histedit: use more specific exceptions for more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
48053
diff
changeset
|
2358 ) |
36413
f493829b74dd
histedit: use repo.revs() instead of repo.set() where revisions are needed
Yuya Nishihara <yuya@tcha.org>
parents:
36409
diff
changeset
|
2359 return pycompat.maplist(repo.changelog.node, revs) |
17642
bea381c16809
histedit: move `between function` outside the action logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17641
diff
changeset
|
2360 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2361 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2362 def ruleeditor(repo, ui, actions, editcomment=b""): |
24140
5a64b676c5d3
histedit: extract method ruleeditor
Mateusz Kwapich <mitrandir@fb.com>
parents:
24131
diff
changeset
|
2363 """open an editor to edit rules |
5a64b676c5d3
histedit: extract method ruleeditor
Mateusz Kwapich <mitrandir@fb.com>
parents:
24131
diff
changeset
|
2364 |
5a64b676c5d3
histedit: extract method ruleeditor
Mateusz Kwapich <mitrandir@fb.com>
parents:
24131
diff
changeset
|
2365 rules are in the format [ [act, ctx], ...] like in state.rules |
5a64b676c5d3
histedit: extract method ruleeditor
Mateusz Kwapich <mitrandir@fb.com>
parents:
24131
diff
changeset
|
2366 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2367 if repo.ui.configbool(b"experimental", b"histedit.autoverb"): |
29470
2ff243c415b4
histedit: move autoverb rule to the commit it matches
Sean Farley <sean@farley.io>
parents:
29469
diff
changeset
|
2368 newact = util.sortdict() |
29465
00d2bf4137e6
histedit: move autoverb logic from torule to ruleeditor
Sean Farley <sean@farley.io>
parents:
29324
diff
changeset
|
2369 for act in actions: |
00d2bf4137e6
histedit: move autoverb logic from torule to ruleeditor
Sean Farley <sean@farley.io>
parents:
29324
diff
changeset
|
2370 ctx = repo[act.node] |
29469
ffa194c3a83c
histedit: use _getsummary in ruleeditor
Sean Farley <sean@farley.io>
parents:
29468
diff
changeset
|
2371 summary = _getsummary(ctx) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2372 fword = summary.split(b' ', 1)[0].lower() |
29470
2ff243c415b4
histedit: move autoverb rule to the commit it matches
Sean Farley <sean@farley.io>
parents:
29469
diff
changeset
|
2373 added = False |
2ff243c415b4
histedit: move autoverb rule to the commit it matches
Sean Farley <sean@farley.io>
parents:
29469
diff
changeset
|
2374 |
29465
00d2bf4137e6
histedit: move autoverb logic from torule to ruleeditor
Sean Farley <sean@farley.io>
parents:
29324
diff
changeset
|
2375 # if it doesn't end with the special character '!' just skip this |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2376 if fword.endswith(b'!'): |
29465
00d2bf4137e6
histedit: move autoverb logic from torule to ruleeditor
Sean Farley <sean@farley.io>
parents:
29324
diff
changeset
|
2377 fword = fword[:-1] |
00d2bf4137e6
histedit: move autoverb logic from torule to ruleeditor
Sean Farley <sean@farley.io>
parents:
29324
diff
changeset
|
2378 if fword in primaryactions | secondaryactions | tertiaryactions: |
00d2bf4137e6
histedit: move autoverb logic from torule to ruleeditor
Sean Farley <sean@farley.io>
parents:
29324
diff
changeset
|
2379 act.verb = fword |
29470
2ff243c415b4
histedit: move autoverb rule to the commit it matches
Sean Farley <sean@farley.io>
parents:
29469
diff
changeset
|
2380 # get the target summary |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2381 tsum = summary[len(fword) + 1 :].lstrip() |
29470
2ff243c415b4
histedit: move autoverb rule to the commit it matches
Sean Farley <sean@farley.io>
parents:
29469
diff
changeset
|
2382 # safe but slow: reverse iterate over the actions so we |
2ff243c415b4
histedit: move autoverb rule to the commit it matches
Sean Farley <sean@farley.io>
parents:
29469
diff
changeset
|
2383 # don't clash on two commits having the same summary |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
2384 for na, l in reversed(list(newact.items())): |
29470
2ff243c415b4
histedit: move autoverb rule to the commit it matches
Sean Farley <sean@farley.io>
parents:
29469
diff
changeset
|
2385 actx = repo[na.node] |
2ff243c415b4
histedit: move autoverb rule to the commit it matches
Sean Farley <sean@farley.io>
parents:
29469
diff
changeset
|
2386 asum = _getsummary(actx) |
2ff243c415b4
histedit: move autoverb rule to the commit it matches
Sean Farley <sean@farley.io>
parents:
29469
diff
changeset
|
2387 if asum == tsum: |
2ff243c415b4
histedit: move autoverb rule to the commit it matches
Sean Farley <sean@farley.io>
parents:
29469
diff
changeset
|
2388 added = True |
2ff243c415b4
histedit: move autoverb rule to the commit it matches
Sean Farley <sean@farley.io>
parents:
29469
diff
changeset
|
2389 l.append(act) |
2ff243c415b4
histedit: move autoverb rule to the commit it matches
Sean Farley <sean@farley.io>
parents:
29469
diff
changeset
|
2390 break |
2ff243c415b4
histedit: move autoverb rule to the commit it matches
Sean Farley <sean@farley.io>
parents:
29469
diff
changeset
|
2391 |
2ff243c415b4
histedit: move autoverb rule to the commit it matches
Sean Farley <sean@farley.io>
parents:
29469
diff
changeset
|
2392 if not added: |
2ff243c415b4
histedit: move autoverb rule to the commit it matches
Sean Farley <sean@farley.io>
parents:
29469
diff
changeset
|
2393 newact[act] = [] |
2ff243c415b4
histedit: move autoverb rule to the commit it matches
Sean Farley <sean@farley.io>
parents:
29469
diff
changeset
|
2394 |
2ff243c415b4
histedit: move autoverb rule to the commit it matches
Sean Farley <sean@farley.io>
parents:
29469
diff
changeset
|
2395 # copy over and flatten the new list |
2ff243c415b4
histedit: move autoverb rule to the commit it matches
Sean Farley <sean@farley.io>
parents:
29469
diff
changeset
|
2396 actions = [] |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
2397 for na, l in newact.items(): |
29470
2ff243c415b4
histedit: move autoverb rule to the commit it matches
Sean Farley <sean@farley.io>
parents:
29469
diff
changeset
|
2398 actions.append(na) |
2ff243c415b4
histedit: move autoverb rule to the commit it matches
Sean Farley <sean@farley.io>
parents:
29469
diff
changeset
|
2399 actions += l |
29465
00d2bf4137e6
histedit: move autoverb logic from torule to ruleeditor
Sean Farley <sean@farley.io>
parents:
29324
diff
changeset
|
2400 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2401 rules = b'\n'.join([act.torule() for act in actions]) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2402 rules += b'\n\n' |
24140
5a64b676c5d3
histedit: extract method ruleeditor
Mateusz Kwapich <mitrandir@fb.com>
parents:
24131
diff
changeset
|
2403 rules += editcomment |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2404 rules = ui.edit( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2405 rules, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2406 ui.username(), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2407 {b'prefix': b'histedit'}, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2408 repopath=repo.path, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2409 action=b'histedit', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2410 ) |
24140
5a64b676c5d3
histedit: extract method ruleeditor
Mateusz Kwapich <mitrandir@fb.com>
parents:
24131
diff
changeset
|
2411 |
5a64b676c5d3
histedit: extract method ruleeditor
Mateusz Kwapich <mitrandir@fb.com>
parents:
24131
diff
changeset
|
2412 # Save edit rules in .hg/histedit-last-edit.txt in case |
5a64b676c5d3
histedit: extract method ruleeditor
Mateusz Kwapich <mitrandir@fb.com>
parents:
24131
diff
changeset
|
2413 # the user needs to ask for help after something |
5a64b676c5d3
histedit: extract method ruleeditor
Mateusz Kwapich <mitrandir@fb.com>
parents:
24131
diff
changeset
|
2414 # surprising happens. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2415 with repo.vfs(b'histedit-last-edit.txt', b'wb') as f: |
36168
be73fa5b42d3
histedit: modernize write of histedit-last-edit file
Augie Fackler <augie@google.com>
parents:
36167
diff
changeset
|
2416 f.write(rules) |
24140
5a64b676c5d3
histedit: extract method ruleeditor
Mateusz Kwapich <mitrandir@fb.com>
parents:
24131
diff
changeset
|
2417 |
5a64b676c5d3
histedit: extract method ruleeditor
Mateusz Kwapich <mitrandir@fb.com>
parents:
24131
diff
changeset
|
2418 return rules |
5a64b676c5d3
histedit: extract method ruleeditor
Mateusz Kwapich <mitrandir@fb.com>
parents:
24131
diff
changeset
|
2419 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2420 |
27208
994d8dced775
histedit: get rid of state.rules
Mateusz Kwapich <mitrandir@fb.com>
parents:
27207
diff
changeset
|
2421 def parserules(rules, state): |
47062
f38bf44e077f
black: make codebase compatible with black v21.4b2 and v20.8b1
Kyle Lippincott <spectral@google.com>
parents:
46941
diff
changeset
|
2422 """Read the histedit rules string and return list of action objects""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2423 rules = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2424 l |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2425 for l in (r.strip() for r in rules.splitlines()) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2426 if l and not l.startswith(b'#') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2427 ] |
27208
994d8dced775
histedit: get rid of state.rules
Mateusz Kwapich <mitrandir@fb.com>
parents:
27207
diff
changeset
|
2428 actions = [] |
17064
168cc52ad7c2
histedit: new extension for interactive history editing
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
2429 for r in rules: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2430 if b' ' not in r: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2431 raise error.ParseError(_(b'malformed line "%s"') % r) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2432 verb, rest = r.split(b' ', 1) |
27082
4898e442f392
histedit: make verification configurable
Mateusz Kwapich <mitrandir@fb.com>
parents:
27051
diff
changeset
|
2433 |
27208
994d8dced775
histedit: get rid of state.rules
Mateusz Kwapich <mitrandir@fb.com>
parents:
27207
diff
changeset
|
2434 if verb not in actiontable: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2435 raise error.ParseError(_(b'unknown action "%s"') % verb) |
27208
994d8dced775
histedit: get rid of state.rules
Mateusz Kwapich <mitrandir@fb.com>
parents:
27207
diff
changeset
|
2436 |
27082
4898e442f392
histedit: make verification configurable
Mateusz Kwapich <mitrandir@fb.com>
parents:
27051
diff
changeset
|
2437 action = actiontable[verb].fromrule(state, rest) |
27208
994d8dced775
histedit: get rid of state.rules
Mateusz Kwapich <mitrandir@fb.com>
parents:
27207
diff
changeset
|
2438 actions.append(action) |
994d8dced775
histedit: get rid of state.rules
Mateusz Kwapich <mitrandir@fb.com>
parents:
27207
diff
changeset
|
2439 return actions |
994d8dced775
histedit: get rid of state.rules
Mateusz Kwapich <mitrandir@fb.com>
parents:
27207
diff
changeset
|
2440 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2441 |
27543
ff0e4c8e642d
histedit: limit mentioning histedit-last-edit.txt
timeless <timeless@mozdev.org>
parents:
27542
diff
changeset
|
2442 def warnverifyactions(ui, repo, actions, state, ctxs): |
ff0e4c8e642d
histedit: limit mentioning histedit-last-edit.txt
timeless <timeless@mozdev.org>
parents:
27542
diff
changeset
|
2443 try: |
ff0e4c8e642d
histedit: limit mentioning histedit-last-edit.txt
timeless <timeless@mozdev.org>
parents:
27542
diff
changeset
|
2444 verifyactions(actions, state, ctxs) |
27545
a67d2e059a51
histedit: use parse-error exception for parsing
timeless <timeless@mozdev.org>
parents:
27543
diff
changeset
|
2445 except error.ParseError: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2446 if repo.vfs.exists(b'histedit-last-edit.txt'): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2447 ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2448 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2449 b'warning: histedit rules saved ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2450 b'to: .hg/histedit-last-edit.txt\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2451 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2452 ) |
27543
ff0e4c8e642d
histedit: limit mentioning histedit-last-edit.txt
timeless <timeless@mozdev.org>
parents:
27542
diff
changeset
|
2453 raise |
ff0e4c8e642d
histedit: limit mentioning histedit-last-edit.txt
timeless <timeless@mozdev.org>
parents:
27542
diff
changeset
|
2454 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2455 |
27208
994d8dced775
histedit: get rid of state.rules
Mateusz Kwapich <mitrandir@fb.com>
parents:
27207
diff
changeset
|
2456 def verifyactions(actions, state, ctxs): |
994d8dced775
histedit: get rid of state.rules
Mateusz Kwapich <mitrandir@fb.com>
parents:
27207
diff
changeset
|
2457 """Verify that there exists exactly one action per given changeset and |
994d8dced775
histedit: get rid of state.rules
Mateusz Kwapich <mitrandir@fb.com>
parents:
27207
diff
changeset
|
2458 other constraints. |
994d8dced775
histedit: get rid of state.rules
Mateusz Kwapich <mitrandir@fb.com>
parents:
27207
diff
changeset
|
2459 |
994d8dced775
histedit: get rid of state.rules
Mateusz Kwapich <mitrandir@fb.com>
parents:
27207
diff
changeset
|
2460 Will abort if there are to many or too few rules, a malformed rule, |
994d8dced775
histedit: get rid of state.rules
Mateusz Kwapich <mitrandir@fb.com>
parents:
27207
diff
changeset
|
2461 or a rule on a changeset outside of the user-given range. |
994d8dced775
histedit: get rid of state.rules
Mateusz Kwapich <mitrandir@fb.com>
parents:
27207
diff
changeset
|
2462 """ |
44452
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
44441
diff
changeset
|
2463 expected = {c.node() for c in ctxs} |
27208
994d8dced775
histedit: get rid of state.rules
Mateusz Kwapich <mitrandir@fb.com>
parents:
27207
diff
changeset
|
2464 seen = set() |
27541
69df2081aeb5
histedit: pass previous action to verify
timeless <timeless@mozdev.org>
parents:
27534
diff
changeset
|
2465 prev = None |
33762
c26a76e1af36
histedit: check first changeset for verb "roll" or "fold" (issue5498)
André Klitzing <aklitzing@gmail.com>
parents:
33486
diff
changeset
|
2466 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2467 if actions and actions[0].verb in [b'roll', b'fold']: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2468 raise error.ParseError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2469 _(b'first changeset cannot use verb "%s"') % actions[0].verb |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2470 ) |
33762
c26a76e1af36
histedit: check first changeset for verb "roll" or "fold" (issue5498)
André Klitzing <aklitzing@gmail.com>
parents:
33486
diff
changeset
|
2471 |
27208
994d8dced775
histedit: get rid of state.rules
Mateusz Kwapich <mitrandir@fb.com>
parents:
27207
diff
changeset
|
2472 for action in actions: |
29879
b566c5992e07
histedit: move constraint verification to the 'action.verify' method
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29878
diff
changeset
|
2473 action.verify(prev, expected, seen) |
27541
69df2081aeb5
histedit: pass previous action to verify
timeless <timeless@mozdev.org>
parents:
27534
diff
changeset
|
2474 prev = action |
29876
034d38b5f6fb
histedit: drop the 'nodetoverify' local variable
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29875
diff
changeset
|
2475 if action.node is not None: |
29878
d7de02efa47e
histedit: directly use node in 'verifyactions'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29877
diff
changeset
|
2476 seen.add(action.node) |
19048
1163ff06ce89
histedit: more precise user message when changeset is missing
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
19047
diff
changeset
|
2477 missing = sorted(expected - seen) # sort to stabilize output |
27414
6602a7b9deec
histedit: delete to drop
Mateusz Kwapich <mitrandir@fb.com>
parents:
27407
diff
changeset
|
2478 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2479 if state.repo.ui.configbool(b'histedit', b'dropmissing'): |
28519
518a5030acba
histedit: have dropmissing abort on empty plan
Mateusz Kwapich <mitrandir@fb.com>
parents:
28396
diff
changeset
|
2480 if len(actions) == 0: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2481 raise error.ParseError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2482 _(b'no rules provided'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2483 hint=_(b'use strip extension to remove commits'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2484 ) |
28519
518a5030acba
histedit: have dropmissing abort on empty plan
Mateusz Kwapich <mitrandir@fb.com>
parents:
28396
diff
changeset
|
2485 |
29878
d7de02efa47e
histedit: directly use node in 'verifyactions'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29877
diff
changeset
|
2486 drops = [drop(state, n) for n in missing] |
27414
6602a7b9deec
histedit: delete to drop
Mateusz Kwapich <mitrandir@fb.com>
parents:
27407
diff
changeset
|
2487 # put the in the beginning so they execute immediately and |
6602a7b9deec
histedit: delete to drop
Mateusz Kwapich <mitrandir@fb.com>
parents:
27407
diff
changeset
|
2488 # don't show in the edit-plan in the future |
6602a7b9deec
histedit: delete to drop
Mateusz Kwapich <mitrandir@fb.com>
parents:
27407
diff
changeset
|
2489 actions[:0] = drops |
6602a7b9deec
histedit: delete to drop
Mateusz Kwapich <mitrandir@fb.com>
parents:
27407
diff
changeset
|
2490 elif missing: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2491 raise error.ParseError( |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
2492 _(b'missing rules for changeset %s') % short(missing[0]), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2493 hint=_( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2494 b'use "drop %s" to discard, see also: ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2495 b"'hg help -e histedit.config'" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2496 ) |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
2497 % short(missing[0]), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2498 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2499 |
17663
c6de8c696644
histedit: extract bookmark logic in a dedicated function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17662
diff
changeset
|
2500 |
28216
eed7d8c07c20
histedit: make histedit aware of obsolescense not stored in state (issue4800)
Kostia Balytskyi <ikostia@fb.com>
parents:
28179
diff
changeset
|
2501 def adjustreplacementsfrommarkers(repo, oldreplacements): |
30332
318a24b52eeb
spelling: fixes of non-dictionary words
Mads Kiilerich <madski@unity3d.com>
parents:
30262
diff
changeset
|
2502 """Adjust replacements from obsolescence markers |
28216
eed7d8c07c20
histedit: make histedit aware of obsolescense not stored in state (issue4800)
Kostia Balytskyi <ikostia@fb.com>
parents:
28179
diff
changeset
|
2503 |
eed7d8c07c20
histedit: make histedit aware of obsolescense not stored in state (issue4800)
Kostia Balytskyi <ikostia@fb.com>
parents:
28179
diff
changeset
|
2504 Replacements structure is originally generated based on |
eed7d8c07c20
histedit: make histedit aware of obsolescense not stored in state (issue4800)
Kostia Balytskyi <ikostia@fb.com>
parents:
28179
diff
changeset
|
2505 histedit's state and does not account for changes that are |
eed7d8c07c20
histedit: make histedit aware of obsolescense not stored in state (issue4800)
Kostia Balytskyi <ikostia@fb.com>
parents:
28179
diff
changeset
|
2506 not recorded there. This function fixes that by adding |
30332
318a24b52eeb
spelling: fixes of non-dictionary words
Mads Kiilerich <madski@unity3d.com>
parents:
30262
diff
changeset
|
2507 data read from obsolescence markers""" |
28216
eed7d8c07c20
histedit: make histedit aware of obsolescense not stored in state (issue4800)
Kostia Balytskyi <ikostia@fb.com>
parents:
28179
diff
changeset
|
2508 if not obsolete.isenabled(repo, obsolete.createmarkersopt): |
eed7d8c07c20
histedit: make histedit aware of obsolescense not stored in state (issue4800)
Kostia Balytskyi <ikostia@fb.com>
parents:
28179
diff
changeset
|
2509 return oldreplacements |
eed7d8c07c20
histedit: make histedit aware of obsolescense not stored in state (issue4800)
Kostia Balytskyi <ikostia@fb.com>
parents:
28179
diff
changeset
|
2510 |
eed7d8c07c20
histedit: make histedit aware of obsolescense not stored in state (issue4800)
Kostia Balytskyi <ikostia@fb.com>
parents:
28179
diff
changeset
|
2511 unfi = repo.unfiltered() |
43568
418ca164d44c
index: use `index.get_rev` in `histedit.adjustreplacementsfrommarkers`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43548
diff
changeset
|
2512 get_rev = unfi.changelog.index.get_rev |
28224
8ec5478aa0d6
histedit: also handle locally missing nodes when reading obsolescence
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28216
diff
changeset
|
2513 obsstore = repo.obsstore |
28216
eed7d8c07c20
histedit: make histedit aware of obsolescense not stored in state (issue4800)
Kostia Balytskyi <ikostia@fb.com>
parents:
28179
diff
changeset
|
2514 newreplacements = list(oldreplacements) |
eed7d8c07c20
histedit: make histedit aware of obsolescense not stored in state (issue4800)
Kostia Balytskyi <ikostia@fb.com>
parents:
28179
diff
changeset
|
2515 oldsuccs = [r[1] for r in oldreplacements] |
eed7d8c07c20
histedit: make histedit aware of obsolescense not stored in state (issue4800)
Kostia Balytskyi <ikostia@fb.com>
parents:
28179
diff
changeset
|
2516 # successors that have already been added to succstocheck once |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2517 seensuccs = set().union( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2518 *oldsuccs |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2519 ) # create a set from an iterable of tuples |
28216
eed7d8c07c20
histedit: make histedit aware of obsolescense not stored in state (issue4800)
Kostia Balytskyi <ikostia@fb.com>
parents:
28179
diff
changeset
|
2520 succstocheck = list(seensuccs) |
eed7d8c07c20
histedit: make histedit aware of obsolescense not stored in state (issue4800)
Kostia Balytskyi <ikostia@fb.com>
parents:
28179
diff
changeset
|
2521 while succstocheck: |
eed7d8c07c20
histedit: make histedit aware of obsolescense not stored in state (issue4800)
Kostia Balytskyi <ikostia@fb.com>
parents:
28179
diff
changeset
|
2522 n = succstocheck.pop() |
43568
418ca164d44c
index: use `index.get_rev` in `histedit.adjustreplacementsfrommarkers`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43548
diff
changeset
|
2523 missing = get_rev(n) is None |
28224
8ec5478aa0d6
histedit: also handle locally missing nodes when reading obsolescence
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28216
diff
changeset
|
2524 markers = obsstore.successors.get(n, ()) |
8ec5478aa0d6
histedit: also handle locally missing nodes when reading obsolescence
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28216
diff
changeset
|
2525 if missing and not markers: |
8ec5478aa0d6
histedit: also handle locally missing nodes when reading obsolescence
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28216
diff
changeset
|
2526 # dead end, mark it as such |
28216
eed7d8c07c20
histedit: make histedit aware of obsolescense not stored in state (issue4800)
Kostia Balytskyi <ikostia@fb.com>
parents:
28179
diff
changeset
|
2527 newreplacements.append((n, ())) |
28224
8ec5478aa0d6
histedit: also handle locally missing nodes when reading obsolescence
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28216
diff
changeset
|
2528 for marker in markers: |
8ec5478aa0d6
histedit: also handle locally missing nodes when reading obsolescence
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28216
diff
changeset
|
2529 nsuccs = marker[1] |
28216
eed7d8c07c20
histedit: make histedit aware of obsolescense not stored in state (issue4800)
Kostia Balytskyi <ikostia@fb.com>
parents:
28179
diff
changeset
|
2530 newreplacements.append((n, nsuccs)) |
eed7d8c07c20
histedit: make histedit aware of obsolescense not stored in state (issue4800)
Kostia Balytskyi <ikostia@fb.com>
parents:
28179
diff
changeset
|
2531 for nsucc in nsuccs: |
eed7d8c07c20
histedit: make histedit aware of obsolescense not stored in state (issue4800)
Kostia Balytskyi <ikostia@fb.com>
parents:
28179
diff
changeset
|
2532 if nsucc not in seensuccs: |
eed7d8c07c20
histedit: make histedit aware of obsolescense not stored in state (issue4800)
Kostia Balytskyi <ikostia@fb.com>
parents:
28179
diff
changeset
|
2533 seensuccs.add(nsucc) |
eed7d8c07c20
histedit: make histedit aware of obsolescense not stored in state (issue4800)
Kostia Balytskyi <ikostia@fb.com>
parents:
28179
diff
changeset
|
2534 succstocheck.append(nsucc) |
eed7d8c07c20
histedit: make histedit aware of obsolescense not stored in state (issue4800)
Kostia Balytskyi <ikostia@fb.com>
parents:
28179
diff
changeset
|
2535 |
eed7d8c07c20
histedit: make histedit aware of obsolescense not stored in state (issue4800)
Kostia Balytskyi <ikostia@fb.com>
parents:
28179
diff
changeset
|
2536 return newreplacements |
eed7d8c07c20
histedit: make histedit aware of obsolescense not stored in state (issue4800)
Kostia Balytskyi <ikostia@fb.com>
parents:
28179
diff
changeset
|
2537 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2538 |
22985
0c14b9166da6
histedit: remove now-superfluous repo argument from processreplacement
Augie Fackler <raf@durin42.com>
parents:
22984
diff
changeset
|
2539 def processreplacement(state): |
17758
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2540 """process the list of replacements to return |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2541 |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2542 1) the final mapping between original and created nodes |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2543 2) the list of temporary node created by histedit |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2544 3) the list of new commit created by histedit""" |
28216
eed7d8c07c20
histedit: make histedit aware of obsolescense not stored in state (issue4800)
Kostia Balytskyi <ikostia@fb.com>
parents:
28179
diff
changeset
|
2545 replacements = adjustreplacementsfrommarkers(state.repo, state.replacements) |
17758
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2546 allsuccs = set() |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2547 replaced = set() |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2548 fullmapping = {} |
26039
84dcc37b1272
histedit: correct spelling etc in more comments
Augie Fackler <augie@google.com>
parents:
26038
diff
changeset
|
2549 # initialize basic set |
84dcc37b1272
histedit: correct spelling etc in more comments
Augie Fackler <augie@google.com>
parents:
26038
diff
changeset
|
2550 # fullmapping records all operations recorded in replacement |
17758
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2551 for rep in replacements: |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2552 allsuccs.update(rep[1]) |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2553 replaced.add(rep[0]) |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2554 fullmapping.setdefault(rep[0], set()).update(rep[1]) |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2555 new = allsuccs - replaced |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2556 tmpnodes = allsuccs & replaced |
26039
84dcc37b1272
histedit: correct spelling etc in more comments
Augie Fackler <augie@google.com>
parents:
26038
diff
changeset
|
2557 # Reduce content fullmapping into direct relation between original nodes |
17758
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2558 # and final node created during history edition |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2559 # Dropped changeset are replaced by an empty list |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2560 toproceed = set(fullmapping) |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2561 final = {} |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2562 while toproceed: |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2563 for x in list(toproceed): |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2564 succs = fullmapping[x] |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2565 for s in list(succs): |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2566 if s in toproceed: |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2567 # non final node with unknown closure |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2568 # We can't process this now |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2569 break |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2570 elif s in final: |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2571 # non final node, replace with closure |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2572 succs.remove(s) |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2573 succs.update(final[s]) |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2574 else: |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2575 final[x] = succs |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2576 toproceed.remove(x) |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2577 # remove tmpnodes from final mapping |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2578 for n in tmpnodes: |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2579 del final[n] |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2580 # we expect all changes involved in final to exist in the repo |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2581 # turn `final` into list (topologically sorted) |
43569
43e722fc2909
index: use `index.get_rev` in `histedit.processreplacement`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43568
diff
changeset
|
2582 get_rev = state.repo.changelog.index.get_rev |
17758
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2583 for prec, succs in final.items(): |
43569
43e722fc2909
index: use `index.get_rev` in `histedit.processreplacement`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43568
diff
changeset
|
2584 final[prec] = sorted(succs, key=get_rev) |
17663
c6de8c696644
histedit: extract bookmark logic in a dedicated function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17662
diff
changeset
|
2585 |
17758
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2586 # computed topmost element (necessary for bookmark) |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2587 if new: |
22985
0c14b9166da6
histedit: remove now-superfluous repo argument from processreplacement
Augie Fackler <raf@durin42.com>
parents:
22984
diff
changeset
|
2588 newtopmost = sorted(new, key=state.repo.changelog.rev)[-1] |
17758
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2589 elif not final: |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2590 # Nothing rewritten at all. we won't need `newtopmost` |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2591 # It is the same as `oldtopmost` and `processreplacement` know it |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2592 newtopmost = None |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2593 else: |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2594 # every body died. The newtopmost is the parent of the root. |
22985
0c14b9166da6
histedit: remove now-superfluous repo argument from processreplacement
Augie Fackler <raf@durin42.com>
parents:
22984
diff
changeset
|
2595 r = state.repo.changelog.rev |
0c14b9166da6
histedit: remove now-superfluous repo argument from processreplacement
Augie Fackler <raf@durin42.com>
parents:
22984
diff
changeset
|
2596 newtopmost = state.repo[sorted(final, key=r)[0]].p1().node() |
17758
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2597 |
5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17757
diff
changeset
|
2598 return final, tmpnodes, new, newtopmost |
17663
c6de8c696644
histedit: extract bookmark logic in a dedicated function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17662
diff
changeset
|
2599 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2600 |
33346
7aa5160bdbf5
histedit: move topmost bookmark movement to a separate function
Jun Wu <quark@fb.com>
parents:
33345
diff
changeset
|
2601 def movetopmostbookmarks(repo, oldtopmost, newtopmost): |
7aa5160bdbf5
histedit: move topmost bookmark movement to a separate function
Jun Wu <quark@fb.com>
parents:
33345
diff
changeset
|
2602 """Move bookmark from oldtopmost to newly created topmost |
7aa5160bdbf5
histedit: move topmost bookmark movement to a separate function
Jun Wu <quark@fb.com>
parents:
33345
diff
changeset
|
2603 |
7aa5160bdbf5
histedit: move topmost bookmark movement to a separate function
Jun Wu <quark@fb.com>
parents:
33345
diff
changeset
|
2604 This is arguably a feature and we may only want that for the active |
7aa5160bdbf5
histedit: move topmost bookmark movement to a separate function
Jun Wu <quark@fb.com>
parents:
33345
diff
changeset
|
2605 bookmark. But the behavior is kept compatible with the old version for now. |
7aa5160bdbf5
histedit: move topmost bookmark movement to a separate function
Jun Wu <quark@fb.com>
parents:
33345
diff
changeset
|
2606 """ |
7aa5160bdbf5
histedit: move topmost bookmark movement to a separate function
Jun Wu <quark@fb.com>
parents:
33345
diff
changeset
|
2607 if not oldtopmost or not newtopmost: |
7aa5160bdbf5
histedit: move topmost bookmark movement to a separate function
Jun Wu <quark@fb.com>
parents:
33345
diff
changeset
|
2608 return |
7aa5160bdbf5
histedit: move topmost bookmark movement to a separate function
Jun Wu <quark@fb.com>
parents:
33345
diff
changeset
|
2609 oldbmarks = repo.nodebookmarks(oldtopmost) |
7aa5160bdbf5
histedit: move topmost bookmark movement to a separate function
Jun Wu <quark@fb.com>
parents:
33345
diff
changeset
|
2610 if oldbmarks: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2611 with repo.lock(), repo.transaction(b'histedit') as tr: |
33346
7aa5160bdbf5
histedit: move topmost bookmark movement to a separate function
Jun Wu <quark@fb.com>
parents:
33345
diff
changeset
|
2612 marks = repo._bookmarks |
33486
af402f11cb9d
bookmark: use 'applychanges' when updating bookmark in histedit
Boris Feld <boris.feld@octobus.net>
parents:
33446
diff
changeset
|
2613 changes = [] |
33346
7aa5160bdbf5
histedit: move topmost bookmark movement to a separate function
Jun Wu <quark@fb.com>
parents:
33345
diff
changeset
|
2614 for name in oldbmarks: |
33486
af402f11cb9d
bookmark: use 'applychanges' when updating bookmark in histedit
Boris Feld <boris.feld@octobus.net>
parents:
33446
diff
changeset
|
2615 changes.append((name, newtopmost)) |
af402f11cb9d
bookmark: use 'applychanges' when updating bookmark in histedit
Boris Feld <boris.feld@octobus.net>
parents:
33446
diff
changeset
|
2616 marks.applychanges(repo, tr, changes) |
33346
7aa5160bdbf5
histedit: move topmost bookmark movement to a separate function
Jun Wu <quark@fb.com>
parents:
33345
diff
changeset
|
2617 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2618 |
38548
7b57b1ed5c0f
histedit: add --no-backup option (issue5825)
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38508
diff
changeset
|
2619 def cleanupnode(ui, repo, nodes, nobackup=False): |
31637
c4dd1e7c1dab
histedit: backout changeset 2b599f5468a4
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31528
diff
changeset
|
2620 """strip a group of nodes from the repository |
c4dd1e7c1dab
histedit: backout changeset 2b599f5468a4
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31528
diff
changeset
|
2621 |
c4dd1e7c1dab
histedit: backout changeset 2b599f5468a4
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31528
diff
changeset
|
2622 The set of node to strip may contains unknown nodes.""" |
c4dd1e7c1dab
histedit: backout changeset 2b599f5468a4
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31528
diff
changeset
|
2623 with repo.lock(): |
c4dd1e7c1dab
histedit: backout changeset 2b599f5468a4
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31528
diff
changeset
|
2624 # do not let filtering get in the way of the cleanse |
c4dd1e7c1dab
histedit: backout changeset 2b599f5468a4
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31528
diff
changeset
|
2625 # we should probably get rid of obsolescence marker created during the |
c4dd1e7c1dab
histedit: backout changeset 2b599f5468a4
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31528
diff
changeset
|
2626 # histedit, but we currently do not have such information. |
c4dd1e7c1dab
histedit: backout changeset 2b599f5468a4
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31528
diff
changeset
|
2627 repo = repo.unfiltered() |
c4dd1e7c1dab
histedit: backout changeset 2b599f5468a4
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31528
diff
changeset
|
2628 # Find all nodes that need to be stripped |
c4dd1e7c1dab
histedit: backout changeset 2b599f5468a4
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31528
diff
changeset
|
2629 # (we use %lr instead of %ln to silently ignore unknown items) |
43548
ccda03f6abcb
index: use `index.has_node` in `histedit.cleanupnode`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43547
diff
changeset
|
2630 has_node = repo.changelog.index.has_node |
ccda03f6abcb
index: use `index.has_node` in `histedit.cleanupnode`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43547
diff
changeset
|
2631 nodes = sorted(n for n in nodes if has_node(n)) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2632 roots = [c.node() for c in repo.set(b"roots(%ln)", nodes)] |
33349
28f75a1695fb
histedit: pass multiple nodes to strip (BC)
Jun Wu <quark@fb.com>
parents:
33348
diff
changeset
|
2633 if roots: |
38548
7b57b1ed5c0f
histedit: add --no-backup option (issue5825)
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38508
diff
changeset
|
2634 backup = not nobackup |
7b57b1ed5c0f
histedit: add --no-backup option (issue5825)
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38508
diff
changeset
|
2635 repair.strip(ui, repo, roots, backup=backup) |
31637
c4dd1e7c1dab
histedit: backout changeset 2b599f5468a4
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31528
diff
changeset
|
2636 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2637 |
24111
11d72683f3de
histedit: don't allow to strip nodes which are necessary to continue histedit
Mateusz Kwapich <mitrandir@fb.com>
parents:
24009
diff
changeset
|
2638 def stripwrapper(orig, ui, repo, nodelist, *args, **kwargs): |
43744
40db695040eb
histedit: fix an `isinstance(nodelist, str)` check for py3
Matt Harbison <matt_harbison@yahoo.com>
parents:
43376
diff
changeset
|
2639 if isinstance(nodelist, bytes): |
24111
11d72683f3de
histedit: don't allow to strip nodes which are necessary to continue histedit
Mateusz Kwapich <mitrandir@fb.com>
parents:
24009
diff
changeset
|
2640 nodelist = [nodelist] |
38786
28d8b5f49b4d
histedit: avoid repeating name of state file in a few places
Martin von Zweigbergk <martinvonz@google.com>
parents:
38783
diff
changeset
|
2641 state = histeditstate(repo) |
28d8b5f49b4d
histedit: avoid repeating name of state file in a few places
Martin von Zweigbergk <martinvonz@google.com>
parents:
38783
diff
changeset
|
2642 if state.inprogress(): |
24111
11d72683f3de
histedit: don't allow to strip nodes which are necessary to continue histedit
Mateusz Kwapich <mitrandir@fb.com>
parents:
24009
diff
changeset
|
2643 state.read() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2644 histedit_nodes = { |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2645 action.node for action in state.actions if action.node |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2646 } |
30025
4d9999e43ff7
histedit: avoid converting nodeid to context and back again
Martin von Zweigbergk <martinvonz@google.com>
parents:
29970
diff
changeset
|
2647 common_nodes = histedit_nodes & set(nodelist) |
24111
11d72683f3de
histedit: don't allow to strip nodes which are necessary to continue histedit
Mateusz Kwapich <mitrandir@fb.com>
parents:
24009
diff
changeset
|
2648 if common_nodes: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2649 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2650 _(b"histedit in progress, can't strip %s") |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
46104
diff
changeset
|
2651 % b', '.join(short(x) for x in common_nodes) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2652 ) |
24111
11d72683f3de
histedit: don't allow to strip nodes which are necessary to continue histedit
Mateusz Kwapich <mitrandir@fb.com>
parents:
24009
diff
changeset
|
2653 return orig(ui, repo, nodelist, *args, **kwargs) |
11d72683f3de
histedit: don't allow to strip nodes which are necessary to continue histedit
Mateusz Kwapich <mitrandir@fb.com>
parents:
24009
diff
changeset
|
2654 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2655 |
50781
0fbc0c978053
wrapfunction: use sysstr instead of bytes as argument in "histedit"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50302
diff
changeset
|
2656 extensions.wrapfunction(repair, 'strip', stripwrapper) |
24111
11d72683f3de
histedit: don't allow to strip nodes which are necessary to continue histedit
Mateusz Kwapich <mitrandir@fb.com>
parents:
24009
diff
changeset
|
2657 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2658 |
19215
f184fe1e2ac5
summary: add a histedit hook
Bryan O'Sullivan <bryano@fb.com>
parents:
19048
diff
changeset
|
2659 def summaryhook(ui, repo): |
38786
28d8b5f49b4d
histedit: avoid repeating name of state file in a few places
Martin von Zweigbergk <martinvonz@google.com>
parents:
38783
diff
changeset
|
2660 state = histeditstate(repo) |
28d8b5f49b4d
histedit: avoid repeating name of state file in a few places
Martin von Zweigbergk <martinvonz@google.com>
parents:
38783
diff
changeset
|
2661 if not state.inprogress(): |
19215
f184fe1e2ac5
summary: add a histedit hook
Bryan O'Sullivan <bryano@fb.com>
parents:
19048
diff
changeset
|
2662 return |
22983
a3a981563ce8
histedit: read state from histeditstate
David Soria Parra <davidsp@fb.com>
parents:
22982
diff
changeset
|
2663 state.read() |
27207
2d8dbeb2462c
histedit: change state.rules uses to state.actions
Mateusz Kwapich <mitrandir@fb.com>
parents:
27206
diff
changeset
|
2664 if state.actions: |
19215
f184fe1e2ac5
summary: add a histedit hook
Bryan O'Sullivan <bryano@fb.com>
parents:
19048
diff
changeset
|
2665 # i18n: column positioning for "hg summary" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2666 ui.write( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2667 _(b'hist: %s (histedit --continue)\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2668 % ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2669 ui.label(_(b'%d remaining'), b'histedit.remaining') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2670 % len(state.actions) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2671 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2672 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2673 |
19215
f184fe1e2ac5
summary: add a histedit hook
Bryan O'Sullivan <bryano@fb.com>
parents:
19048
diff
changeset
|
2674 |
f184fe1e2ac5
summary: add a histedit hook
Bryan O'Sullivan <bryano@fb.com>
parents:
19048
diff
changeset
|
2675 def extsetup(ui): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2676 cmdutil.summaryhooks.add(b'histedit', summaryhook) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2677 statemod.addunfinished( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2678 b'histedit', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2679 fname=b'histedit-state', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2680 allowcommit=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2681 continueflag=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2682 abortfunc=hgaborthistedit, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
2683 ) |