ui: look before you leap on sys.stderr.closed (and look nicer)
f83291e5643e introduced a fix if sys.stdout.closed does not exist.
This change uses a getattr with default instead of hasattr (which just calls
getattr) and accessing the attribute.
Additionally it applies the same fix for sys.stderr.closed as this is not
available in the bpython shell (reported by Roger Gammans).
% init repo1
% add a; ci
adding a
% cat .hg/store/fncache
data/a.i
% add a.i/b; ci
adding a.i/b
% cat .hg/store/fncache
data/a.i
data/a.i.hg/b.i
% add a.i.hg/c; ci
adding a.i.hg/c
% cat .hg/store/fncache
data/a.i
data/a.i.hg/b.i
data/a.i.hg.hg/c.i
% hg verify
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
3 files, 3 changesets, 3 total revisions
% rm .hg/store/fncache
% hg verify
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
data/a.i@0: missing revlog!
data/a.i.hg/c.i@2: missing revlog!
data/a.i/b.i@1: missing revlog!
3 files, 3 changesets, 3 total revisions
3 integrity errors encountered!
(first damaged changeset appears to be 0)
% non store repo
adding tst.d/foo
.hg
.hg/00changelog.i
.hg/00manifest.i
.hg/data
.hg/data/tst.d.hg
.hg/data/tst.d.hg/foo.i
.hg/dirstate
.hg/last-message.txt
.hg/requires
.hg/undo
.hg/undo.branch
.hg/undo.dirstate
% non fncache repo
adding tst.d/Foo
.hg
.hg/00changelog.i
.hg/dirstate
.hg/last-message.txt
.hg/requires
.hg/store
.hg/store/00changelog.i
.hg/store/00manifest.i
.hg/store/data
.hg/store/data/tst.d.hg
.hg/store/data/tst.d.hg/_foo.i
.hg/store/undo
.hg/undo.branch
.hg/undo.dirstate