rewind: add --keep flag that "doesn't modify working directory"
The actual logic is more complicated than the flag description, but it's
sufficiently similar to other --keep flags in action.
Unlike strip (or prune), rewind always needs to modify the working directory to
commit new revisions that "revive" old ones [1], see _revive_revision() (and
rewriteutil.rewrite()). Because of that we don't prevent rewind from modifying
wdir, but instead use hg.updaterepo() to update to the old changeset after the
"revival" process is complete. Then we rebuild the dirstate based on the commit
that rewind would update to without --keep.
Since dirstate.rebuild() doesn't restore status of some files (added, removed,
also copies and renames), we rely on cmdutil.revert(). It's a fairly crude
solution and needs to be removed when implementing the missing copy tracing
between oldctx and newctx (which are related only by obsolescence).
[1] IOW this means that --keep doesn't allow rewinding if wdir is dirty (unlike
e.g. strip).
exclude contrib
exclude .hg-format-source
recursive-exclude contrib *
exclude hgext3rd/evolve/hack
recursive-exclude hgext3rd/evolve/hack *
exclude hgext3rd/evolve/legacy.py
exclude Makefile
exclude tests/test-drop.t
exclude tests/test-inhibit.t
exclude tests/test-oldconvert.t
exclude docs/tutorial/.netlify
include COPYING
include docs/figures/hgview-example.png
include docs/makefile
include docs/*.py
include docs/README
include docs/*.rst
include docs/static/*.svg
include docs/tutorials/*.t
include hgext3rd/__init__.py
include hgext3rd/evolve/*.py
include hgext3rd/evolve/thirdparty/*.py
include hgext3rd/topic/*.py
include hgext3rd/topic/README
include MANIFEST.in
include README
include CHANGELOG
include setup.py
include tests/*.py
include tests/*.sh
include tests/testlib/*.sh
include tests/*.t
recursive-include docs/tutorial *.rst
recursive-include docs/tutorial *.css
include docs/tutorial/standalone.html
recursive-include docs/tutorial *.js
recursive-include docs/tutorial *.md
recursive-include docs/tutorial *.py
recursive-include docs/tutorial *.sh
recursive-include docs/tutorial *.t
prune debian
recursive-include docs/figures *.svg