patch: make extract() a context manager (API)
Previously, this function was creating a temporary file and relying
on callers to unlink it. Yuck.
We convert the function to a context manager and tie the lifetime of
the temporary file to that of the context manager. This changed
indentation not only from the context manager, but also from the
elination of try blocks. It was just easier to split the heart of
extract() into its own function.
The single consumer of this function has been refactored to use it as
a context manager. Code for cleaning up the file in tryimportone()
has also been removed.
.. api::
``patch.extract()`` is now a context manager. Callers no longer have
to worry about deleting the temporary file it creates, as the file is
tied to the lifetime of the context manager.
Differential Revision: https://phab.mercurial-scm.org/D3306
$ hg init
$ echo 123 > a
$ hg add a
$ hg commit -m "first" a
$ mkdir sub
$ echo 321 > sub/b
$ hg add sub/b
$ hg commit -m "second" sub/b
$ cat sub/b
321
$ hg co 0
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ cat sub/b 2>/dev/null || echo "sub/b not present"
sub/b not present
$ test -d sub || echo "sub not present"
sub not present