After interrupted reinstall-all, one package is gone
Describe the bug
While troubleshooting #965, I ran reinstall-all several times, first without --verbose, then with --verbose, then a few times more until I was able to get a clean output of the behavior. During at least one of those runs, I interrupted the operation. I didn't take note of the operation that was in progress and assumed it was safe to terminate a pipx operation. I've since closed my terminal, so I no longer have a meaningful record of what transpired, but I can confirm that the tox executable is missing as is the virtualenv in ~/.local/pipx/venvs.
It's possible I had tox installed with nothing else, so it's straightforward to reinstall with pipx install tox, but I don't recall if I had other state configured in that environment (injected packages, ...).
How to reproduce
I haven't yet attempted to reproduce it. I'd like to get feedback about the expected behavior first.
Expected behavior
pipx operations should be interrupt-safe (rolled back if cancelled) or should warn the user (maybe even prompt) if an irreversible operation has taken place but its replacement has been cancelled. Such a message should include state that is otherwise lost (what packages were injected in that pipx env).
Example output for this:
➜ ~ pipx reinstall-all
uninstalled epr-reader! ✨ 🌟 ✨
installed package epr-reader 2.4.15, installed using Python 3.9.2
These apps are now globally available
- epr
done! ✨ 🌟 ✨
uninstalled semantra! ✨ 🌟 ✨
installed package semantra 0.1.6, installed using Python 3.9.2
These apps are now globally available
- semantra
done! ✨ 🌟 ✨
uninstalled maturin! ✨ 🌟 ✨
^C
➜ ~ maturin
zsh: command not found: maturin
PR welcome.