ui: flush stderr after printing a non-chained exception for Windows
There were consistent test failures in test-bad-extension.t, because Windows
buffers stderr when redirected to a file (per the comment in ui.write_err()).
That resulted in failures like this:
--- c:/Users/Matt/Projects/hg/tests/test-bad-extension.t
+++ c:/Users/Matt/Projects/hg/tests/test-bad-extension.t.err
@@ -23,11 +23,11 @@
Traceback (most recent call last):
Exception: bit bucket overflow
*** failed to import extension badext2: No module named badext2
- Traceback (most recent call last):
- ImportError: No module named badext2
hg help [-ec] [TOPIC]
show help for a given topic or a help overview
+ Traceback (most recent call last):
+ ImportError: No module named badext2
show traceback for ImportError of hgext.name if debug is set
(note that --debug option isn't applied yet when loading extensions)
Instead of inserting another flush immediately after the print, to go along with
the one recently added prior to the print (see
3ff4b07412ad), funnel the output
through ui.write_err(). The flush prior to printing the traceback only mentions
that stdout needs to be flushed, and only stderr needs to be flushed after
printing the traceback. ui.write_err() does both for us without needing to
redocument the quirky Windows behavior. It will also clear any progress bar.
$ hg init
$ echo a > a
$ hg ci -Ama
adding a
$ hg an a
0: a
$ hg --config ui.strict=False an a
0: a
$ echo "[ui]" >> $HGRCPATH
$ echo "strict=True" >> $HGRCPATH
$ hg an a
hg: unknown command 'an'
Mercurial Distributed SCM
basic commands:
add add the specified files on the next commit
annotate show changeset information by line for each file
clone make a copy of an existing repository
commit commit the specified files or all outstanding changes
diff diff repository (or selected files)
export dump the header and diffs for one or more changesets
forget forget the specified files on the next commit
init create a new repository in the given directory
log show revision history of entire repository or files
merge merge another revision into working directory
pull pull changes from the specified source
push push changes to the specified destination
remove remove the specified files on the next commit
serve start stand-alone webserver
status show changed files in the working directory
summary summarize working directory state
update update working directory (or switch revisions)
(use "hg help" for the full list of commands or "hg -v" for details)
[255]
$ hg annotate a
0: a
should succeed - up is an alias, not an abbreviation
$ hg up
0 files updated, 0 files merged, 0 files removed, 0 files unresolved