Mercurial > evolve
view tests/test-evolve-issue5881.t @ 4848:535ab2609e45
cmdstate: introduce a "saver" contextmanager and use it in place of save()
Previously, the state was only saved in some paths out of these functions. This
can be problematic, if the user ctrl-c's (or `kill -9`'s) the process, or we
exit out of `relocate` for anything besides the "expected" reason, we won't
record that we were in the middle of an evolve.
One of our users has discovered that this leaves hg in a weird state; the user
did something like this:
```
$ hg evolve
<something goes wrong with the merge tool, hits ctrl-c>
<deals with the merge conflicts>
$ hg evolve --continue
abort: no interrupted evolve to continue
$ hg evolve
abort: uncommitted changes
# Note: commands.status.verbose=True is set.
$ hg status
M foo
# The repository is in an unfinished *update* state.
# No unresolved merge conflicts
# To continue: hg update
```
The user did an `hg update`, but it didn't actually do anything besides take it
out of the unfinished update state (the files were still dirty in the working
directory).
author | Kyle Lippincott <spectral@google.com> |
---|---|
date | Mon, 16 Sep 2019 12:44:38 -0700 |
parents | bcd52ce0916d |
children | 79bc0f1a832e 29bc269bcc96 |
line wrap: on
line source
Test for issue 5881 present at https://bz.mercurial-scm.org/show_bug.cgi?id=5881 =============================================================================== which is about that if the working copy parent is obsolete then evolve update to its successor revision and stop; it doesn't continue to evolve remaining revisions those were suppossed to evovle. Setup ===== $ cat >> $HGRCPATH <<EOF > [phases] > publish = False > [alias] > glog = log -GT "{rev}:{node|short} {desc}\n ({bookmarks}) {phase}" > [extensions] > EOF $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/" >> $HGRCPATH $ hg init issue5881 $ cd issue5881 Prepare the directory by creating an orphan and update to its obsolete parent: $ for ch in a b c; do echo $ch > $ch; hg ci -Am "added "$ch; done; adding a adding b adding c $ hg up 1 -q $ hg ci --amend -m "updated b" 1 new orphan changesets $ hg up 1 0 files updated, 0 files merged, 0 files removed, 0 files unresolved working directory parent is obsolete! (5f6d8a4bf34a) (use 'hg evolve' to update to its successor: e6048a693c0d) $ hg glog o 3:e6048a693c0d updated b | () draft | * 2:155349b645be added c | | () draft | @ 1:5f6d8a4bf34a added b |/ () draft o 0:9092f1db7931 added a () draft Test `hg evolve` evolve all the revisions specified by user: $ hg evolve -r .:: update:[3] updated b 0 files updated, 0 files merged, 0 files removed, 0 files unresolved working directory is now at e6048a693c0d move:[2] added c atop:[3] updated b working directory is now at e6048a693c0d