test-revert.t
1165 lines
| 31.7 KiB
| text/troff
|
Tads3Lexer
/ tests / test-revert.t
|
r12106 | $ hg init repo | ||
$ cd repo | ||||
$ echo 123 > a | ||||
$ echo 123 > c | ||||
$ echo 123 > e | ||||
$ hg add a c e | ||||
|
r12156 | $ hg commit -m "first" a c e | ||
|
r14745 | |||
nothing changed | ||||
$ hg revert | ||||
abort: no files or directories specified | ||||
|
r14755 | (use --all to revert all files) | ||
|
r14745 | [255] | ||
|
r14767 | $ hg revert --all | ||
|
r14745 | |||
|
r22099 | Introduce some changes and revert them | ||
-------------------------------------- | ||||
|
r12106 | $ echo 123 > b | ||
$ hg status | ||||
? b | ||||
$ echo 12 > c | ||||
$ hg status | ||||
M c | ||||
? b | ||||
$ hg add b | ||||
$ hg status | ||||
M c | ||||
A b | ||||
$ hg rm a | ||||
$ hg status | ||||
M c | ||||
A b | ||||
R a | ||||
|
r22099 | |||
revert removal of a file | ||||
|
r12106 | $ hg revert a | ||
$ hg status | ||||
M c | ||||
A b | ||||
|
r22099 | |||
revert addition of a file | ||||
|
r12106 | $ hg revert b | ||
$ hg status | ||||
M c | ||||
? b | ||||
|
r22099 | |||
revert modification of a file (--no-backup) | ||||
|
r12106 | $ hg revert --no-backup c | ||
$ hg status | ||||
? b | ||||
|
r22099 | |||
revert deletion (! status) of a added file | ||||
------------------------------------------ | ||||
|
r12106 | $ hg add b | ||
$ hg status b | ||||
A b | ||||
$ rm b | ||||
$ hg status b | ||||
! b | ||||
$ hg revert -v b | ||||
forgetting b | ||||
$ hg status b | ||||
|
r15521 | b: * (glob) | ||
|
r12106 | |||
$ ls | ||||
a | ||||
c | ||||
e | ||||
|
r22099 | Test creation of backup (.orig) files | ||
------------------------------------- | ||||
|
r12106 | |||
$ echo z > e | ||||
$ hg revert --all -v | ||||
saving current version of e as e.orig | ||||
reverting e | ||||
|
r26938 | Test creation of backup (.orig) file in configured file location | ||
---------------------------------------------------------------- | ||||
$ echo z > e | ||||
$ hg revert --all -v --config 'ui.origbackuppath=.hg/origbackups' | ||||
|
r35394 | creating directory: $TESTTMP/repo/.hg/origbackups | ||
|
r41731 | saving current version of e as .hg/origbackups/e | ||
|
r26938 | reverting e | ||
$ rm -rf .hg/origbackups | ||||
|
r22099 | revert on clean file (no change) | ||
-------------------------------- | ||||
|
r12106 | |||
$ hg revert a | ||||
no changes needed to a | ||||
|
r22099 | revert on an untracked file | ||
--------------------------- | ||||
|
r12106 | |||
$ echo q > q | ||||
$ hg revert q | ||||
file not managed: q | ||||
$ rm q | ||||
|
r22099 | revert on file that does not exists | ||
----------------------------------- | ||||
|
r12106 | |||
$ hg revert notfound | ||||
|
r12156 | notfound: no such file in rev 334a9e57682c | ||
|
r12106 | $ touch d | ||
$ hg add d | ||||
$ hg rm a | ||||
|
r12156 | $ hg commit -m "second" | ||
|
r12106 | $ echo z > z | ||
$ hg add z | ||||
$ hg st | ||||
A z | ||||
? e.orig | ||||
|
r22099 | revert to another revision (--rev) | ||
---------------------------------- | ||||
|
r12106 | |||
$ hg revert --all -r0 | ||||
|
r39442 | forgetting z | ||
|
r12106 | removing d | ||
|
r39442 | adding a | ||
|
r12106 | |||
|
r22099 | revert explicitly to parent (--rev) | ||
----------------------------------- | ||||
|
r12106 | |||
$ hg revert --all -rtip | ||||
forgetting a | ||||
undeleting d | ||||
$ rm a *.orig | ||||
|
r22099 | revert to another revision (--rev) and exact match | ||
-------------------------------------------------- | ||||
exact match are more silent | ||||
|
r12106 | |||
$ hg revert -r0 a | ||||
$ hg st a | ||||
A a | ||||
$ hg rm d | ||||
$ hg st d | ||||
R d | ||||
|
r22156 | should keep d removed | ||
|
r12106 | |||
$ hg revert -r0 d | ||||
|
r22156 | no changes needed to d | ||
|
r12106 | $ hg st d | ||
R d | ||||
$ hg update -C | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
|
r22099 | |||
revert of exec bit | ||||
------------------ | ||||
|
r16886 | #if execbit | ||
|
r12106 | $ chmod +x c | ||
$ hg revert --all | ||||
reverting c | ||||
$ test -x c || echo non-executable | ||||
non-executable | ||||
$ chmod +x c | ||||
|
r12156 | $ hg commit -m exe | ||
|
r12106 | |||
$ chmod -x c | ||||
$ hg revert --all | ||||
reverting c | ||||
$ test -x c && echo executable | ||||
executable | ||||
|
r16886 | #endif | ||
|
r12106 | |||
|
r25753 | Test that files reverted to other than the parent are treated as | ||
"modified", even if none of mode, size and timestamp of it isn't | ||||
changed on the filesystem (see also issue4583). | ||||
$ echo 321 > e | ||||
$ hg diff --git | ||||
diff --git a/e b/e | ||||
--- a/e | ||||
+++ b/e | ||||
@@ -1,1 +1,1 @@ | ||||
-123 | ||||
+321 | ||||
$ hg commit -m 'ambiguity from size' | ||||
$ cat e | ||||
321 | ||||
$ touch -t 200001010000 e | ||||
$ hg debugrebuildstate | ||||
$ cat >> .hg/hgrc <<EOF | ||||
> [fakedirstatewritetime] | ||||
> # emulate invoking dirstate.write() via repo.status() | ||||
> # at 2000-01-01 00:00 | ||||
> fakenow = 200001010000 | ||||
> | ||||
> [extensions] | ||||
> fakedirstatewritetime = $TESTDIR/fakedirstatewritetime.py | ||||
> EOF | ||||
$ hg revert -r 0 e | ||||
$ cat >> .hg/hgrc <<EOF | ||||
> [extensions] | ||||
> fakedirstatewritetime = ! | ||||
> EOF | ||||
$ cat e | ||||
123 | ||||
$ touch -t 200001010000 e | ||||
$ hg status -A e | ||||
M e | ||||
|
r12106 | $ cd .. | ||
|
r12399 | Issue241: update and revert produces inconsistent repositories | ||
|
r22099 | -------------------------------------------------------------- | ||
|
r12106 | |||
$ hg init a | ||||
$ cd a | ||||
$ echo a >> a | ||||
$ hg commit -A -d '1 0' -m a | ||||
adding a | ||||
$ echo a >> a | ||||
$ hg commit -d '2 0' -m a | ||||
$ hg update 0 | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ mkdir b | ||||
$ echo b > b/b | ||||
|
r22099 | call `hg revert` with no file specified | ||
--------------------------------------- | ||||
|
r12106 | |||
$ hg revert -rtip | ||||
|
r14542 | abort: no files or directories specified | ||
|
r14726 | (use --all to revert all files, or 'hg update 1' to update) | ||
|
r12316 | [255] | ||
|
r12106 | |||
|
r24841 | call `hg revert` with -I | ||
--------------------------- | ||||
$ echo a >> a | ||||
$ hg revert -I a | ||||
reverting a | ||||
call `hg revert` with -X | ||||
--------------------------- | ||||
$ echo a >> a | ||||
$ hg revert -X d | ||||
reverting a | ||||
|
r22099 | call `hg revert` with --all | ||
--------------------------- | ||||
|
r12106 | |||
$ hg revert --all -rtip | ||||
reverting a | ||||
|
r24841 | $ rm *.orig | ||
|
r12106 | |||
|
r12399 | Issue332: confusing message when reverting directory | ||
|
r22099 | ---------------------------------------------------- | ||
|
r12106 | |||
|
r12156 | $ hg ci -A -m b | ||
|
r12106 | adding b/b | ||
created new head | ||||
$ echo foobar > b/b | ||||
$ mkdir newdir | ||||
$ echo foo > newdir/newfile | ||||
$ hg add newdir/newfile | ||||
$ hg revert b newdir | ||||
|
r39442 | forgetting newdir/newfile | ||
|
r35394 | reverting b/b | ||
|
r12106 | $ echo foobar > b/b | ||
$ hg revert . | ||||
|
r35394 | reverting b/b | ||
|
r12106 | |||
|
r41754 | respects ui.relative-paths | ||
-------------------------- | ||||
$ echo foo > newdir/newfile | ||||
$ hg add newdir/newfile | ||||
$ hg revert --all --cwd newdir | ||||
forgetting newfile | ||||
$ echo foo > newdir/newfile | ||||
$ hg add newdir/newfile | ||||
$ hg revert --all --cwd newdir --config ui.relative-paths=True | ||||
forgetting newfile | ||||
$ echo foo > newdir/newfile | ||||
$ hg add newdir/newfile | ||||
$ hg revert --all --cwd newdir --config ui.relative-paths=False | ||||
forgetting newdir/newfile | ||||
|
r12106 | |||
reverting a rename target should revert the source | ||||
|
r22099 | -------------------------------------------------- | ||
|
r12106 | |||
$ hg mv a newa | ||||
$ hg revert newa | ||||
$ hg st a newa | ||||
? newa | ||||
|
r23403 | Also true for move overwriting an existing file | ||
$ hg mv --force a b/b | ||||
$ hg revert b/b | ||||
$ hg status a b/b | ||||
|
r12106 | $ cd .. | ||
$ hg init ignored | ||||
$ cd ignored | ||||
$ echo '^ignored$' > .hgignore | ||||
$ echo '^ignoreddir$' >> .hgignore | ||||
$ echo '^removed$' >> .hgignore | ||||
$ mkdir ignoreddir | ||||
$ touch ignoreddir/file | ||||
$ touch ignoreddir/removed | ||||
$ touch ignored | ||||
$ touch removed | ||||
4 ignored files (we will add/commit everything) | ||||
$ hg st -A -X .hgignore | ||||
I ignored | ||||
I ignoreddir/file | ||||
I ignoreddir/removed | ||||
I removed | ||||
$ hg ci -qAm 'add files' ignored ignoreddir/file ignoreddir/removed removed | ||||
$ echo >> ignored | ||||
$ echo >> ignoreddir/file | ||||
$ hg rm removed ignoreddir/removed | ||||
should revert ignored* and undelete *removed | ||||
|
r22099 | -------------------------------------------- | ||
|
r12106 | |||
$ hg revert -a --no-backup | ||||
reverting ignored | ||||
|
r35394 | reverting ignoreddir/file | ||
undeleting ignoreddir/removed | ||||
|
r12106 | undeleting removed | ||
$ hg st -mardi | ||||
$ hg up -qC | ||||
$ echo >> ignored | ||||
$ hg rm removed | ||||
should silently revert the named files | ||||
|
r22099 | -------------------------------------- | ||
|
r12106 | |||
$ hg revert --no-backup ignored removed | ||||
$ hg st -mardi | ||||
|
r16913 | |||
|
r22099 | Reverting copy (issue3920) | ||
-------------------------- | ||||
|
r19129 | someone set up us the copies | ||
$ rm .hgignore | ||||
$ hg update -C | ||||
0 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg mv ignored allyour | ||||
$ hg copy removed base | ||||
$ hg commit -m rename | ||||
copies and renames, you have no chance to survive make your time (issue3920) | ||||
$ hg update '.^' | ||||
1 files updated, 0 files merged, 2 files removed, 0 files unresolved | ||||
$ hg revert -rtip -a | ||||
|
r39442 | removing ignored | ||
|
r19129 | adding allyour | ||
adding base | ||||
$ hg status -C | ||||
A allyour | ||||
ignored | ||||
A base | ||||
removed | ||||
R ignored | ||||
|
r21573 | Test revert of a file added by one side of the merge | ||
|
r22099 | ==================================================== | ||
|
r21573 | |||
|
r22099 | remove any pending change | ||
|
r21573 | |||
$ hg revert --all | ||||
forgetting allyour | ||||
forgetting base | ||||
undeleting ignored | ||||
$ hg purge --all --config extensions.purge= | ||||
|
r22099 | Adds a new commit | ||
|
r21573 | |||
$ echo foo > newadd | ||||
$ hg add newadd | ||||
$ hg commit -m 'other adds' | ||||
created new head | ||||
|
r22099 | merge it with the other head | ||
|
r21573 | |||
$ hg merge # merge 1 into 2 | ||||
2 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
$ hg summary | ||||
parent: 2:b8ec310b2d4e tip | ||||
other adds | ||||
parent: 1:f6180deb8fbe | ||||
rename | ||||
branch: default | ||||
commit: 2 modified, 1 removed (merge) | ||||
update: (current) | ||||
|
r25382 | phases: 3 draft | ||
|
r21573 | |||
|
r22099 | clarifies who added what | ||
|
r21573 | |||
$ hg status | ||||
M allyour | ||||
M base | ||||
R ignored | ||||
$ hg status --change 'p1()' | ||||
A newadd | ||||
$ hg status --change 'p2()' | ||||
A allyour | ||||
A base | ||||
R ignored | ||||
|
r22099 | revert file added by p1() to p1() state | ||
----------------------------------------- | ||||
|
r21573 | |||
$ hg revert -r 'p1()' 'glob:newad?' | ||||
$ hg status | ||||
M allyour | ||||
M base | ||||
R ignored | ||||
|
r22099 | revert file added by p1() to p2() state | ||
------------------------------------------ | ||||
|
r21573 | |||
$ hg revert -r 'p2()' 'glob:newad?' | ||||
removing newadd | ||||
$ hg status | ||||
M allyour | ||||
M base | ||||
R ignored | ||||
R newadd | ||||
|
r22099 | revert file added by p2() to p2() state | ||
------------------------------------------ | ||||
|
r21573 | |||
$ hg revert -r 'p2()' 'glob:allyou?' | ||||
$ hg status | ||||
M allyour | ||||
M base | ||||
R ignored | ||||
R newadd | ||||
|
r22099 | revert file added by p2() to p1() state | ||
------------------------------------------ | ||||
|
r21573 | |||
$ hg revert -r 'p1()' 'glob:allyou?' | ||||
removing allyour | ||||
$ hg status | ||||
M base | ||||
R allyour | ||||
R ignored | ||||
R newadd | ||||
|
r22124 | Systematic behavior validation of most possible cases | ||
===================================================== | ||||
|
r21573 | |||
|
r23159 | This section tests most of the possible combinations of revision states and | ||
working directory states. The number of possible cases is significant but they | ||||
|
r23139 | but they all have a slightly different handling. So this section commits to | ||
|
r23159 | and testing all of them to allow safe refactoring of the revert code. | ||
|
r22124 | |||
A python script is used to generate a file history for each combination of | ||||
|
r23159 | states, on one side the content (or lack thereof) in two revisions, and | ||
on the other side, the content and "tracked-ness" of the working directory. The | ||||
three states generated are: | ||||
|
r22124 | |||
- a "base" revision | ||||
- a "parent" revision | ||||
- the working directory (based on "parent") | ||||
|
r23159 | The files generated have names of the form: | ||
|
r22124 | |||
|
r23159 | <rev1-content>_<rev2-content>_<working-copy-content>-<tracked-ness> | ||
|
r22124 | |||
All known states are not tested yet. See inline documentation for details. | ||||
Special cases from merge and rename are not tested by this section. | ||||
Write the python script to disk | ||||
------------------------------- | ||||
|
r22127 | check list of planned files | ||
|
r39743 | $ "$PYTHON" $TESTDIR/generate-working-copy-states.py filelist 2 | ||
|
r23160 | content1_content1_content1-tracked | ||
content1_content1_content1-untracked | ||||
content1_content1_content3-tracked | ||||
content1_content1_content3-untracked | ||||
content1_content1_missing-tracked | ||||
content1_content1_missing-untracked | ||||
content1_content2_content1-tracked | ||||
content1_content2_content1-untracked | ||||
content1_content2_content2-tracked | ||||
content1_content2_content2-untracked | ||||
content1_content2_content3-tracked | ||||
content1_content2_content3-untracked | ||||
content1_content2_missing-tracked | ||||
content1_content2_missing-untracked | ||||
content1_missing_content1-tracked | ||||
content1_missing_content1-untracked | ||||
content1_missing_content3-tracked | ||||
content1_missing_content3-untracked | ||||
content1_missing_missing-tracked | ||||
content1_missing_missing-untracked | ||||
|
r23159 | missing_content2_content2-tracked | ||
missing_content2_content2-untracked | ||||
missing_content2_content3-tracked | ||||
|
r23160 | missing_content2_content3-untracked | ||
missing_content2_missing-tracked | ||||
missing_content2_missing-untracked | ||||
missing_missing_content3-tracked | ||||
missing_missing_content3-untracked | ||||
|
r23159 | missing_missing_missing-tracked | ||
missing_missing_missing-untracked | ||||
|
r22127 | |||
|
r22126 | Script to make a simple text version of the content | ||
--------------------------------------------------- | ||||
$ cat << EOF >> dircontent.py | ||||
> # generate a simple text view of the directory for easy comparison | ||||
|
r39776 | > from __future__ import print_function | ||
|
r22126 | > import os | ||
> files = os.listdir('.') | ||||
> files.sort() | ||||
> for filename in files: | ||||
> if os.path.isdir(filename): | ||||
> continue | ||||
> content = open(filename).read() | ||||
|
r39776 | > print('%-6s %s' % (content.strip(), filename)) | ||
|
r22126 | > EOF | ||
|
r22124 | |||
Generate appropriate repo state | ||||
------------------------------- | ||||
$ hg init revert-ref | ||||
$ cd revert-ref | ||||
Generate base changeset | ||||
|
r39743 | $ "$PYTHON" $TESTDIR/generate-working-copy-states.py state 2 1 | ||
|
r22124 | $ hg addremove --similarity 0 | ||
|
r23159 | adding content1_content1_content1-tracked | ||
adding content1_content1_content1-untracked | ||||
adding content1_content1_content3-tracked | ||||
adding content1_content1_content3-untracked | ||||
adding content1_content1_missing-tracked | ||||
adding content1_content1_missing-untracked | ||||
adding content1_content2_content1-tracked | ||||
adding content1_content2_content1-untracked | ||||
adding content1_content2_content2-tracked | ||||
adding content1_content2_content2-untracked | ||||
adding content1_content2_content3-tracked | ||||
adding content1_content2_content3-untracked | ||||
adding content1_content2_missing-tracked | ||||
adding content1_content2_missing-untracked | ||||
adding content1_missing_content1-tracked | ||||
adding content1_missing_content1-untracked | ||||
adding content1_missing_content3-tracked | ||||
adding content1_missing_content3-untracked | ||||
adding content1_missing_missing-tracked | ||||
adding content1_missing_missing-untracked | ||||
|
r22124 | $ hg status | ||
|
r23159 | A content1_content1_content1-tracked | ||
A content1_content1_content1-untracked | ||||
A content1_content1_content3-tracked | ||||
A content1_content1_content3-untracked | ||||
A content1_content1_missing-tracked | ||||
A content1_content1_missing-untracked | ||||
A content1_content2_content1-tracked | ||||
A content1_content2_content1-untracked | ||||
A content1_content2_content2-tracked | ||||
A content1_content2_content2-untracked | ||||
A content1_content2_content3-tracked | ||||
A content1_content2_content3-untracked | ||||
A content1_content2_missing-tracked | ||||
A content1_content2_missing-untracked | ||||
A content1_missing_content1-tracked | ||||
A content1_missing_content1-untracked | ||||
A content1_missing_content3-tracked | ||||
A content1_missing_content3-untracked | ||||
A content1_missing_missing-tracked | ||||
A content1_missing_missing-untracked | ||||
|
r22124 | $ hg commit -m 'base' | ||
|
r22126 | (create a simple text version of the content) | ||
|
r39743 | $ "$PYTHON" ../dircontent.py > ../content-base.txt | ||
|
r22126 | $ cat ../content-base.txt | ||
|
r23159 | content1 content1_content1_content1-tracked | ||
content1 content1_content1_content1-untracked | ||||
content1 content1_content1_content3-tracked | ||||
content1 content1_content1_content3-untracked | ||||
content1 content1_content1_missing-tracked | ||||
content1 content1_content1_missing-untracked | ||||
content1 content1_content2_content1-tracked | ||||
content1 content1_content2_content1-untracked | ||||
content1 content1_content2_content2-tracked | ||||
content1 content1_content2_content2-untracked | ||||
content1 content1_content2_content3-tracked | ||||
content1 content1_content2_content3-untracked | ||||
content1 content1_content2_missing-tracked | ||||
content1 content1_content2_missing-untracked | ||||
content1 content1_missing_content1-tracked | ||||
content1 content1_missing_content1-untracked | ||||
content1 content1_missing_content3-tracked | ||||
content1 content1_missing_content3-untracked | ||||
content1 content1_missing_missing-tracked | ||||
content1 content1_missing_missing-untracked | ||||
|
r22126 | |||
|
r22124 | Create parent changeset | ||
|
r39743 | $ "$PYTHON" $TESTDIR/generate-working-copy-states.py state 2 2 | ||
|
r22124 | $ hg addremove --similarity 0 | ||
|
r23159 | removing content1_missing_content1-tracked | ||
removing content1_missing_content1-untracked | ||||
removing content1_missing_content3-tracked | ||||
removing content1_missing_content3-untracked | ||||
removing content1_missing_missing-tracked | ||||
removing content1_missing_missing-untracked | ||||
adding missing_content2_content2-tracked | ||||
adding missing_content2_content2-untracked | ||||
adding missing_content2_content3-tracked | ||||
adding missing_content2_content3-untracked | ||||
adding missing_content2_missing-tracked | ||||
adding missing_content2_missing-untracked | ||||
|
r22124 | $ hg status | ||
|
r23159 | M content1_content2_content1-tracked | ||
M content1_content2_content1-untracked | ||||
M content1_content2_content2-tracked | ||||
M content1_content2_content2-untracked | ||||
M content1_content2_content3-tracked | ||||
M content1_content2_content3-untracked | ||||
M content1_content2_missing-tracked | ||||
M content1_content2_missing-untracked | ||||
A missing_content2_content2-tracked | ||||
A missing_content2_content2-untracked | ||||
A missing_content2_content3-tracked | ||||
A missing_content2_content3-untracked | ||||
A missing_content2_missing-tracked | ||||
A missing_content2_missing-untracked | ||||
R content1_missing_content1-tracked | ||||
R content1_missing_content1-untracked | ||||
R content1_missing_content3-tracked | ||||
R content1_missing_content3-untracked | ||||
R content1_missing_missing-tracked | ||||
R content1_missing_missing-untracked | ||||
|
r22124 | $ hg commit -m 'parent' | ||
|
r22126 | (create a simple text version of the content) | ||
|
r39743 | $ "$PYTHON" ../dircontent.py > ../content-parent.txt | ||
|
r22126 | $ cat ../content-parent.txt | ||
|
r23159 | content1 content1_content1_content1-tracked | ||
content1 content1_content1_content1-untracked | ||||
content1 content1_content1_content3-tracked | ||||
content1 content1_content1_content3-untracked | ||||
content1 content1_content1_missing-tracked | ||||
content1 content1_content1_missing-untracked | ||||
content2 content1_content2_content1-tracked | ||||
content2 content1_content2_content1-untracked | ||||
content2 content1_content2_content2-tracked | ||||
content2 content1_content2_content2-untracked | ||||
content2 content1_content2_content3-tracked | ||||
content2 content1_content2_content3-untracked | ||||
content2 content1_content2_missing-tracked | ||||
content2 content1_content2_missing-untracked | ||||
content2 missing_content2_content2-tracked | ||||
content2 missing_content2_content2-untracked | ||||
content2 missing_content2_content3-tracked | ||||
content2 missing_content2_content3-untracked | ||||
content2 missing_content2_missing-tracked | ||||
content2 missing_content2_missing-untracked | ||||
|
r22126 | |||
|
r22124 | Setup working directory | ||
|
r39743 | $ "$PYTHON" $TESTDIR/generate-working-copy-states.py state 2 wc | ||
|
r22124 | $ hg addremove --similarity 0 | ||
|
r23159 | adding content1_missing_content1-tracked | ||
adding content1_missing_content1-untracked | ||||
adding content1_missing_content3-tracked | ||||
adding content1_missing_content3-untracked | ||||
|
r23161 | adding content1_missing_missing-tracked | ||
adding content1_missing_missing-untracked | ||||
|
r23159 | adding missing_missing_content3-tracked | ||
adding missing_missing_content3-untracked | ||||
|
r23161 | adding missing_missing_missing-tracked | ||
adding missing_missing_missing-untracked | ||||
|
r23159 | $ hg forget *_*_*-untracked | ||
$ rm *_*_missing-* | ||||
|
r22124 | $ hg status | ||
|
r23159 | M content1_content1_content3-tracked | ||
M content1_content2_content1-tracked | ||||
M content1_content2_content3-tracked | ||||
M missing_content2_content3-tracked | ||||
A content1_missing_content1-tracked | ||||
A content1_missing_content3-tracked | ||||
A missing_missing_content3-tracked | ||||
R content1_content1_content1-untracked | ||||
R content1_content1_content3-untracked | ||||
R content1_content1_missing-untracked | ||||
R content1_content2_content1-untracked | ||||
R content1_content2_content2-untracked | ||||
R content1_content2_content3-untracked | ||||
R content1_content2_missing-untracked | ||||
R missing_content2_content2-untracked | ||||
R missing_content2_content3-untracked | ||||
R missing_content2_missing-untracked | ||||
! content1_content1_missing-tracked | ||||
! content1_content2_missing-tracked | ||||
|
r23161 | ! content1_missing_missing-tracked | ||
|
r23159 | ! missing_content2_missing-tracked | ||
|
r23161 | ! missing_missing_missing-tracked | ||
|
r23159 | ? content1_missing_content1-untracked | ||
? content1_missing_content3-untracked | ||||
? missing_missing_content3-untracked | ||||
|
r22124 | |||
$ hg status --rev 'desc("base")' | ||||
|
r23159 | M content1_content1_content3-tracked | ||
M content1_content2_content2-tracked | ||||
M content1_content2_content3-tracked | ||||
M content1_missing_content3-tracked | ||||
A missing_content2_content2-tracked | ||||
A missing_content2_content3-tracked | ||||
A missing_missing_content3-tracked | ||||
R content1_content1_content1-untracked | ||||
R content1_content1_content3-untracked | ||||
R content1_content1_missing-untracked | ||||
R content1_content2_content1-untracked | ||||
R content1_content2_content2-untracked | ||||
R content1_content2_content3-untracked | ||||
R content1_content2_missing-untracked | ||||
R content1_missing_content1-untracked | ||||
R content1_missing_content3-untracked | ||||
R content1_missing_missing-untracked | ||||
! content1_content1_missing-tracked | ||||
! content1_content2_missing-tracked | ||||
|
r23161 | ! content1_missing_missing-tracked | ||
|
r23159 | ! missing_content2_missing-tracked | ||
|
r23161 | ! missing_missing_missing-tracked | ||
|
r23159 | ? missing_missing_content3-untracked | ||
|
r22124 | |||
|
r22126 | (create a simple text version of the content) | ||
|
r39743 | $ "$PYTHON" ../dircontent.py > ../content-wc.txt | ||
|
r22126 | $ cat ../content-wc.txt | ||
|
r23159 | content1 content1_content1_content1-tracked | ||
content1 content1_content1_content1-untracked | ||||
content3 content1_content1_content3-tracked | ||||
content3 content1_content1_content3-untracked | ||||
content1 content1_content2_content1-tracked | ||||
content1 content1_content2_content1-untracked | ||||
content2 content1_content2_content2-tracked | ||||
content2 content1_content2_content2-untracked | ||||
content3 content1_content2_content3-tracked | ||||
content3 content1_content2_content3-untracked | ||||
content1 content1_missing_content1-tracked | ||||
content1 content1_missing_content1-untracked | ||||
content3 content1_missing_content3-tracked | ||||
content3 content1_missing_content3-untracked | ||||
content2 missing_content2_content2-tracked | ||||
content2 missing_content2_content2-untracked | ||||
content3 missing_content2_content3-tracked | ||||
content3 missing_content2_content3-untracked | ||||
content3 missing_missing_content3-tracked | ||||
content3 missing_missing_content3-untracked | ||||
|
r22126 | |||
|
r22124 | $ cd .. | ||
|
r22128 | Test revert --all to parent content | ||
----------------------------------- | ||||
(setup from reference repo) | ||||
|
r30556 | $ cp -R revert-ref revert-parent-all | ||
|
r22128 | $ cd revert-parent-all | ||
check revert output | ||||
$ hg revert --all | ||||
|
r23159 | forgetting content1_missing_content1-tracked | ||
forgetting content1_missing_content3-tracked | ||||
|
r23161 | forgetting content1_missing_missing-tracked | ||
|
r23159 | forgetting missing_missing_content3-tracked | ||
|
r23161 | forgetting missing_missing_missing-tracked | ||
|
r39442 | reverting content1_content1_content3-tracked | ||
reverting content1_content1_missing-tracked | ||||
reverting content1_content2_content1-tracked | ||||
reverting content1_content2_content3-tracked | ||||
reverting content1_content2_missing-tracked | ||||
reverting missing_content2_content3-tracked | ||||
reverting missing_content2_missing-tracked | ||||
undeleting content1_content1_content1-untracked | ||||
undeleting content1_content1_content3-untracked | ||||
undeleting content1_content1_missing-untracked | ||||
undeleting content1_content2_content1-untracked | ||||
undeleting content1_content2_content2-untracked | ||||
undeleting content1_content2_content3-untracked | ||||
undeleting content1_content2_missing-untracked | ||||
undeleting missing_content2_content2-untracked | ||||
undeleting missing_content2_content3-untracked | ||||
undeleting missing_content2_missing-untracked | ||||
|
r22128 | |||
Compare resulting directory with revert target. | ||||
The diff is filtered to include change only. The only difference should be | ||||
additional `.orig` backup file when applicable. | ||||
|
r39743 | $ "$PYTHON" ../dircontent.py > ../content-parent-all.txt | ||
|
r22128 | $ cd .. | ||
$ diff -U 0 -- content-parent.txt content-parent-all.txt | grep _ | ||||
|
r23159 | +content3 content1_content1_content3-tracked.orig | ||
+content3 content1_content1_content3-untracked.orig | ||||
+content1 content1_content2_content1-tracked.orig | ||||
+content1 content1_content2_content1-untracked.orig | ||||
+content3 content1_content2_content3-tracked.orig | ||||
+content3 content1_content2_content3-untracked.orig | ||||
+content1 content1_missing_content1-tracked | ||||
+content1 content1_missing_content1-untracked | ||||
+content3 content1_missing_content3-tracked | ||||
+content3 content1_missing_content3-untracked | ||||
+content3 missing_content2_content3-tracked.orig | ||||
+content3 missing_content2_content3-untracked.orig | ||||
+content3 missing_missing_content3-tracked | ||||
+content3 missing_missing_content3-untracked | ||||
|
r22129 | |||
Test revert --all to "base" content | ||||
----------------------------------- | ||||
(setup from reference repo) | ||||
|
r30556 | $ cp -R revert-ref revert-base-all | ||
|
r22129 | $ cd revert-base-all | ||
check revert output | ||||
$ hg revert --all --rev 'desc(base)' | ||||
|
r39442 | forgetting missing_missing_content3-tracked | ||
forgetting missing_missing_missing-tracked | ||||
|
r23159 | removing missing_content2_content2-tracked | ||
removing missing_content2_content3-tracked | ||||
removing missing_content2_missing-tracked | ||||
|
r39442 | reverting content1_content1_content3-tracked | ||
reverting content1_content1_missing-tracked | ||||
reverting content1_content2_content2-tracked | ||||
reverting content1_content2_content3-tracked | ||||
reverting content1_content2_missing-tracked | ||||
reverting content1_missing_content3-tracked | ||||
reverting content1_missing_missing-tracked | ||||
adding content1_missing_content1-untracked | ||||
adding content1_missing_content3-untracked | ||||
adding content1_missing_missing-untracked | ||||
undeleting content1_content1_content1-untracked | ||||
undeleting content1_content1_content3-untracked | ||||
undeleting content1_content1_missing-untracked | ||||
undeleting content1_content2_content1-untracked | ||||
undeleting content1_content2_content2-untracked | ||||
undeleting content1_content2_content3-untracked | ||||
undeleting content1_content2_missing-untracked | ||||
|
r22129 | |||
Compare resulting directory with revert target. | ||||
The diff is filtered to include change only. The only difference should be | ||||
additional `.orig` backup file when applicable. | ||||
|
r39743 | $ "$PYTHON" ../dircontent.py > ../content-base-all.txt | ||
|
r22129 | $ cd .. | ||
$ diff -U 0 -- content-base.txt content-base-all.txt | grep _ | ||||
|
r23159 | +content3 content1_content1_content3-tracked.orig | ||
+content3 content1_content1_content3-untracked.orig | ||||
+content2 content1_content2_content2-untracked.orig | ||||
+content3 content1_content2_content3-tracked.orig | ||||
+content3 content1_content2_content3-untracked.orig | ||||
+content3 content1_missing_content3-tracked.orig | ||||
+content3 content1_missing_content3-untracked.orig | ||||
+content2 missing_content2_content2-untracked | ||||
+content3 missing_content2_content3-tracked.orig | ||||
+content3 missing_content2_content3-untracked | ||||
+content3 missing_missing_content3-tracked | ||||
+content3 missing_missing_content3-untracked | ||||
|
r22130 | |||
Test revert to parent content with explicit file name | ||||
----------------------------------------------------- | ||||
(setup from reference repo) | ||||
|
r30556 | $ cp -R revert-ref revert-parent-explicit | ||
|
r22130 | $ cd revert-parent-explicit | ||
revert all files individually and check the output | ||||
(output is expected to be different than in the --all case) | ||||
|
r39743 | $ for file in `"$PYTHON" $TESTDIR/generate-working-copy-states.py filelist 2`; do | ||
|
r22130 | > echo '### revert for:' $file; | ||
> hg revert $file; | ||||
> echo | ||||
> done | ||||
|
r23160 | ### revert for: content1_content1_content1-tracked | ||
no changes needed to content1_content1_content1-tracked | ||||
|
r22144 | |||
|
r23160 | ### revert for: content1_content1_content1-untracked | ||
|
r22140 | |||
|
r23160 | ### revert for: content1_content1_content3-tracked | ||
|
r22141 | |||
|
r23160 | ### revert for: content1_content1_content3-untracked | ||
|
r22142 | |||
|
r23160 | ### revert for: content1_content1_missing-tracked | ||
|
r22143 | |||
|
r23160 | ### revert for: content1_content1_missing-untracked | ||
|
r22139 | |||
|
r23160 | ### revert for: content1_content2_content1-tracked | ||
|
r22144 | |||
|
r23160 | ### revert for: content1_content2_content1-untracked | ||
|
r22138 | |||
|
r23160 | ### revert for: content1_content2_content2-tracked | ||
no changes needed to content1_content2_content2-tracked | ||||
|
r22141 | |||
|
r23160 | ### revert for: content1_content2_content2-untracked | ||
|
r22143 | |||
|
r23160 | ### revert for: content1_content2_content3-tracked | ||
|
r22139 | |||
|
r23160 | ### revert for: content1_content2_content3-untracked | ||
|
r22137 | |||
|
r23160 | ### revert for: content1_content2_missing-tracked | ||
|
r22144 | |||
|
r23160 | ### revert for: content1_content2_missing-untracked | ||
|
r22140 | |||
|
r23160 | ### revert for: content1_missing_content1-tracked | ||
|
r22138 | |||
|
r23160 | ### revert for: content1_missing_content1-untracked | ||
file not managed: content1_missing_content1-untracked | ||||
|
r22141 | |||
|
r23160 | ### revert for: content1_missing_content3-tracked | ||
|
r22142 | |||
|
r23160 | ### revert for: content1_missing_content3-untracked | ||
file not managed: content1_missing_content3-untracked | ||||
|
r22139 | |||
|
r23160 | ### revert for: content1_missing_missing-tracked | ||
|
r22130 | |||
|
r23160 | ### revert for: content1_missing_missing-untracked | ||
content1_missing_missing-untracked: no such file in rev * (glob) | ||||
|
r22144 | |||
|
r23159 | ### revert for: missing_content2_content2-tracked | ||
no changes needed to missing_content2_content2-tracked | ||||
|
r22138 | |||
|
r23159 | ### revert for: missing_content2_content2-untracked | ||
|
r22142 | |||
|
r23159 | ### revert for: missing_content2_content3-tracked | ||
|
r22143 | |||
|
r23160 | ### revert for: missing_content2_content3-untracked | ||
|
r22139 | |||
|
r23160 | ### revert for: missing_content2_missing-tracked | ||
|
r22136 | |||
|
r23160 | ### revert for: missing_content2_missing-untracked | ||
|
r22140 | |||
|
r23160 | ### revert for: missing_missing_content3-tracked | ||
|
r22138 | |||
|
r23160 | ### revert for: missing_missing_content3-untracked | ||
file not managed: missing_missing_content3-untracked | ||||
|
r22141 | |||
|
r23159 | ### revert for: missing_missing_missing-tracked | ||
|
r22142 | |||
|
r23159 | ### revert for: missing_missing_missing-untracked | ||
missing_missing_missing-untracked: no such file in rev * (glob) | ||||
|
r22139 | |||
|
r22130 | |||
|
r23139 | check resulting directory against the --all run | ||
|
r22130 | (There should be no difference) | ||
|
r39743 | $ "$PYTHON" ../dircontent.py > ../content-parent-explicit.txt | ||
|
r22130 | $ cd .. | ||
$ diff -U 0 -- content-parent-all.txt content-parent-explicit.txt | grep _ | ||||
[1] | ||||
|
r22131 | |||
Test revert to "base" content with explicit file name | ||||
----------------------------------------------------- | ||||
(setup from reference repo) | ||||
|
r30556 | $ cp -R revert-ref revert-base-explicit | ||
|
r22131 | $ cd revert-base-explicit | ||
revert all files individually and check the output | ||||
(output is expected to be different than in the --all case) | ||||
|
r39743 | $ for file in `"$PYTHON" $TESTDIR/generate-working-copy-states.py filelist 2`; do | ||
|
r22131 | > echo '### revert for:' $file; | ||
> hg revert $file --rev 'desc(base)'; | ||||
> echo | ||||
> done | ||||
|
r23160 | ### revert for: content1_content1_content1-tracked | ||
no changes needed to content1_content1_content1-tracked | ||||
|
r22144 | |||
|
r23160 | ### revert for: content1_content1_content1-untracked | ||
|
r22140 | |||
|
r23160 | ### revert for: content1_content1_content3-tracked | ||
|
r22138 | |||
|
r23160 | ### revert for: content1_content1_content3-untracked | ||
### revert for: content1_content1_missing-tracked | ||||
|
r22141 | |||
|
r23160 | ### revert for: content1_content1_missing-untracked | ||
|
r22142 | |||
|
r23160 | ### revert for: content1_content2_content1-tracked | ||
no changes needed to content1_content2_content1-tracked | ||||
|
r22139 | |||
|
r23160 | ### revert for: content1_content2_content1-untracked | ||
|
r22135 | |||
|
r23160 | ### revert for: content1_content2_content2-tracked | ||
|
r22144 | |||
|
r23160 | ### revert for: content1_content2_content2-untracked | ||
|
r22140 | |||
|
r23160 | ### revert for: content1_content2_content3-tracked | ||
|
r22141 | |||
|
r23160 | ### revert for: content1_content2_content3-untracked | ||
|
r22142 | |||
|
r23160 | ### revert for: content1_content2_missing-tracked | ||
|
r22139 | |||
|
r23160 | ### revert for: content1_content2_missing-untracked | ||
|
r22137 | |||
|
r23160 | ### revert for: content1_missing_content1-tracked | ||
no changes needed to content1_missing_content1-tracked | ||||
|
r22140 | |||
|
r23160 | ### revert for: content1_missing_content1-untracked | ||
### revert for: content1_missing_content3-tracked | ||||
|
r22138 | |||
|
r23160 | ### revert for: content1_missing_content3-untracked | ||
|
r22141 | |||
|
r23160 | ### revert for: content1_missing_missing-tracked | ||
|
r22142 | |||
|
r23160 | ### revert for: content1_missing_missing-untracked | ||
|
r22143 | |||
|
r23160 | ### revert for: missing_content2_content2-tracked | ||
|
r22131 | |||
|
r23159 | ### revert for: missing_content2_content2-untracked | ||
no changes needed to missing_content2_content2-untracked | ||||
|
r22144 | |||
|
r23160 | ### revert for: missing_content2_content3-tracked | ||
|
r22138 | |||
|
r23159 | ### revert for: missing_content2_content3-untracked | ||
no changes needed to missing_content2_content3-untracked | ||||
|
r22143 | |||
|
r23160 | ### revert for: missing_content2_missing-tracked | ||
|
r22139 | |||
|
r23160 | ### revert for: missing_content2_missing-untracked | ||
no changes needed to missing_content2_missing-untracked | ||||
|
r22144 | |||
|
r23160 | ### revert for: missing_missing_content3-tracked | ||
|
r22140 | |||
|
r23160 | ### revert for: missing_missing_content3-untracked | ||
file not managed: missing_missing_content3-untracked | ||||
|
r22138 | |||
|
r23159 | ### revert for: missing_missing_missing-tracked | ||
|
r22142 | |||
|
r23159 | ### revert for: missing_missing_missing-untracked | ||
missing_missing_missing-untracked: no such file in rev * (glob) | ||||
|
r22139 | |||
|
r22131 | |||
|
r23139 | check resulting directory against the --all run | ||
|
r22131 | (There should be no difference) | ||
|
r39743 | $ "$PYTHON" ../dircontent.py > ../content-base-explicit.txt | ||
|
r22131 | $ cd .. | ||
$ diff -U 0 -- content-base-all.txt content-base-explicit.txt | grep _ | ||||
[1] | ||||
|
r28192 | |||
Revert to an ancestor of P2 during a merge (issue5052) | ||||
----------------------------------------------------- | ||||
(prepare the repository) | ||||
$ hg init issue5052 | ||||
$ cd issue5052 | ||||
$ echo '.\.orig' > .hgignore | ||||
$ echo 0 > root | ||||
$ hg ci -qAm C0 | ||||
$ echo 0 > A | ||||
$ hg ci -qAm C1 | ||||
$ echo 1 >> A | ||||
$ hg ci -qm C2 | ||||
$ hg up -q 0 | ||||
$ echo 1 > B | ||||
$ hg ci -qAm C3 | ||||
$ hg status --rev 'ancestor(.,2)' --rev 2 | ||||
A A | ||||
$ hg log -G -T '{rev} ({files})\n' | ||||
@ 3 (B) | ||||
| | ||||
| o 2 (A) | ||||
| | | ||||
| o 1 (A) | ||||
|/ | ||||
o 0 (.hgignore root) | ||||
actual tests: reverting to something else than a merge parent | ||||
$ hg merge | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
$ hg status --rev 'p1()' | ||||
M A | ||||
$ hg status --rev 'p2()' | ||||
A B | ||||
$ hg status --rev '1' | ||||
M A | ||||
A B | ||||
$ hg revert --rev 1 --all | ||||
|
r39442 | removing B | ||
|
r28192 | reverting A | ||
$ hg status --rev 1 | ||||
From the other parents | ||||
$ hg up -C 'p2()' | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg merge | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
$ hg status --rev 'p1()' | ||||
M B | ||||
$ hg status --rev 'p2()' | ||||
A A | ||||
$ hg status --rev '1' | ||||
M A | ||||
A B | ||||
$ hg revert --rev 1 --all | ||||
|
r39442 | removing B | ||
|
r28192 | reverting A | ||
$ hg status --rev 1 | ||||
$ cd .. | ||||