wireprotoserver: ensure that output stream gets flushed on exception
Previously flush was happening due to Python finalizer being run on
`BufferedWriter`. With upgrade to Python 3.11 this started randomly
failing.
My guess is that the finalizer on the raw `FileIO` object may
be running before the finalizer of `BufferedWriter` has a chance to run.
At any rate, since we're not relying on finalizers in the happy case
we should also not rely on them in case of exception.
Create an empty repo:
$ hg init a
$ cd a
Try some commands:
$ hg log
$ hg grep wah
[1]
$ hg manifest
$ hg verify -q
Check the basic files created:
$ ls .hg
00changelog.i
cache
requires
store
wcache
Should be empty (except for the "basic" requires):
$ ls .hg/store
requires
Poke at a clone:
$ cd ..
$ hg clone a b
updating to branch default
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd b
$ hg verify -q
$ ls .hg
00changelog.i
branch
cache
hgrc
requires
store
wcache
Should be empty (except for the "basic" requires):
$ ls .hg/store
requires
$ cd ..