Mercurial > hg
annotate mercurial/crecord.py @ 28359:f6b5b041c6c9
commit: block amend while histedit is in progress (issue4800)
author | timeless <timeless@mozdev.org> |
---|---|
date | Sun, 14 Feb 2016 07:35:50 +0000 |
parents | 3d3b4ac369f2 |
children | f7874de435c5 |
rev | line source |
---|---|
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1 # stuff related specifically to patch manipulation / parsing |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
2 # |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
3 # Copyright 2008 Mark Edgington <edgimar@gmail.com> |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
4 # |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
6 # GNU General Public License version 2 or any later version. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
7 # |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
8 # This code is based on the Mark Edgington's crecord extension. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
9 # (Itself based on Bryan O'Sullivan's record extension.) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
10 |
25940
f4356e5094ba
crecord: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25821
diff
changeset
|
11 from __future__ import absolute_import |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
12 |
25940
f4356e5094ba
crecord: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25821
diff
changeset
|
13 import cStringIO |
f4356e5094ba
crecord: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25821
diff
changeset
|
14 import locale |
f4356e5094ba
crecord: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25821
diff
changeset
|
15 import os |
f4356e5094ba
crecord: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25821
diff
changeset
|
16 import re |
f4356e5094ba
crecord: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25821
diff
changeset
|
17 import signal |
f4356e5094ba
crecord: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25821
diff
changeset
|
18 import struct |
f4356e5094ba
crecord: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25821
diff
changeset
|
19 import sys |
f4356e5094ba
crecord: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25821
diff
changeset
|
20 import tempfile |
f4356e5094ba
crecord: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25821
diff
changeset
|
21 |
f4356e5094ba
crecord: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25821
diff
changeset
|
22 from .i18n import _ |
f4356e5094ba
crecord: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25821
diff
changeset
|
23 from . import ( |
f4356e5094ba
crecord: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25821
diff
changeset
|
24 encoding, |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26421
diff
changeset
|
25 error, |
25940
f4356e5094ba
crecord: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25821
diff
changeset
|
26 patch as patchmod, |
27156
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
27 util, |
25940
f4356e5094ba
crecord: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25821
diff
changeset
|
28 ) |
24314
348492ba632a
crecord: more import style
Matt Mackall <mpm@selenic.com>
parents:
24313
diff
changeset
|
29 |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
30 # This is required for ncurses to display non-ASCII characters in default user |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
31 # locale encoding correctly. --immerrr |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
32 locale.setlocale(locale.LC_ALL, '') |
24317
f559cae7892f
crecord: fiddle with vertical whitespace
Matt Mackall <mpm@selenic.com>
parents:
24316
diff
changeset
|
33 |
27528
7cc654610204
crecord: use try/except for import of curses
Sean Farley <sean@farley.io>
parents:
26781
diff
changeset
|
34 try: |
24909
d71492ca2fdd
crecord: fix mixed imports warning
Matt Harbison <matt_harbison@yahoo.com>
parents:
24840
diff
changeset
|
35 import curses |
25940
f4356e5094ba
crecord: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25821
diff
changeset
|
36 import fcntl |
f4356e5094ba
crecord: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25821
diff
changeset
|
37 import termios |
27528
7cc654610204
crecord: use try/except for import of curses
Sean Farley <sean@farley.io>
parents:
26781
diff
changeset
|
38 curses.error |
7cc654610204
crecord: use try/except for import of curses
Sean Farley <sean@farley.io>
parents:
26781
diff
changeset
|
39 fcntl.ioctl |
7cc654610204
crecord: use try/except for import of curses
Sean Farley <sean@farley.io>
parents:
26781
diff
changeset
|
40 termios.TIOCGWINSZ |
7cc654610204
crecord: use try/except for import of curses
Sean Farley <sean@farley.io>
parents:
26781
diff
changeset
|
41 except ImportError: |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
42 # I have no idea if wcurses works with crecord... |
24423
01b39e821d00
crecord: conditionalize the imports that are not available on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
24351
diff
changeset
|
43 try: |
01b39e821d00
crecord: conditionalize the imports that are not available on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
24351
diff
changeset
|
44 import wcurses as curses |
27528
7cc654610204
crecord: use try/except for import of curses
Sean Farley <sean@farley.io>
parents:
26781
diff
changeset
|
45 curses.error |
24423
01b39e821d00
crecord: conditionalize the imports that are not available on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
24351
diff
changeset
|
46 except ImportError: |
27530
ba30ef5bba95
crecord: ensure that curses is False if not imported
Sean Farley <sean@farley.io>
parents:
27529
diff
changeset
|
47 # wcurses is not shipped on Windows by default, or python is not |
ba30ef5bba95
crecord: ensure that curses is False if not imported
Sean Farley <sean@farley.io>
parents:
27529
diff
changeset
|
48 # compiled with curses |
ba30ef5bba95
crecord: ensure that curses is False if not imported
Sean Farley <sean@farley.io>
parents:
27529
diff
changeset
|
49 curses = False |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
50 |
27529
940cedaee988
crecord: add helper function to determine if we should use curses
Sean Farley <sean@farley.io>
parents:
27528
diff
changeset
|
51 def checkcurses(ui): |
940cedaee988
crecord: add helper function to determine if we should use curses
Sean Farley <sean@farley.io>
parents:
27528
diff
changeset
|
52 """Return True if the user wants to use curses |
940cedaee988
crecord: add helper function to determine if we should use curses
Sean Farley <sean@farley.io>
parents:
27528
diff
changeset
|
53 |
940cedaee988
crecord: add helper function to determine if we should use curses
Sean Farley <sean@farley.io>
parents:
27528
diff
changeset
|
54 This method returns True if curses is found (and that python is built with |
940cedaee988
crecord: add helper function to determine if we should use curses
Sean Farley <sean@farley.io>
parents:
27528
diff
changeset
|
55 it) and that the user has the correct flag for the ui. |
940cedaee988
crecord: add helper function to determine if we should use curses
Sean Farley <sean@farley.io>
parents:
27528
diff
changeset
|
56 """ |
940cedaee988
crecord: add helper function to determine if we should use curses
Sean Farley <sean@farley.io>
parents:
27528
diff
changeset
|
57 return curses and ui.configbool('experimental', 'crecord', False) |
940cedaee988
crecord: add helper function to determine if we should use curses
Sean Farley <sean@farley.io>
parents:
27528
diff
changeset
|
58 |
24316
d61aa383e2e5
crecord: fix underbar style for orig_stdout
Matt Mackall <mpm@selenic.com>
parents:
24315
diff
changeset
|
59 _origstdout = sys.__stdout__ # used by gethw() |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
60 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
61 class patchnode(object): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
62 """abstract class for patch graph nodes |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
63 (i.e. patchroot, header, hunk, hunkline) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
64 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
65 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
66 def firstchild(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
67 raise NotImplementedError("method must be implemented by subclass") |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
68 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
69 def lastchild(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
70 raise NotImplementedError("method must be implemented by subclass") |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
71 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
72 def allchildren(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
73 "Return a list of all of the direct children of this node" |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
74 raise NotImplementedError("method must be implemented by subclass") |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
75 def nextsibling(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
76 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
77 Return the closest next item of the same type where there are no items |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
78 of different types between the current item and this closest item. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
79 If no such item exists, return None. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
80 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
81 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
82 raise NotImplementedError("method must be implemented by subclass") |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
83 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
84 def prevsibling(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
85 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
86 Return the closest previous item of the same type where there are no |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
87 items of different types between the current item and this closest item. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
88 If no such item exists, return None. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
89 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
90 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
91 raise NotImplementedError("method must be implemented by subclass") |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
92 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
93 def parentitem(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
94 raise NotImplementedError("method must be implemented by subclass") |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
95 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
96 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
97 def nextitem(self, constrainlevel=True, skipfolded=True): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
98 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
99 If constrainLevel == True, return the closest next item |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
100 of the same type where there are no items of different types between |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
101 the current item and this closest item. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
102 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
103 If constrainLevel == False, then try to return the next item |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
104 closest to this item, regardless of item's type (header, hunk, or |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
105 HunkLine). |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
106 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
107 If skipFolded == True, and the current item is folded, then the child |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
108 items that are hidden due to folding will be skipped when determining |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
109 the next item. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
110 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
111 If it is not possible to get the next item, return None. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
112 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
113 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
114 try: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
115 itemfolded = self.folded |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
116 except AttributeError: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
117 itemfolded = False |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
118 if constrainlevel: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
119 return self.nextsibling() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
120 elif skipfolded and itemfolded: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
121 nextitem = self.nextsibling() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
122 if nextitem is None: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
123 try: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
124 nextitem = self.parentitem().nextsibling() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
125 except AttributeError: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
126 nextitem = None |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
127 return nextitem |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
128 else: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
129 # try child |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
130 item = self.firstchild() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
131 if item is not None: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
132 return item |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
133 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
134 # else try next sibling |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
135 item = self.nextsibling() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
136 if item is not None: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
137 return item |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
138 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
139 try: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
140 # else try parent's next sibling |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
141 item = self.parentitem().nextsibling() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
142 if item is not None: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
143 return item |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
144 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
145 # else return grandparent's next sibling (or None) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
146 return self.parentitem().parentitem().nextsibling() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
147 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
148 except AttributeError: # parent and/or grandparent was None |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
149 return None |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
150 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
151 def previtem(self, constrainlevel=True, skipfolded=True): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
152 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
153 If constrainLevel == True, return the closest previous item |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
154 of the same type where there are no items of different types between |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
155 the current item and this closest item. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
156 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
157 If constrainLevel == False, then try to return the previous item |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
158 closest to this item, regardless of item's type (header, hunk, or |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
159 HunkLine). |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
160 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
161 If skipFolded == True, and the current item is folded, then the items |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
162 that are hidden due to folding will be skipped when determining the |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
163 next item. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
164 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
165 If it is not possible to get the previous item, return None. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
166 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
167 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
168 if constrainlevel: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
169 return self.prevsibling() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
170 else: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
171 # try previous sibling's last child's last child, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
172 # else try previous sibling's last child, else try previous sibling |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
173 prevsibling = self.prevsibling() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
174 if prevsibling is not None: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
175 prevsiblinglastchild = prevsibling.lastchild() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
176 if ((prevsiblinglastchild is not None) and |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
177 not prevsibling.folded): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
178 prevsiblinglclc = prevsiblinglastchild.lastchild() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
179 if ((prevsiblinglclc is not None) and |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
180 not prevsiblinglastchild.folded): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
181 return prevsiblinglclc |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
182 else: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
183 return prevsiblinglastchild |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
184 else: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
185 return prevsibling |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
186 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
187 # try parent (or None) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
188 return self.parentitem() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
189 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
190 class patch(patchnode, list): # todo: rename patchroot |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
191 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
192 list of header objects representing the patch. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
193 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
194 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
195 def __init__(self, headerlist): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
196 self.extend(headerlist) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
197 # add parent patch object reference to each header |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
198 for header in self: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
199 header.patch = self |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
200 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
201 class uiheader(patchnode): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
202 """patch header |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
203 |
26781
1aee2ab0f902
spelling: trivial spell checking
Mads Kiilerich <madski@unity3d.com>
parents:
26587
diff
changeset
|
204 xxx shouldn't we move this to mercurial/patch.py ? |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
205 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
206 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
207 def __init__(self, header): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
208 self.nonuiheader = header |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
209 # flag to indicate whether to apply this chunk |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
210 self.applied = True |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
211 # flag which only affects the status display indicating if a node's |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
212 # children are partially applied (i.e. some applied, some not). |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
213 self.partial = False |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
214 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
215 # flag to indicate whether to display as folded/unfolded to user |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
216 self.folded = True |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
217 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
218 # list of all headers in patch |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
219 self.patch = None |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
220 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
221 # flag is False if this header was ever unfolded from initial state |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
222 self.neverunfolded = True |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
223 self.hunks = [uihunk(h, self) for h in self.hunks] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
224 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
225 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
226 def prettystr(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
227 x = cStringIO.StringIO() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
228 self.pretty(x) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
229 return x.getvalue() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
230 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
231 def nextsibling(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
232 numheadersinpatch = len(self.patch) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
233 indexofthisheader = self.patch.index(self) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
234 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
235 if indexofthisheader < numheadersinpatch - 1: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
236 nextheader = self.patch[indexofthisheader + 1] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
237 return nextheader |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
238 else: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
239 return None |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
240 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
241 def prevsibling(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
242 indexofthisheader = self.patch.index(self) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
243 if indexofthisheader > 0: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
244 previousheader = self.patch[indexofthisheader - 1] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
245 return previousheader |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
246 else: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
247 return None |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
248 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
249 def parentitem(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
250 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
251 there is no 'real' parent item of a header that can be selected, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
252 so return None. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
253 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
254 return None |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
255 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
256 def firstchild(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
257 "return the first child of this item, if one exists. otherwise None." |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
258 if len(self.hunks) > 0: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
259 return self.hunks[0] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
260 else: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
261 return None |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
262 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
263 def lastchild(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
264 "return the last child of this item, if one exists. otherwise None." |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
265 if len(self.hunks) > 0: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
266 return self.hunks[-1] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
267 else: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
268 return None |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
269 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
270 def allchildren(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
271 "return a list of all of the direct children of this node" |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
272 return self.hunks |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
273 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
274 def __getattr__(self, name): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
275 return getattr(self.nonuiheader, name) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
276 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
277 class uihunkline(patchnode): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
278 "represents a changed line in a hunk" |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
279 def __init__(self, linetext, hunk): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
280 self.linetext = linetext |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
281 self.applied = True |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
282 # the parent hunk to which this line belongs |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
283 self.hunk = hunk |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
284 # folding lines currently is not used/needed, but this flag is needed |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
285 # in the previtem method. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
286 self.folded = False |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
287 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
288 def prettystr(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
289 return self.linetext |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
290 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
291 def nextsibling(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
292 numlinesinhunk = len(self.hunk.changedlines) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
293 indexofthisline = self.hunk.changedlines.index(self) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
294 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
295 if (indexofthisline < numlinesinhunk - 1): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
296 nextline = self.hunk.changedlines[indexofthisline + 1] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
297 return nextline |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
298 else: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
299 return None |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
300 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
301 def prevsibling(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
302 indexofthisline = self.hunk.changedlines.index(self) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
303 if indexofthisline > 0: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
304 previousline = self.hunk.changedlines[indexofthisline - 1] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
305 return previousline |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
306 else: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
307 return None |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
308 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
309 def parentitem(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
310 "return the parent to the current item" |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
311 return self.hunk |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
312 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
313 def firstchild(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
314 "return the first child of this item, if one exists. otherwise None." |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
315 # hunk-lines don't have children |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
316 return None |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
317 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
318 def lastchild(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
319 "return the last child of this item, if one exists. otherwise None." |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
320 # hunk-lines don't have children |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
321 return None |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
322 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
323 class uihunk(patchnode): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
324 """ui patch hunk, wraps a hunk and keep track of ui behavior """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
325 maxcontext = 3 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
326 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
327 def __init__(self, hunk, header): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
328 self._hunk = hunk |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
329 self.changedlines = [uihunkline(line, self) for line in hunk.hunk] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
330 self.header = header |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
331 # used at end for detecting how many removed lines were un-applied |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
332 self.originalremoved = self.removed |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
333 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
334 # flag to indicate whether to display as folded/unfolded to user |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
335 self.folded = True |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
336 # flag to indicate whether to apply this chunk |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
337 self.applied = True |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
338 # flag which only affects the status display indicating if a node's |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
339 # children are partially applied (i.e. some applied, some not). |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
340 self.partial = False |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
341 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
342 def nextsibling(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
343 numhunksinheader = len(self.header.hunks) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
344 indexofthishunk = self.header.hunks.index(self) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
345 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
346 if (indexofthishunk < numhunksinheader - 1): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
347 nexthunk = self.header.hunks[indexofthishunk + 1] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
348 return nexthunk |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
349 else: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
350 return None |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
351 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
352 def prevsibling(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
353 indexofthishunk = self.header.hunks.index(self) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
354 if indexofthishunk > 0: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
355 previoushunk = self.header.hunks[indexofthishunk - 1] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
356 return previoushunk |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
357 else: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
358 return None |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
359 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
360 def parentitem(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
361 "return the parent to the current item" |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
362 return self.header |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
363 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
364 def firstchild(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
365 "return the first child of this item, if one exists. otherwise None." |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
366 if len(self.changedlines) > 0: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
367 return self.changedlines[0] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
368 else: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
369 return None |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
370 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
371 def lastchild(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
372 "return the last child of this item, if one exists. otherwise None." |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
373 if len(self.changedlines) > 0: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
374 return self.changedlines[-1] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
375 else: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
376 return None |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
377 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
378 def allchildren(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
379 "return a list of all of the direct children of this node" |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
380 return self.changedlines |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
381 def countchanges(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
382 """changedlines -> (n+,n-)""" |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
383 add = len([l for l in self.changedlines if l.applied |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
384 and l.prettystr()[0] == '+']) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
385 rem = len([l for l in self.changedlines if l.applied |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
386 and l.prettystr()[0] == '-']) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
387 return add, rem |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
388 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
389 def getfromtoline(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
390 # calculate the number of removed lines converted to context lines |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
391 removedconvertedtocontext = self.originalremoved - self.removed |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
392 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
393 contextlen = (len(self.before) + len(self.after) + |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
394 removedconvertedtocontext) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
395 if self.after and self.after[-1] == '\\ no newline at end of file\n': |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
396 contextlen -= 1 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
397 fromlen = contextlen + self.removed |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
398 tolen = contextlen + self.added |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
399 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
400 # diffutils manual, section "2.2.2.2 detailed description of unified |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
401 # format": "an empty hunk is considered to end at the line that |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
402 # precedes the hunk." |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
403 # |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
404 # so, if either of hunks is empty, decrease its line start. --immerrr |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
405 # but only do this if fromline > 0, to avoid having, e.g fromline=-1. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
406 fromline, toline = self.fromline, self.toline |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
407 if fromline != 0: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
408 if fromlen == 0: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
409 fromline -= 1 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
410 if tolen == 0: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
411 toline -= 1 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
412 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
413 fromtoline = '@@ -%d,%d +%d,%d @@%s\n' % ( |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
414 fromline, fromlen, toline, tolen, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
415 self.proc and (' ' + self.proc)) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
416 return fromtoline |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
417 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
418 def write(self, fp): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
419 # updated self.added/removed, which are used by getfromtoline() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
420 self.added, self.removed = self.countchanges() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
421 fp.write(self.getfromtoline()) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
422 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
423 hunklinelist = [] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
424 # add the following to the list: (1) all applied lines, and |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
425 # (2) all unapplied removal lines (convert these to context lines) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
426 for changedline in self.changedlines: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
427 changedlinestr = changedline.prettystr() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
428 if changedline.applied: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
429 hunklinelist.append(changedlinestr) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
430 elif changedlinestr[0] == "-": |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
431 hunklinelist.append(" " + changedlinestr[1:]) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
432 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
433 fp.write(''.join(self.before + hunklinelist + self.after)) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
434 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
435 pretty = write |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
436 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
437 def prettystr(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
438 x = cStringIO.StringIO() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
439 self.pretty(x) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
440 return x.getvalue() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
441 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
442 def __getattr__(self, name): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
443 return getattr(self._hunk, name) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
444 def __repr__(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
445 return '<hunk %r@%d>' % (self.filename(), self.fromline) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
446 |
25310
c1f5ef76d1c2
record: add an operation arguments to customize recording ui
Laurent Charignon <lcharignon@fb.com>
parents:
24909
diff
changeset
|
447 def filterpatch(ui, chunks, chunkselector, operation=None): |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
448 """interactively filter patch chunks into applied-only chunks""" |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
449 |
25359
724421cb4745
record: add default value for operation argument
Laurent Charignon <lcharignon@fb.com>
parents:
25310
diff
changeset
|
450 if operation is None: |
724421cb4745
record: add default value for operation argument
Laurent Charignon <lcharignon@fb.com>
parents:
25310
diff
changeset
|
451 operation = _('confirm') |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
452 chunks = list(chunks) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
453 # convert chunks list into structure suitable for displaying/modifying |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
454 # with curses. create a list of headers only. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
455 headers = [c for c in chunks if isinstance(c, patchmod.header)] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
456 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
457 # if there are no changed files |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
458 if len(headers) == 0: |
27321
dcdf0a52ad36
crecord: add dictionary to default return value of filterpatch
Laurent Charignon <lcharignon@fb.com>
parents:
27156
diff
changeset
|
459 return [], {} |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
460 uiheaders = [uiheader(h) for h in headers] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
461 # let user choose headers/hunks/lines, and mark their applied flags |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
462 # accordingly |
27155
8d3c5797a175
commit: add a way to return more information from the chunkselector
Laurent Charignon <lcharignon@fb.com>
parents:
26781
diff
changeset
|
463 ret = chunkselector(ui, uiheaders) |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
464 appliedhunklist = [] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
465 for hdr in uiheaders: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
466 if (hdr.applied and |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
467 (hdr.special() or len([h for h in hdr.hunks if h.applied]) > 0)): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
468 appliedhunklist.append(hdr) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
469 fixoffset = 0 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
470 for hnk in hdr.hunks: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
471 if hnk.applied: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
472 appliedhunklist.append(hnk) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
473 # adjust the 'to'-line offset of the hunk to be correct |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
474 # after de-activating some of the other hunks for this file |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
475 if fixoffset: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
476 #hnk = copy.copy(hnk) # necessary?? |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
477 hnk.toline += fixoffset |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
478 else: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
479 fixoffset += hnk.removed - hnk.added |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
480 |
27155
8d3c5797a175
commit: add a way to return more information from the chunkselector
Laurent Charignon <lcharignon@fb.com>
parents:
26781
diff
changeset
|
481 return (appliedhunklist, ret) |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
482 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
483 def gethw(): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
484 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
485 magically get the current height and width of the window (without initscr) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
486 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
487 this is a rip-off of a rip-off - taken from the bpython code. it is |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
488 useful / necessary because otherwise curses.initscr() must be called, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
489 which can leave the terminal in a nasty state after exiting. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
490 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
491 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
492 h, w = struct.unpack( |
24316
d61aa383e2e5
crecord: fix underbar style for orig_stdout
Matt Mackall <mpm@selenic.com>
parents:
24315
diff
changeset
|
493 "hhhh", fcntl.ioctl(_origstdout, termios.TIOCGWINSZ, "\000"*8))[0:2] |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
494 return h, w |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
495 |
24342
be3ab98f11e0
record: change arguments of curses recording function
Laurent Charignon <lcharignon@fb.com>
parents:
24318
diff
changeset
|
496 def chunkselector(ui, headerlist): |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
497 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
498 curses interface to get selection of chunks, and mark the applied flags |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
499 of the chosen chunks. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
500 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
501 """ |
24779
23727465ff72
record: add message when starting record's curses interface
Laurent Charignon <lcharignon@fb.com>
parents:
24492
diff
changeset
|
502 ui.write(_('starting interactive selection\n')) |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
503 chunkselector = curseschunkselector(headerlist, ui) |
25807
2cccaf937a7a
crecord: fix issue when backgrounding editor would leave artefact
Laurent Charignon <l.charignon@gmail.com>
parents:
25557
diff
changeset
|
504 f = signal.getsignal(signal.SIGTSTP) |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
505 curses.wrapper(chunkselector.main) |
25820
701d8c362aa2
crecord: add error reporting for failure in curses interface initialization
Laurent Charignon <lcharignon@fb.com>
parents:
25807
diff
changeset
|
506 if chunkselector.initerr is not None: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26421
diff
changeset
|
507 raise error.Abort(chunkselector.initerr) |
25807
2cccaf937a7a
crecord: fix issue when backgrounding editor would leave artefact
Laurent Charignon <l.charignon@gmail.com>
parents:
25557
diff
changeset
|
508 # ncurses does not restore signal handler for SIGTSTP |
2cccaf937a7a
crecord: fix issue when backgrounding editor would leave artefact
Laurent Charignon <l.charignon@gmail.com>
parents:
25557
diff
changeset
|
509 signal.signal(signal.SIGTSTP, f) |
27155
8d3c5797a175
commit: add a way to return more information from the chunkselector
Laurent Charignon <lcharignon@fb.com>
parents:
26781
diff
changeset
|
510 return chunkselector.opts |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
511 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
512 def testdecorator(testfn, f): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
513 def u(*args, **kwargs): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
514 return f(testfn, *args, **kwargs) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
515 return u |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
516 |
24342
be3ab98f11e0
record: change arguments of curses recording function
Laurent Charignon <lcharignon@fb.com>
parents:
24318
diff
changeset
|
517 def testchunkselector(testfn, ui, headerlist): |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
518 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
519 test interface to get selection of chunks, and mark the applied flags |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
520 of the chosen chunks. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
521 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
522 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
523 chunkselector = curseschunkselector(headerlist, ui) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
524 if testfn and os.path.exists(testfn): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
525 testf = open(testfn) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
526 testcommands = map(lambda x: x.rstrip('\n'), testf.readlines()) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
527 testf.close() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
528 while True: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
529 if chunkselector.handlekeypressed(testcommands.pop(0), test=True): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
530 break |
27155
8d3c5797a175
commit: add a way to return more information from the chunkselector
Laurent Charignon <lcharignon@fb.com>
parents:
26781
diff
changeset
|
531 return chunkselector.opts |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
532 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
533 class curseschunkselector(object): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
534 def __init__(self, headerlist, ui): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
535 # put the headers into a patch object |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
536 self.headerlist = patch(headerlist) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
537 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
538 self.ui = ui |
27155
8d3c5797a175
commit: add a way to return more information from the chunkselector
Laurent Charignon <lcharignon@fb.com>
parents:
26781
diff
changeset
|
539 self.opts = {} |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
540 |
25556
40f0e9e5b821
crecord: add mechanism for error reporting
Laurent Charignon <lcharignon@fb.com>
parents:
25555
diff
changeset
|
541 self.errorstr = None |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
542 # list of all chunks |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
543 self.chunklist = [] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
544 for h in headerlist: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
545 self.chunklist.append(h) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
546 self.chunklist.extend(h.hunks) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
547 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
548 # dictionary mapping (fgcolor, bgcolor) pairs to the |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
549 # corresponding curses color-pair value. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
550 self.colorpairs = {} |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
551 # maps custom nicknames of color-pairs to curses color-pair values |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
552 self.colorpairnames = {} |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
553 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
554 # the currently selected header, hunk, or hunk-line |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
555 self.currentselecteditem = self.headerlist[0] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
556 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
557 # updated when printing out patch-display -- the 'lines' here are the |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
558 # line positions *in the pad*, not on the screen. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
559 self.selecteditemstartline = 0 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
560 self.selecteditemendline = None |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
561 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
562 # define indentation levels |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
563 self.headerindentnumchars = 0 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
564 self.hunkindentnumchars = 3 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
565 self.hunklineindentnumchars = 6 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
566 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
567 # the first line of the pad to print to the screen |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
568 self.firstlineofpadtoprint = 0 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
569 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
570 # keeps track of the number of lines in the pad |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
571 self.numpadlines = None |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
572 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
573 self.numstatuslines = 2 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
574 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
575 # keep a running count of the number of lines printed to the pad |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
576 # (used for determining when the selected item begins/ends) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
577 self.linesprintedtopadsofar = 0 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
578 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
579 # the first line of the pad which is visible on the screen |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
580 self.firstlineofpadtoprint = 0 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
581 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
582 # stores optional text for a commit comment provided by the user |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
583 self.commenttext = "" |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
584 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
585 # if the last 'toggle all' command caused all changes to be applied |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
586 self.waslasttoggleallapplied = True |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
587 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
588 def uparrowevent(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
589 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
590 try to select the previous item to the current item that has the |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
591 most-indented level. for example, if a hunk is selected, try to select |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
592 the last hunkline of the hunk prior to the selected hunk. or, if |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
593 the first hunkline of a hunk is currently selected, then select the |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
594 hunk itself. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
595 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
596 if the currently selected item is already at the top of the screen, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
597 scroll the screen down to show the new-selected item. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
598 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
599 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
600 currentitem = self.currentselecteditem |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
601 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
602 nextitem = currentitem.previtem(constrainlevel=False) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
603 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
604 if nextitem is None: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
605 # if no parent item (i.e. currentitem is the first header), then |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
606 # no change... |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
607 nextitem = currentitem |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
608 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
609 self.currentselecteditem = nextitem |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
610 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
611 def uparrowshiftevent(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
612 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
613 select (if possible) the previous item on the same level as the |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
614 currently selected item. otherwise, select (if possible) the |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
615 parent-item of the currently selected item. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
616 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
617 if the currently selected item is already at the top of the screen, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
618 scroll the screen down to show the new-selected item. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
619 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
620 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
621 currentitem = self.currentselecteditem |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
622 nextitem = currentitem.previtem() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
623 # if there's no previous item on this level, try choosing the parent |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
624 if nextitem is None: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
625 nextitem = currentitem.parentitem() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
626 if nextitem is None: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
627 # if no parent item (i.e. currentitem is the first header), then |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
628 # no change... |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
629 nextitem = currentitem |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
630 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
631 self.currentselecteditem = nextitem |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
632 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
633 def downarrowevent(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
634 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
635 try to select the next item to the current item that has the |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
636 most-indented level. for example, if a hunk is selected, select |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
637 the first hunkline of the selected hunk. or, if the last hunkline of |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
638 a hunk is currently selected, then select the next hunk, if one exists, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
639 or if not, the next header if one exists. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
640 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
641 if the currently selected item is already at the bottom of the screen, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
642 scroll the screen up to show the new-selected item. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
643 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
644 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
645 #self.startprintline += 1 #debug |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
646 currentitem = self.currentselecteditem |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
647 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
648 nextitem = currentitem.nextitem(constrainlevel=False) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
649 # if there's no next item, keep the selection as-is |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
650 if nextitem is None: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
651 nextitem = currentitem |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
652 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
653 self.currentselecteditem = nextitem |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
654 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
655 def downarrowshiftevent(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
656 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
657 if the cursor is already at the bottom chunk, scroll the screen up and |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
658 move the cursor-position to the subsequent chunk. otherwise, only move |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
659 the cursor position down one chunk. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
660 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
661 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
662 # todo: update docstring |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
663 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
664 currentitem = self.currentselecteditem |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
665 nextitem = currentitem.nextitem() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
666 # if there's no previous item on this level, try choosing the parent's |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
667 # nextitem. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
668 if nextitem is None: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
669 try: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
670 nextitem = currentitem.parentitem().nextitem() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
671 except AttributeError: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
672 # parentitem returned None, so nextitem() can't be called |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
673 nextitem = None |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
674 if nextitem is None: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
675 # if no next item on parent-level, then no change... |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
676 nextitem = currentitem |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
677 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
678 self.currentselecteditem = nextitem |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
679 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
680 def rightarrowevent(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
681 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
682 select (if possible) the first of this item's child-items. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
683 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
684 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
685 currentitem = self.currentselecteditem |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
686 nextitem = currentitem.firstchild() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
687 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
688 # turn off folding if we want to show a child-item |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
689 if currentitem.folded: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
690 self.togglefolded(currentitem) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
691 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
692 if nextitem is None: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
693 # if no next item on parent-level, then no change... |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
694 nextitem = currentitem |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
695 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
696 self.currentselecteditem = nextitem |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
697 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
698 def leftarrowevent(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
699 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
700 if the current item can be folded (i.e. it is an unfolded header or |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
701 hunk), then fold it. otherwise try select (if possible) the parent |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
702 of this item. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
703 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
704 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
705 currentitem = self.currentselecteditem |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
706 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
707 # try to fold the item |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
708 if not isinstance(currentitem, uihunkline): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
709 if not currentitem.folded: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
710 self.togglefolded(item=currentitem) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
711 return |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
712 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
713 # if it can't be folded, try to select the parent item |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
714 nextitem = currentitem.parentitem() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
715 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
716 if nextitem is None: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
717 # if no item on parent-level, then no change... |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
718 nextitem = currentitem |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
719 if not nextitem.folded: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
720 self.togglefolded(item=nextitem) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
721 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
722 self.currentselecteditem = nextitem |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
723 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
724 def leftarrowshiftevent(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
725 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
726 select the header of the current item (or fold current item if the |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
727 current item is already a header). |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
728 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
729 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
730 currentitem = self.currentselecteditem |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
731 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
732 if isinstance(currentitem, uiheader): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
733 if not currentitem.folded: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
734 self.togglefolded(item=currentitem) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
735 return |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
736 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
737 # select the parent item recursively until we're at a header |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
738 while True: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
739 nextitem = currentitem.parentitem() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
740 if nextitem is None: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
741 break |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
742 else: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
743 currentitem = nextitem |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
744 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
745 self.currentselecteditem = currentitem |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
746 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
747 def updatescroll(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
748 "scroll the screen to fully show the currently-selected" |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
749 selstart = self.selecteditemstartline |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
750 selend = self.selecteditemendline |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
751 #selnumlines = selend - selstart |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
752 padstart = self.firstlineofpadtoprint |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
753 padend = padstart + self.yscreensize - self.numstatuslines - 1 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
754 # 'buffered' pad start/end values which scroll with a certain |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
755 # top/bottom context margin |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
756 padstartbuffered = padstart + 3 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
757 padendbuffered = padend - 3 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
758 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
759 if selend > padendbuffered: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
760 self.scrolllines(selend - padendbuffered) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
761 elif selstart < padstartbuffered: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
762 # negative values scroll in pgup direction |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
763 self.scrolllines(selstart - padstartbuffered) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
764 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
765 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
766 def scrolllines(self, numlines): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
767 "scroll the screen up (down) by numlines when numlines >0 (<0)." |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
768 self.firstlineofpadtoprint += numlines |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
769 if self.firstlineofpadtoprint < 0: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
770 self.firstlineofpadtoprint = 0 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
771 if self.firstlineofpadtoprint > self.numpadlines - 1: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
772 self.firstlineofpadtoprint = self.numpadlines - 1 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
773 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
774 def toggleapply(self, item=None): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
775 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
776 toggle the applied flag of the specified item. if no item is specified, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
777 toggle the flag of the currently selected item. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
778 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
779 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
780 if item is None: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
781 item = self.currentselecteditem |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
782 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
783 item.applied = not item.applied |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
784 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
785 if isinstance(item, uiheader): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
786 item.partial = False |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
787 if item.applied: |
24492
efa094701a05
record_curses: fix ui bug for newly added file
Laurent Charignon <lcharignon@fb.com>
parents:
24425
diff
changeset
|
788 # apply all its hunks |
efa094701a05
record_curses: fix ui bug for newly added file
Laurent Charignon <lcharignon@fb.com>
parents:
24425
diff
changeset
|
789 for hnk in item.hunks: |
efa094701a05
record_curses: fix ui bug for newly added file
Laurent Charignon <lcharignon@fb.com>
parents:
24425
diff
changeset
|
790 hnk.applied = True |
efa094701a05
record_curses: fix ui bug for newly added file
Laurent Charignon <lcharignon@fb.com>
parents:
24425
diff
changeset
|
791 # apply all their hunklines |
efa094701a05
record_curses: fix ui bug for newly added file
Laurent Charignon <lcharignon@fb.com>
parents:
24425
diff
changeset
|
792 for hunkline in hnk.changedlines: |
efa094701a05
record_curses: fix ui bug for newly added file
Laurent Charignon <lcharignon@fb.com>
parents:
24425
diff
changeset
|
793 hunkline.applied = True |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
794 else: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
795 # un-apply all its hunks |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
796 for hnk in item.hunks: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
797 hnk.applied = False |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
798 hnk.partial = False |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
799 # un-apply all their hunklines |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
800 for hunkline in hnk.changedlines: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
801 hunkline.applied = False |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
802 elif isinstance(item, uihunk): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
803 item.partial = False |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
804 # apply all it's hunklines |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
805 for hunkline in item.changedlines: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
806 hunkline.applied = item.applied |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
807 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
808 siblingappliedstatus = [hnk.applied for hnk in item.header.hunks] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
809 allsiblingsapplied = not (False in siblingappliedstatus) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
810 nosiblingsapplied = not (True in siblingappliedstatus) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
811 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
812 siblingspartialstatus = [hnk.partial for hnk in item.header.hunks] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
813 somesiblingspartial = (True in siblingspartialstatus) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
814 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
815 #cases where applied or partial should be removed from header |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
816 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
817 # if no 'sibling' hunks are applied (including this hunk) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
818 if nosiblingsapplied: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
819 if not item.header.special(): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
820 item.header.applied = False |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
821 item.header.partial = False |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
822 else: # some/all parent siblings are applied |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
823 item.header.applied = True |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
824 item.header.partial = (somesiblingspartial or |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
825 not allsiblingsapplied) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
826 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
827 elif isinstance(item, uihunkline): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
828 siblingappliedstatus = [ln.applied for ln in item.hunk.changedlines] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
829 allsiblingsapplied = not (False in siblingappliedstatus) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
830 nosiblingsapplied = not (True in siblingappliedstatus) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
831 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
832 # if no 'sibling' lines are applied |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
833 if nosiblingsapplied: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
834 item.hunk.applied = False |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
835 item.hunk.partial = False |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
836 elif allsiblingsapplied: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
837 item.hunk.applied = True |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
838 item.hunk.partial = False |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
839 else: # some siblings applied |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
840 item.hunk.applied = True |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
841 item.hunk.partial = True |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
842 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
843 parentsiblingsapplied = [hnk.applied for hnk |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
844 in item.hunk.header.hunks] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
845 noparentsiblingsapplied = not (True in parentsiblingsapplied) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
846 allparentsiblingsapplied = not (False in parentsiblingsapplied) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
847 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
848 parentsiblingspartial = [hnk.partial for hnk |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
849 in item.hunk.header.hunks] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
850 someparentsiblingspartial = (True in parentsiblingspartial) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
851 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
852 # if all parent hunks are not applied, un-apply header |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
853 if noparentsiblingsapplied: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
854 if not item.hunk.header.special(): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
855 item.hunk.header.applied = False |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
856 item.hunk.header.partial = False |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
857 # set the applied and partial status of the header if needed |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
858 else: # some/all parent siblings are applied |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
859 item.hunk.header.applied = True |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
860 item.hunk.header.partial = (someparentsiblingspartial or |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
861 not allparentsiblingsapplied) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
862 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
863 def toggleall(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
864 "toggle the applied flag of all items." |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
865 if self.waslasttoggleallapplied: # then unapply them this time |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
866 for item in self.headerlist: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
867 if item.applied: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
868 self.toggleapply(item) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
869 else: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
870 for item in self.headerlist: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
871 if not item.applied: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
872 self.toggleapply(item) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
873 self.waslasttoggleallapplied = not self.waslasttoggleallapplied |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
874 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
875 def togglefolded(self, item=None, foldparent=False): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
876 "toggle folded flag of specified item (defaults to currently selected)" |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
877 if item is None: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
878 item = self.currentselecteditem |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
879 if foldparent or (isinstance(item, uiheader) and item.neverunfolded): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
880 if not isinstance(item, uiheader): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
881 # we need to select the parent item in this case |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
882 self.currentselecteditem = item = item.parentitem() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
883 elif item.neverunfolded: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
884 item.neverunfolded = False |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
885 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
886 # also fold any foldable children of the parent/current item |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
887 if isinstance(item, uiheader): # the original or 'new' item |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
888 for child in item.allchildren(): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
889 child.folded = not item.folded |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
890 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
891 if isinstance(item, (uiheader, uihunk)): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
892 item.folded = not item.folded |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
893 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
894 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
895 def alignstring(self, instr, window): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
896 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
897 add whitespace to the end of a string in order to make it fill |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
898 the screen in the x direction. the current cursor position is |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
899 taken into account when making this calculation. the string can span |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
900 multiple lines. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
901 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
902 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
903 y, xstart = window.getyx() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
904 width = self.xscreensize |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
905 # turn tabs into spaces |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
906 instr = instr.expandtabs(4) |
24351
cdc4f3af2497
crecord: use colwidth instead of ucolwidth
Matt Mackall <mpm@selenic.com>
parents:
24342
diff
changeset
|
907 strwidth = encoding.colwidth(instr) |
24315
7d5f935bd705
crecord: use encoding.ucolwidth
Matt Mackall <mpm@selenic.com>
parents:
24314
diff
changeset
|
908 numspaces = (width - ((strwidth + xstart) % width) - 1) |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
909 return instr + " " * numspaces + "\n" |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
910 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
911 def printstring(self, window, text, fgcolor=None, bgcolor=None, pair=None, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
912 pairname=None, attrlist=None, towin=True, align=True, showwhtspc=False): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
913 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
914 print the string, text, with the specified colors and attributes, to |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
915 the specified curses window object. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
916 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
917 the foreground and background colors are of the form |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
918 curses.color_xxxx, where xxxx is one of: [black, blue, cyan, green, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
919 magenta, red, white, yellow]. if pairname is provided, a color |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
920 pair will be looked up in the self.colorpairnames dictionary. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
921 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
922 attrlist is a list containing text attributes in the form of |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
923 curses.a_xxxx, where xxxx can be: [bold, dim, normal, standout, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
924 underline]. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
925 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
926 if align == True, whitespace is added to the printed string such that |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
927 the string stretches to the right border of the window. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
928 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
929 if showwhtspc == True, trailing whitespace of a string is highlighted. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
930 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
931 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
932 # preprocess the text, converting tabs to spaces |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
933 text = text.expandtabs(4) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
934 # strip \n, and convert control characters to ^[char] representation |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
935 text = re.sub(r'[\x00-\x08\x0a-\x1f]', |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
936 lambda m:'^' + chr(ord(m.group()) + 64), text.strip('\n')) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
937 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
938 if pair is not None: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
939 colorpair = pair |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
940 elif pairname is not None: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
941 colorpair = self.colorpairnames[pairname] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
942 else: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
943 if fgcolor is None: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
944 fgcolor = -1 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
945 if bgcolor is None: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
946 bgcolor = -1 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
947 if (fgcolor, bgcolor) in self.colorpairs: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
948 colorpair = self.colorpairs[(fgcolor, bgcolor)] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
949 else: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
950 colorpair = self.getcolorpair(fgcolor, bgcolor) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
951 # add attributes if possible |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
952 if attrlist is None: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
953 attrlist = [] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
954 if colorpair < 256: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
955 # then it is safe to apply all attributes |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
956 for textattr in attrlist: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
957 colorpair |= textattr |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
958 else: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
959 # just apply a select few (safe?) attributes |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
960 for textattr in (curses.A_UNDERLINE, curses.A_BOLD): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
961 if textattr in attrlist: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
962 colorpair |= textattr |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
963 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
964 y, xstart = self.chunkpad.getyx() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
965 t = "" # variable for counting lines printed |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
966 # if requested, show trailing whitespace |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
967 if showwhtspc: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
968 origlen = len(text) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
969 text = text.rstrip(' \n') # tabs have already been expanded |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
970 strippedlen = len(text) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
971 numtrailingspaces = origlen - strippedlen |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
972 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
973 if towin: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
974 window.addstr(text, colorpair) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
975 t += text |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
976 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
977 if showwhtspc: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
978 wscolorpair = colorpair | curses.A_REVERSE |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
979 if towin: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
980 for i in range(numtrailingspaces): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
981 window.addch(curses.ACS_CKBOARD, wscolorpair) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
982 t += " " * numtrailingspaces |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
983 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
984 if align: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
985 if towin: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
986 extrawhitespace = self.alignstring("", window) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
987 window.addstr(extrawhitespace, colorpair) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
988 else: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
989 # need to use t, since the x position hasn't incremented |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
990 extrawhitespace = self.alignstring(t, window) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
991 t += extrawhitespace |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
992 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
993 # is reset to 0 at the beginning of printitem() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
994 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
995 linesprinted = (xstart + len(t)) / self.xscreensize |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
996 self.linesprintedtopadsofar += linesprinted |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
997 return t |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
998 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
999 def updatescreen(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1000 self.statuswin.erase() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1001 self.chunkpad.erase() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1002 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1003 printstring = self.printstring |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1004 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1005 # print out the status lines at the top |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1006 try: |
25556
40f0e9e5b821
crecord: add mechanism for error reporting
Laurent Charignon <lcharignon@fb.com>
parents:
25555
diff
changeset
|
1007 if self.errorstr is not None: |
40f0e9e5b821
crecord: add mechanism for error reporting
Laurent Charignon <lcharignon@fb.com>
parents:
25555
diff
changeset
|
1008 printstring(self.statuswin, self.errorstr, pairname='legend') |
40f0e9e5b821
crecord: add mechanism for error reporting
Laurent Charignon <lcharignon@fb.com>
parents:
25555
diff
changeset
|
1009 printstring(self.statuswin, 'Press any key to continue', |
40f0e9e5b821
crecord: add mechanism for error reporting
Laurent Charignon <lcharignon@fb.com>
parents:
25555
diff
changeset
|
1010 pairname='legend') |
40f0e9e5b821
crecord: add mechanism for error reporting
Laurent Charignon <lcharignon@fb.com>
parents:
25555
diff
changeset
|
1011 self.statuswin.refresh() |
40f0e9e5b821
crecord: add mechanism for error reporting
Laurent Charignon <lcharignon@fb.com>
parents:
25555
diff
changeset
|
1012 return |
27937
3d3b4ac369f2
crecord: fix help bar display issue (issue5063)
Laurent Charignon <lcharignon@fb.com>
parents:
27936
diff
changeset
|
1013 line1 = ("SELECT CHUNKS: (j/k/up/dn/pgup/pgdn) move cursor; " |
3d3b4ac369f2
crecord: fix help bar display issue (issue5063)
Laurent Charignon <lcharignon@fb.com>
parents:
27936
diff
changeset
|
1014 "(space/A) toggle hunk/all; (e)dit hunk;") |
3d3b4ac369f2
crecord: fix help bar display issue (issue5063)
Laurent Charignon <lcharignon@fb.com>
parents:
27936
diff
changeset
|
1015 line2 = (" (f)old/unfold; (c)onfirm applied; (q)uit; (?) help " |
3d3b4ac369f2
crecord: fix help bar display issue (issue5063)
Laurent Charignon <lcharignon@fb.com>
parents:
27936
diff
changeset
|
1016 "| [X]=hunk applied **=folded, toggle [a]mend mode") |
3d3b4ac369f2
crecord: fix help bar display issue (issue5063)
Laurent Charignon <lcharignon@fb.com>
parents:
27936
diff
changeset
|
1017 |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1018 printstring(self.statuswin, |
27937
3d3b4ac369f2
crecord: fix help bar display issue (issue5063)
Laurent Charignon <lcharignon@fb.com>
parents:
27936
diff
changeset
|
1019 util.ellipsis(line1, self.xscreensize - 1), |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1020 pairname="legend") |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1021 printstring(self.statuswin, |
27937
3d3b4ac369f2
crecord: fix help bar display issue (issue5063)
Laurent Charignon <lcharignon@fb.com>
parents:
27936
diff
changeset
|
1022 util.ellipsis(line2, self.xscreensize - 1), |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1023 pairname="legend") |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1024 except curses.error: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1025 pass |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1026 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1027 # print out the patch in the remaining part of the window |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1028 try: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1029 self.printitem() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1030 self.updatescroll() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1031 self.chunkpad.refresh(self.firstlineofpadtoprint, 0, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1032 self.numstatuslines, 0, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1033 self.yscreensize + 1 - self.numstatuslines, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1034 self.xscreensize) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1035 except curses.error: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1036 pass |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1037 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1038 # refresh([pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol]) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1039 self.statuswin.refresh() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1040 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1041 def getstatusprefixstring(self, item): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1042 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1043 create a string to prefix a line with which indicates whether 'item' |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1044 is applied and/or folded. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1045 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1046 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1047 # create checkbox string |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1048 if item.applied: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1049 if not isinstance(item, uihunkline) and item.partial: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1050 checkbox = "[~]" |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1051 else: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1052 checkbox = "[x]" |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1053 else: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1054 checkbox = "[ ]" |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1055 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1056 try: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1057 if item.folded: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1058 checkbox += "**" |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1059 if isinstance(item, uiheader): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1060 # one of "m", "a", or "d" (modified, added, deleted) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1061 filestatus = item.changetype |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1062 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1063 checkbox += filestatus + " " |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1064 else: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1065 checkbox += " " |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1066 if isinstance(item, uiheader): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1067 # add two more spaces for headers |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1068 checkbox += " " |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1069 except AttributeError: # not foldable |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1070 checkbox += " " |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1071 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1072 return checkbox |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1073 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1074 def printheader(self, header, selected=False, towin=True, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1075 ignorefolding=False): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1076 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1077 print the header to the pad. if countlines is True, don't print |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1078 anything, but just count the number of lines which would be printed. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1079 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1080 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1081 outstr = "" |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1082 text = header.prettystr() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1083 chunkindex = self.chunklist.index(header) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1084 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1085 if chunkindex != 0 and not header.folded: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1086 # add separating line before headers |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1087 outstr += self.printstring(self.chunkpad, '_' * self.xscreensize, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1088 towin=towin, align=False) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1089 # select color-pair based on if the header is selected |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1090 colorpair = self.getcolorpair(name=selected and "selected" or "normal", |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1091 attrlist=[curses.A_BOLD]) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1092 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1093 # print out each line of the chunk, expanding it to screen width |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1094 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1095 # number of characters to indent lines on this level by |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1096 indentnumchars = 0 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1097 checkbox = self.getstatusprefixstring(header) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1098 if not header.folded or ignorefolding: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1099 textlist = text.split("\n") |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1100 linestr = checkbox + textlist[0] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1101 else: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1102 linestr = checkbox + header.filename() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1103 outstr += self.printstring(self.chunkpad, linestr, pair=colorpair, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1104 towin=towin) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1105 if not header.folded or ignorefolding: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1106 if len(textlist) > 1: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1107 for line in textlist[1:]: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1108 linestr = " "*(indentnumchars + len(checkbox)) + line |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1109 outstr += self.printstring(self.chunkpad, linestr, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1110 pair=colorpair, towin=towin) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1111 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1112 return outstr |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1113 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1114 def printhunklinesbefore(self, hunk, selected=False, towin=True, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1115 ignorefolding=False): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1116 "includes start/end line indicator" |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1117 outstr = "" |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1118 # where hunk is in list of siblings |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1119 hunkindex = hunk.header.hunks.index(hunk) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1120 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1121 if hunkindex != 0: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1122 # add separating line before headers |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1123 outstr += self.printstring(self.chunkpad, ' '*self.xscreensize, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1124 towin=towin, align=False) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1125 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1126 colorpair = self.getcolorpair(name=selected and "selected" or "normal", |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1127 attrlist=[curses.A_BOLD]) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1128 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1129 # print out from-to line with checkbox |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1130 checkbox = self.getstatusprefixstring(hunk) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1131 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1132 lineprefix = " "*self.hunkindentnumchars + checkbox |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1133 frtoline = " " + hunk.getfromtoline().strip("\n") |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1134 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1135 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1136 outstr += self.printstring(self.chunkpad, lineprefix, towin=towin, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1137 align=False) # add uncolored checkbox/indent |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1138 outstr += self.printstring(self.chunkpad, frtoline, pair=colorpair, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1139 towin=towin) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1140 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1141 if hunk.folded and not ignorefolding: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1142 # skip remainder of output |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1143 return outstr |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1144 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1145 # print out lines of the chunk preceeding changed-lines |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1146 for line in hunk.before: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1147 linestr = " "*(self.hunklineindentnumchars + len(checkbox)) + line |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1148 outstr += self.printstring(self.chunkpad, linestr, towin=towin) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1149 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1150 return outstr |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1151 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1152 def printhunklinesafter(self, hunk, towin=True, ignorefolding=False): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1153 outstr = "" |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1154 if hunk.folded and not ignorefolding: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1155 return outstr |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1156 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1157 # a bit superfluous, but to avoid hard-coding indent amount |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1158 checkbox = self.getstatusprefixstring(hunk) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1159 for line in hunk.after: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1160 linestr = " "*(self.hunklineindentnumchars + len(checkbox)) + line |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1161 outstr += self.printstring(self.chunkpad, linestr, towin=towin) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1162 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1163 return outstr |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1164 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1165 def printhunkchangedline(self, hunkline, selected=False, towin=True): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1166 outstr = "" |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1167 checkbox = self.getstatusprefixstring(hunkline) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1168 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1169 linestr = hunkline.prettystr().strip("\n") |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1170 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1171 # select color-pair based on whether line is an addition/removal |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1172 if selected: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1173 colorpair = self.getcolorpair(name="selected") |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1174 elif linestr.startswith("+"): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1175 colorpair = self.getcolorpair(name="addition") |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1176 elif linestr.startswith("-"): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1177 colorpair = self.getcolorpair(name="deletion") |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1178 elif linestr.startswith("\\"): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1179 colorpair = self.getcolorpair(name="normal") |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1180 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1181 lineprefix = " "*self.hunklineindentnumchars + checkbox |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1182 outstr += self.printstring(self.chunkpad, lineprefix, towin=towin, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1183 align=False) # add uncolored checkbox/indent |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1184 outstr += self.printstring(self.chunkpad, linestr, pair=colorpair, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1185 towin=towin, showwhtspc=True) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1186 return outstr |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1187 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1188 def printitem(self, item=None, ignorefolding=False, recursechildren=True, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1189 towin=True): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1190 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1191 use __printitem() to print the the specified item.applied. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1192 if item is not specified, then print the entire patch. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1193 (hiding folded elements, etc. -- see __printitem() docstring) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1194 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1195 if item is None: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1196 item = self.headerlist |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1197 if recursechildren: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1198 self.linesprintedtopadsofar = 0 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1199 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1200 outstr = [] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1201 self.__printitem(item, ignorefolding, recursechildren, outstr, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1202 towin=towin) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1203 return ''.join(outstr) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1204 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1205 def outofdisplayedarea(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1206 y, _ = self.chunkpad.getyx() # cursor location |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1207 # * 2 here works but an optimization would be the max number of |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1208 # consecutive non selectable lines |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1209 # i.e the max number of context line for any hunk in the patch |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1210 miny = min(0, self.firstlineofpadtoprint - self.yscreensize) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1211 maxy = self.firstlineofpadtoprint + self.yscreensize * 2 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1212 return y < miny or y > maxy |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1213 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1214 def handleselection(self, item, recursechildren): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1215 selected = (item is self.currentselecteditem) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1216 if selected and recursechildren: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1217 # assumes line numbering starting from line 0 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1218 self.selecteditemstartline = self.linesprintedtopadsofar |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1219 selecteditemlines = self.getnumlinesdisplayed(item, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1220 recursechildren=False) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1221 self.selecteditemendline = (self.selecteditemstartline + |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1222 selecteditemlines - 1) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1223 return selected |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1224 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1225 def __printitem(self, item, ignorefolding, recursechildren, outstr, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1226 towin=True): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1227 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1228 recursive method for printing out patch/header/hunk/hunk-line data to |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1229 screen. also returns a string with all of the content of the displayed |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1230 patch (not including coloring, etc.). |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1231 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1232 if ignorefolding is True, then folded items are printed out. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1233 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1234 if recursechildren is False, then only print the item without its |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1235 child items. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1236 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1237 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1238 if towin and self.outofdisplayedarea(): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1239 return |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1240 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1241 selected = self.handleselection(item, recursechildren) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1242 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1243 # patch object is a list of headers |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1244 if isinstance(item, patch): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1245 if recursechildren: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1246 for hdr in item: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1247 self.__printitem(hdr, ignorefolding, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1248 recursechildren, outstr, towin) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1249 # todo: eliminate all isinstance() calls |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1250 if isinstance(item, uiheader): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1251 outstr.append(self.printheader(item, selected, towin=towin, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1252 ignorefolding=ignorefolding)) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1253 if recursechildren: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1254 for hnk in item.hunks: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1255 self.__printitem(hnk, ignorefolding, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1256 recursechildren, outstr, towin) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1257 elif (isinstance(item, uihunk) and |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1258 ((not item.header.folded) or ignorefolding)): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1259 # print the hunk data which comes before the changed-lines |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1260 outstr.append(self.printhunklinesbefore(item, selected, towin=towin, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1261 ignorefolding=ignorefolding)) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1262 if recursechildren: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1263 for l in item.changedlines: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1264 self.__printitem(l, ignorefolding, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1265 recursechildren, outstr, towin) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1266 outstr.append(self.printhunklinesafter(item, towin=towin, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1267 ignorefolding=ignorefolding)) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1268 elif (isinstance(item, uihunkline) and |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1269 ((not item.hunk.folded) or ignorefolding)): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1270 outstr.append(self.printhunkchangedline(item, selected, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1271 towin=towin)) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1272 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1273 return outstr |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1274 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1275 def getnumlinesdisplayed(self, item=None, ignorefolding=False, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1276 recursechildren=True): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1277 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1278 return the number of lines which would be displayed if the item were |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1279 to be printed to the display. the item will not be printed to the |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1280 display (pad). |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1281 if no item is given, assume the entire patch. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1282 if ignorefolding is True, folded items will be unfolded when counting |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1283 the number of lines. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1284 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1285 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1286 # temporarily disable printing to windows by printstring |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1287 patchdisplaystring = self.printitem(item, ignorefolding, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1288 recursechildren, towin=False) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1289 numlines = len(patchdisplaystring) / self.xscreensize |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1290 return numlines |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1291 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1292 def sigwinchhandler(self, n, frame): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1293 "handle window resizing" |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1294 try: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1295 curses.endwin() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1296 self.yscreensize, self.xscreensize = gethw() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1297 self.statuswin.resize(self.numstatuslines, self.xscreensize) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1298 self.numpadlines = self.getnumlinesdisplayed(ignorefolding=True) + 1 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1299 self.chunkpad = curses.newpad(self.numpadlines, self.xscreensize) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1300 # todo: try to resize commit message window if possible |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1301 except curses.error: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1302 pass |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1303 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1304 def getcolorpair(self, fgcolor=None, bgcolor=None, name=None, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1305 attrlist=None): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1306 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1307 get a curses color pair, adding it to self.colorpairs if it is not |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1308 already defined. an optional string, name, can be passed as a shortcut |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1309 for referring to the color-pair. by default, if no arguments are |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1310 specified, the white foreground / black background color-pair is |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1311 returned. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1312 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1313 it is expected that this function will be used exclusively for |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1314 initializing color pairs, and not curses.init_pair(). |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1315 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1316 attrlist is used to 'flavor' the returned color-pair. this information |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1317 is not stored in self.colorpairs. it contains attribute values like |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1318 curses.A_BOLD. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1319 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1320 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1321 if (name is not None) and name in self.colorpairnames: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1322 # then get the associated color pair and return it |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1323 colorpair = self.colorpairnames[name] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1324 else: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1325 if fgcolor is None: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1326 fgcolor = -1 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1327 if bgcolor is None: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1328 bgcolor = -1 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1329 if (fgcolor, bgcolor) in self.colorpairs: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1330 colorpair = self.colorpairs[(fgcolor, bgcolor)] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1331 else: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1332 pairindex = len(self.colorpairs) + 1 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1333 curses.init_pair(pairindex, fgcolor, bgcolor) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1334 colorpair = self.colorpairs[(fgcolor, bgcolor)] = ( |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1335 curses.color_pair(pairindex)) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1336 if name is not None: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1337 self.colorpairnames[name] = curses.color_pair(pairindex) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1338 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1339 # add attributes if possible |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1340 if attrlist is None: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1341 attrlist = [] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1342 if colorpair < 256: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1343 # then it is safe to apply all attributes |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1344 for textattr in attrlist: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1345 colorpair |= textattr |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1346 else: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1347 # just apply a select few (safe?) attributes |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1348 for textattrib in (curses.A_UNDERLINE, curses.A_BOLD): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1349 if textattrib in attrlist: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1350 colorpair |= textattrib |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1351 return colorpair |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1352 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1353 def initcolorpair(self, *args, **kwargs): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1354 "same as getcolorpair." |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1355 self.getcolorpair(*args, **kwargs) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1356 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1357 def helpwindow(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1358 "print a help window to the screen. exit after any keypress." |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1359 helptext = """ [press any key to return to the patch-display] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1360 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1361 crecord allows you to interactively choose among the changes you have made, |
24840
a5e3634ba024
record: change wording for record curses interface
Laurent Charignon <lcharignon@fb.com>
parents:
24779
diff
changeset
|
1362 and confirm only those changes you select for further processing by the command |
a5e3634ba024
record: change wording for record curses interface
Laurent Charignon <lcharignon@fb.com>
parents:
24779
diff
changeset
|
1363 you are running (commit/shelve/revert), after confirming the selected |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1364 changes, the unselected changes are still present in your working copy, so you |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1365 can use crecord multiple times to split large changes into smaller changesets. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1366 the following are valid keystrokes: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1367 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1368 [space] : (un-)select item ([~]/[x] = partly/fully applied) |
27936
fedd81659643
crecord: fix typo in the help text
Laurent Charignon <lcharignon@fb.com>
parents:
27914
diff
changeset
|
1369 A : (un-)select all items |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1370 up/down-arrow [k/j] : go to previous/next unfolded item |
25460
bd4bcfa48c9e
crecord: fix three typos introduced while moving crecord into core
Laurent Charignon <lcharignon@fb.com>
parents:
25447
diff
changeset
|
1371 pgup/pgdn [K/J] : go to previous/next item of same type |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1372 right/left-arrow [l/h] : go to child item / parent item |
25460
bd4bcfa48c9e
crecord: fix three typos introduced while moving crecord into core
Laurent Charignon <lcharignon@fb.com>
parents:
25447
diff
changeset
|
1373 shift-left-arrow [H] : go to parent header / fold selected header |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1374 f : fold / unfold item, hiding/revealing its children |
25447
093d38165e5a
crecord: fix a typo introduced when moving crecord to core
Laurent Charignon <lcharignon@fb.com>
parents:
24840
diff
changeset
|
1375 F : fold / unfold parent item and all of its ancestors |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1376 m : edit / resume editing the commit message |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1377 e : edit the currently selected hunk |
27156
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
1378 a : toggle amend mode (hg rev >= 2.2), only with commit -i |
24840
a5e3634ba024
record: change wording for record curses interface
Laurent Charignon <lcharignon@fb.com>
parents:
24779
diff
changeset
|
1379 c : confirm selected changes |
a5e3634ba024
record: change wording for record curses interface
Laurent Charignon <lcharignon@fb.com>
parents:
24779
diff
changeset
|
1380 r : review/edit and confirm selected changes |
a5e3634ba024
record: change wording for record curses interface
Laurent Charignon <lcharignon@fb.com>
parents:
24779
diff
changeset
|
1381 q : quit without confirming (no changes will be made) |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1382 ? : help (what you're currently reading)""" |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1383 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1384 helpwin = curses.newwin(self.yscreensize, 0, 0, 0) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1385 helplines = helptext.split("\n") |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1386 helplines = helplines + [" "]*( |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1387 self.yscreensize - self.numstatuslines - len(helplines) - 1) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1388 try: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1389 for line in helplines: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1390 self.printstring(helpwin, line, pairname="legend") |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1391 except curses.error: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1392 pass |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1393 helpwin.refresh() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1394 try: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1395 helpwin.getkey() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1396 except curses.error: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1397 pass |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1398 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1399 def confirmationwindow(self, windowtext): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1400 "display an informational window, then wait for and return a keypress." |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1401 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1402 confirmwin = curses.newwin(self.yscreensize, 0, 0, 0) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1403 try: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1404 lines = windowtext.split("\n") |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1405 for line in lines: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1406 self.printstring(confirmwin, line, pairname="selected") |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1407 except curses.error: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1408 pass |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1409 self.stdscr.refresh() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1410 confirmwin.refresh() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1411 try: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1412 response = chr(self.stdscr.getch()) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1413 except ValueError: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1414 response = None |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1415 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1416 return response |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1417 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1418 def confirmcommit(self, review=False): |
24840
a5e3634ba024
record: change wording for record curses interface
Laurent Charignon <lcharignon@fb.com>
parents:
24779
diff
changeset
|
1419 """ask for 'y' to be pressed to confirm selected. return True if |
a5e3634ba024
record: change wording for record curses interface
Laurent Charignon <lcharignon@fb.com>
parents:
24779
diff
changeset
|
1420 confirmed.""" |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1421 if review: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1422 confirmtext = ( |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1423 """if you answer yes to the following, the your currently chosen patch chunks |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1424 will be loaded into an editor. you may modify the patch from the editor, and |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1425 save the changes if you wish to change the patch. otherwise, you can just |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1426 close the editor without saving to accept the current patch as-is. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1427 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1428 note: don't add/remove lines unless you also modify the range information. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1429 failing to follow this rule will result in the commit aborting. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1430 |
24840
a5e3634ba024
record: change wording for record curses interface
Laurent Charignon <lcharignon@fb.com>
parents:
24779
diff
changeset
|
1431 are you sure you want to review/edit and confirm the selected changes [yn]? |
a5e3634ba024
record: change wording for record curses interface
Laurent Charignon <lcharignon@fb.com>
parents:
24779
diff
changeset
|
1432 """) |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1433 else: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1434 confirmtext = ( |
24840
a5e3634ba024
record: change wording for record curses interface
Laurent Charignon <lcharignon@fb.com>
parents:
24779
diff
changeset
|
1435 "are you sure you want to confirm the selected changes [yn]? ") |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1436 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1437 response = self.confirmationwindow(confirmtext) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1438 if response is None: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1439 response = "n" |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1440 if response.lower().startswith("y"): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1441 return True |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1442 else: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1443 return False |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1444 |
27156
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
1445 def toggleamend(self, opts, test): |
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
1446 """Toggle the amend flag. |
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
1447 |
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
1448 When the amend flag is set, a commit will modify the most recently |
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
1449 committed changeset, instead of creating a new changeset. Otherwise, a |
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
1450 new changeset will be created (the normal commit behavior). |
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
1451 |
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
1452 """ |
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
1453 try: |
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
1454 ver = float(util.version()[:3]) |
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
1455 except ValueError: |
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
1456 ver = 1 |
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
1457 if ver < 2.19: |
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
1458 msg = ("The amend option is unavailable with hg versions < 2.2\n\n" |
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
1459 "Press any key to continue.") |
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
1460 elif opts.get('amend') is None: |
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
1461 opts['amend'] = True |
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
1462 msg = ("Amend option is turned on -- commiting the currently " |
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
1463 "selected changes will not create a new changeset, but " |
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
1464 "instead update the most recently committed changeset.\n\n" |
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
1465 "Press any key to continue.") |
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
1466 elif opts.get('amend') is True: |
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
1467 opts['amend'] = None |
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
1468 msg = ("Amend option is turned off -- commiting the currently " |
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
1469 "selected changes will create a new changeset.\n\n" |
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
1470 "Press any key to continue.") |
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
1471 if not test: |
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
1472 self.confirmationwindow(msg) |
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
1473 |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1474 def recenterdisplayedarea(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1475 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1476 once we scrolled with pg up pg down we can be pointing outside of the |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1477 display zone. we print the patch with towin=False to compute the |
26781
1aee2ab0f902
spelling: trivial spell checking
Mads Kiilerich <madski@unity3d.com>
parents:
26587
diff
changeset
|
1478 location of the selected item even though it is outside of the displayed |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1479 zone and then update the scroll. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1480 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1481 self.printitem(towin=False) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1482 self.updatescroll() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1483 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1484 def toggleedit(self, item=None, test=False): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1485 """ |
26781
1aee2ab0f902
spelling: trivial spell checking
Mads Kiilerich <madski@unity3d.com>
parents:
26587
diff
changeset
|
1486 edit the currently selected chunk |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1487 """ |
25555
838fa1932ff8
crecord: extract ui refresh code after editing of hunk in a function
Laurent Charignon <lcharignon@fb.com>
parents:
25461
diff
changeset
|
1488 def updateui(self): |
838fa1932ff8
crecord: extract ui refresh code after editing of hunk in a function
Laurent Charignon <lcharignon@fb.com>
parents:
25461
diff
changeset
|
1489 self.numpadlines = self.getnumlinesdisplayed(ignorefolding=True) + 1 |
838fa1932ff8
crecord: extract ui refresh code after editing of hunk in a function
Laurent Charignon <lcharignon@fb.com>
parents:
25461
diff
changeset
|
1490 self.chunkpad = curses.newpad(self.numpadlines, self.xscreensize) |
838fa1932ff8
crecord: extract ui refresh code after editing of hunk in a function
Laurent Charignon <lcharignon@fb.com>
parents:
25461
diff
changeset
|
1491 self.updatescroll() |
838fa1932ff8
crecord: extract ui refresh code after editing of hunk in a function
Laurent Charignon <lcharignon@fb.com>
parents:
25461
diff
changeset
|
1492 self.stdscr.refresh() |
838fa1932ff8
crecord: extract ui refresh code after editing of hunk in a function
Laurent Charignon <lcharignon@fb.com>
parents:
25461
diff
changeset
|
1493 self.statuswin.refresh() |
838fa1932ff8
crecord: extract ui refresh code after editing of hunk in a function
Laurent Charignon <lcharignon@fb.com>
parents:
25461
diff
changeset
|
1494 self.stdscr.keypad(1) |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1495 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1496 def editpatchwitheditor(self, chunk): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1497 if chunk is None: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1498 self.ui.write(_('cannot edit patch for whole file')) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1499 self.ui.write("\n") |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1500 return None |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1501 if chunk.header.binary(): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1502 self.ui.write(_('cannot edit patch for binary file')) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1503 self.ui.write("\n") |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1504 return None |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1505 # patch comment based on the git one (based on comment at end of |
26421
4b0fc75f9403
urls: bulk-change primary website URLs
Matt Mackall <mpm@selenic.com>
parents:
25940
diff
changeset
|
1506 # https://mercurial-scm.org/wiki/recordextension) |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1507 phelp = '---' + _(""" |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1508 to remove '-' lines, make them ' ' lines (context). |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1509 to remove '+' lines, delete them. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1510 lines starting with # will be removed from the patch. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1511 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1512 if the patch applies cleanly, the edited hunk will immediately be |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1513 added to the record list. if it does not apply cleanly, a rejects |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1514 file will be generated: you can use that when you try again. if |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1515 all lines of the hunk are removed, then the edit is aborted and |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1516 the hunk is left unchanged. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1517 """) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1518 (patchfd, patchfn) = tempfile.mkstemp(prefix="hg-editor-", |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1519 suffix=".diff", text=True) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1520 ncpatchfp = None |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1521 try: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1522 # write the initial patch |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1523 f = os.fdopen(patchfd, "w") |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1524 chunk.header.write(f) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1525 chunk.write(f) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1526 f.write('\n'.join(['# ' + i for i in phelp.splitlines()])) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1527 f.close() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1528 # start the editor and wait for it to complete |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1529 editor = self.ui.geteditor() |
25557
52c552a05414
crecord: exit edition of hunk with non-zero status does not interrupt session
Laurent Charignon <lcharignon@fb.com>
parents:
25556
diff
changeset
|
1530 ret = self.ui.system("%s \"%s\"" % (editor, patchfn), |
52c552a05414
crecord: exit edition of hunk with non-zero status does not interrupt session
Laurent Charignon <lcharignon@fb.com>
parents:
25556
diff
changeset
|
1531 environ={'hguser': self.ui.username()}) |
52c552a05414
crecord: exit edition of hunk with non-zero status does not interrupt session
Laurent Charignon <lcharignon@fb.com>
parents:
25556
diff
changeset
|
1532 if ret != 0: |
52c552a05414
crecord: exit edition of hunk with non-zero status does not interrupt session
Laurent Charignon <lcharignon@fb.com>
parents:
25556
diff
changeset
|
1533 self.errorstr = "Editor exited with status %d" % ret |
52c552a05414
crecord: exit edition of hunk with non-zero status does not interrupt session
Laurent Charignon <lcharignon@fb.com>
parents:
25556
diff
changeset
|
1534 return None |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1535 # remove comment lines |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1536 patchfp = open(patchfn) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1537 ncpatchfp = cStringIO.StringIO() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1538 for line in patchfp: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1539 if not line.startswith('#'): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1540 ncpatchfp.write(line) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1541 patchfp.close() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1542 ncpatchfp.seek(0) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1543 newpatches = patchmod.parsepatch(ncpatchfp) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1544 finally: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1545 os.unlink(patchfn) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1546 del ncpatchfp |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1547 return newpatches |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1548 if item is None: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1549 item = self.currentselecteditem |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1550 if isinstance(item, uiheader): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1551 return |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1552 if isinstance(item, uihunkline): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1553 item = item.parentitem() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1554 if not isinstance(item, uihunk): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1555 return |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1556 |
27914
505a10b504ed
crecord: edit during hg crecord should preserve cursor position (issue5041)
Laurent Charignon <lcharignon@fb.com>
parents:
27533
diff
changeset
|
1557 # To go back to that hunk or its replacement at the end of the edit |
505a10b504ed
crecord: edit during hg crecord should preserve cursor position (issue5041)
Laurent Charignon <lcharignon@fb.com>
parents:
27533
diff
changeset
|
1558 itemindex = item.parentitem().hunks.index(item) |
505a10b504ed
crecord: edit during hg crecord should preserve cursor position (issue5041)
Laurent Charignon <lcharignon@fb.com>
parents:
27533
diff
changeset
|
1559 |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1560 beforeadded, beforeremoved = item.added, item.removed |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1561 newpatches = editpatchwitheditor(self, item) |
25557
52c552a05414
crecord: exit edition of hunk with non-zero status does not interrupt session
Laurent Charignon <lcharignon@fb.com>
parents:
25556
diff
changeset
|
1562 if newpatches is None: |
52c552a05414
crecord: exit edition of hunk with non-zero status does not interrupt session
Laurent Charignon <lcharignon@fb.com>
parents:
25556
diff
changeset
|
1563 if not test: |
52c552a05414
crecord: exit edition of hunk with non-zero status does not interrupt session
Laurent Charignon <lcharignon@fb.com>
parents:
25556
diff
changeset
|
1564 updateui(self) |
52c552a05414
crecord: exit edition of hunk with non-zero status does not interrupt session
Laurent Charignon <lcharignon@fb.com>
parents:
25556
diff
changeset
|
1565 return |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1566 header = item.header |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1567 editedhunkindex = header.hunks.index(item) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1568 hunksbefore = header.hunks[:editedhunkindex] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1569 hunksafter = header.hunks[editedhunkindex + 1:] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1570 newpatchheader = newpatches[0] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1571 newhunks = [uihunk(h, header) for h in newpatchheader.hunks] |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1572 newadded = sum([h.added for h in newhunks]) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1573 newremoved = sum([h.removed for h in newhunks]) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1574 offset = (newadded - beforeadded) - (newremoved - beforeremoved) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1575 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1576 for h in hunksafter: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1577 h.toline += offset |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1578 for h in newhunks: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1579 h.folded = False |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1580 header.hunks = hunksbefore + newhunks + hunksafter |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1581 if self.emptypatch(): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1582 header.hunks = hunksbefore + [item] + hunksafter |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1583 self.currentselecteditem = header |
27914
505a10b504ed
crecord: edit during hg crecord should preserve cursor position (issue5041)
Laurent Charignon <lcharignon@fb.com>
parents:
27533
diff
changeset
|
1584 if len(header.hunks) > itemindex: |
505a10b504ed
crecord: edit during hg crecord should preserve cursor position (issue5041)
Laurent Charignon <lcharignon@fb.com>
parents:
27533
diff
changeset
|
1585 self.currentselecteditem = header.hunks[itemindex] |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1586 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1587 if not test: |
25555
838fa1932ff8
crecord: extract ui refresh code after editing of hunk in a function
Laurent Charignon <lcharignon@fb.com>
parents:
25461
diff
changeset
|
1588 updateui(self) |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1589 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1590 def emptypatch(self): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1591 item = self.headerlist |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1592 if not item: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1593 return True |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1594 for header in item: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1595 if header.hunks: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1596 return False |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1597 return True |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1598 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1599 def handlekeypressed(self, keypressed, test=False): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1600 if keypressed in ["k", "KEY_UP"]: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1601 self.uparrowevent() |
25460
bd4bcfa48c9e
crecord: fix three typos introduced while moving crecord into core
Laurent Charignon <lcharignon@fb.com>
parents:
25447
diff
changeset
|
1602 if keypressed in ["K", "KEY_PPAGE"]: |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1603 self.uparrowshiftevent() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1604 elif keypressed in ["j", "KEY_DOWN"]: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1605 self.downarrowevent() |
25460
bd4bcfa48c9e
crecord: fix three typos introduced while moving crecord into core
Laurent Charignon <lcharignon@fb.com>
parents:
25447
diff
changeset
|
1606 elif keypressed in ["J", "KEY_NPAGE"]: |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1607 self.downarrowshiftevent() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1608 elif keypressed in ["l", "KEY_RIGHT"]: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1609 self.rightarrowevent() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1610 elif keypressed in ["h", "KEY_LEFT"]: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1611 self.leftarrowevent() |
25460
bd4bcfa48c9e
crecord: fix three typos introduced while moving crecord into core
Laurent Charignon <lcharignon@fb.com>
parents:
25447
diff
changeset
|
1612 elif keypressed in ["H", "KEY_SLEFT"]: |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1613 self.leftarrowshiftevent() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1614 elif keypressed in ["q"]: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26421
diff
changeset
|
1615 raise error.Abort(_('user quit')) |
27156
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
1616 elif keypressed in ['a']: |
55fa7c3900ae
commit: add amend mode for commit -i
Laurent Charignon <lcharignon@fb.com>
parents:
27155
diff
changeset
|
1617 self.toggleamend(self.opts, test) |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1618 elif keypressed in ["c"]: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1619 if self.confirmcommit(): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1620 return True |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1621 elif keypressed in ["r"]: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1622 if self.confirmcommit(review=True): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1623 return True |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1624 elif test and keypressed in ['X']: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1625 return True |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1626 elif keypressed in [' '] or (test and keypressed in ["TOGGLE"]): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1627 self.toggleapply() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1628 elif keypressed in ['A']: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1629 self.toggleall() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1630 elif keypressed in ['e']: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1631 self.toggleedit(test=test) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1632 elif keypressed in ["f"]: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1633 self.togglefolded() |
25447
093d38165e5a
crecord: fix a typo introduced when moving crecord to core
Laurent Charignon <lcharignon@fb.com>
parents:
24840
diff
changeset
|
1634 elif keypressed in ["F"]: |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1635 self.togglefolded(foldparent=True) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1636 elif keypressed in ["?"]: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1637 self.helpwindow() |
25419
6e62a5b3442d
crecord: fix blue artifact bug coming back from help screen
Laurent Charignon <lcharignon@fb.com>
parents:
25359
diff
changeset
|
1638 self.stdscr.clear() |
6e62a5b3442d
crecord: fix blue artifact bug coming back from help screen
Laurent Charignon <lcharignon@fb.com>
parents:
25359
diff
changeset
|
1639 self.stdscr.refresh() |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1640 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1641 def main(self, stdscr): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1642 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1643 method to be wrapped by curses.wrapper() for selecting chunks. |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1644 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1645 """ |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1646 signal.signal(signal.SIGWINCH, self.sigwinchhandler) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1647 self.stdscr = stdscr |
25820
701d8c362aa2
crecord: add error reporting for failure in curses interface initialization
Laurent Charignon <lcharignon@fb.com>
parents:
25807
diff
changeset
|
1648 # error during initialization, cannot be printed in the curses |
701d8c362aa2
crecord: add error reporting for failure in curses interface initialization
Laurent Charignon <lcharignon@fb.com>
parents:
25807
diff
changeset
|
1649 # interface, it should be printed by the calling code |
701d8c362aa2
crecord: add error reporting for failure in curses interface initialization
Laurent Charignon <lcharignon@fb.com>
parents:
25807
diff
changeset
|
1650 self.initerr = None |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1651 self.yscreensize, self.xscreensize = self.stdscr.getmaxyx() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1652 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1653 curses.start_color() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1654 curses.use_default_colors() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1655 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1656 # available colors: black, blue, cyan, green, magenta, white, yellow |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1657 # init_pair(color_id, foreground_color, background_color) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1658 self.initcolorpair(None, None, name="normal") |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1659 self.initcolorpair(curses.COLOR_WHITE, curses.COLOR_MAGENTA, |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1660 name="selected") |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1661 self.initcolorpair(curses.COLOR_RED, None, name="deletion") |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1662 self.initcolorpair(curses.COLOR_GREEN, None, name="addition") |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1663 self.initcolorpair(curses.COLOR_WHITE, curses.COLOR_BLUE, name="legend") |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1664 # newwin([height, width,] begin_y, begin_x) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1665 self.statuswin = curses.newwin(self.numstatuslines, 0, 0, 0) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1666 self.statuswin.keypad(1) # interpret arrow-key, etc. esc sequences |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1667 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1668 # figure out how much space to allocate for the chunk-pad which is |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1669 # used for displaying the patch |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1670 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1671 # stupid hack to prevent getnumlinesdisplayed from failing |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1672 self.chunkpad = curses.newpad(1, self.xscreensize) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1673 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1674 # add 1 so to account for last line text reaching end of line |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1675 self.numpadlines = self.getnumlinesdisplayed(ignorefolding=True) + 1 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1676 |
25821
d68544b69736
crecord: throws error instead of crashing for large diffs
Laurent Charignon <lcharignon@fb.com>
parents:
25820
diff
changeset
|
1677 try: |
d68544b69736
crecord: throws error instead of crashing for large diffs
Laurent Charignon <lcharignon@fb.com>
parents:
25820
diff
changeset
|
1678 self.chunkpad = curses.newpad(self.numpadlines, self.xscreensize) |
d68544b69736
crecord: throws error instead of crashing for large diffs
Laurent Charignon <lcharignon@fb.com>
parents:
25820
diff
changeset
|
1679 except curses.error: |
d68544b69736
crecord: throws error instead of crashing for large diffs
Laurent Charignon <lcharignon@fb.com>
parents:
25820
diff
changeset
|
1680 self.initerr = _('this diff is too large to be displayed') |
d68544b69736
crecord: throws error instead of crashing for large diffs
Laurent Charignon <lcharignon@fb.com>
parents:
25820
diff
changeset
|
1681 return |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1682 # initialize selecteitemendline (initial start-line is 0) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1683 self.selecteditemendline = self.getnumlinesdisplayed( |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1684 self.currentselecteditem, recursechildren=False) |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1685 |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1686 while True: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1687 self.updatescreen() |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1688 try: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1689 keypressed = self.statuswin.getkey() |
25556
40f0e9e5b821
crecord: add mechanism for error reporting
Laurent Charignon <lcharignon@fb.com>
parents:
25555
diff
changeset
|
1690 if self.errorstr is not None: |
40f0e9e5b821
crecord: add mechanism for error reporting
Laurent Charignon <lcharignon@fb.com>
parents:
25555
diff
changeset
|
1691 self.errorstr = None |
40f0e9e5b821
crecord: add mechanism for error reporting
Laurent Charignon <lcharignon@fb.com>
parents:
25555
diff
changeset
|
1692 continue |
24310
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1693 except curses.error: |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1694 keypressed = "foobar" |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1695 if self.handlekeypressed(keypressed): |
6409fb6c934d
record: add crecord's ui logic to core
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1696 break |