100 $TESTTMP/t |
100 $TESTTMP/t |
101 |
101 |
102 At the end... |
102 At the end... |
103 |
103 |
104 $ cd .. |
104 $ cd .. |
|
105 |
|
106 Status message redirection: |
|
107 |
|
108 $ hg init empty |
|
109 |
|
110 status messages are sent to stdout by default: |
|
111 |
|
112 $ hg outgoing -R t empty -Tjson 2>/dev/null |
|
113 comparing with empty |
|
114 searching for changes |
|
115 [ |
|
116 { |
|
117 "bookmarks": [], |
|
118 "branch": "default", |
|
119 "date": [0, 0], |
|
120 "desc": "test", |
|
121 "node": "acb14030fe0a21b60322c440ad2d20cf7685a376", |
|
122 "parents": ["0000000000000000000000000000000000000000"], |
|
123 "phase": "draft", |
|
124 "rev": 0, |
|
125 "tags": ["tip"], |
|
126 "user": "test" |
|
127 } |
|
128 ] |
|
129 |
|
130 which can be configured to send to stderr, so the output wouldn't be |
|
131 interleaved: |
|
132 |
|
133 $ cat <<'EOF' >> "$HGRCPATH" |
|
134 > [ui] |
|
135 > message-output = stderr |
|
136 > EOF |
|
137 $ hg outgoing -R t empty -Tjson 2>/dev/null |
|
138 [ |
|
139 { |
|
140 "bookmarks": [], |
|
141 "branch": "default", |
|
142 "date": [0, 0], |
|
143 "desc": "test", |
|
144 "node": "acb14030fe0a21b60322c440ad2d20cf7685a376", |
|
145 "parents": ["0000000000000000000000000000000000000000"], |
|
146 "phase": "draft", |
|
147 "rev": 0, |
|
148 "tags": ["tip"], |
|
149 "user": "test" |
|
150 } |
|
151 ] |
|
152 $ hg outgoing -R t empty -Tjson >/dev/null |
|
153 comparing with empty |
|
154 searching for changes |
|
155 |
|
156 this option should be turned off by HGPLAIN= since it may break scripting use: |
|
157 |
|
158 $ HGPLAIN= hg outgoing -R t empty -Tjson 2>/dev/null |
|
159 comparing with empty |
|
160 searching for changes |
|
161 [ |
|
162 { |
|
163 "bookmarks": [], |
|
164 "branch": "default", |
|
165 "date": [0, 0], |
|
166 "desc": "test", |
|
167 "node": "acb14030fe0a21b60322c440ad2d20cf7685a376", |
|
168 "parents": ["0000000000000000000000000000000000000000"], |
|
169 "phase": "draft", |
|
170 "rev": 0, |
|
171 "tags": ["tip"], |
|
172 "user": "test" |
|
173 } |
|
174 ] |
|
175 |
|
176 but still overridden by --config: |
|
177 |
|
178 $ HGPLAIN= hg outgoing -R t empty -Tjson --config ui.message-output=stderr \ |
|
179 > 2>/dev/null |
|
180 [ |
|
181 { |
|
182 "bookmarks": [], |
|
183 "branch": "default", |
|
184 "date": [0, 0], |
|
185 "desc": "test", |
|
186 "node": "acb14030fe0a21b60322c440ad2d20cf7685a376", |
|
187 "parents": ["0000000000000000000000000000000000000000"], |
|
188 "phase": "draft", |
|
189 "rev": 0, |
|
190 "tags": ["tip"], |
|
191 "user": "test" |
|
192 } |
|
193 ] |
|
194 |
|
195 Invalid ui.message-output option: |
|
196 |
|
197 $ hg log -R t --config ui.message-output=bad |
|
198 abort: invalid ui.message-output destination: bad |
|
199 [255] |
|
200 |
|
201 Underlying message streams should be updated when ui.fout/ferr are set: |
|
202 |
|
203 $ cat <<'EOF' > capui.py |
|
204 > from mercurial import pycompat, registrar |
|
205 > cmdtable = {} |
|
206 > command = registrar.command(cmdtable) |
|
207 > @command(b'capui', norepo=True) |
|
208 > def capui(ui): |
|
209 > out = ui.fout |
|
210 > ui.fout = pycompat.bytesio() |
|
211 > ui.status(b'status\n') |
|
212 > ui.ferr = pycompat.bytesio() |
|
213 > ui.warn(b'warn\n') |
|
214 > out.write(b'stdout: %s' % ui.fout.getvalue()) |
|
215 > out.write(b'stderr: %s' % ui.ferr.getvalue()) |
|
216 > EOF |
|
217 $ hg --config extensions.capui=capui.py --config ui.message-output=stdio capui |
|
218 stdout: status |
|
219 stderr: warn |