test-revert.t
1090 lines
| 24.8 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 | ||||
|
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 | ||||
adding a | ||||
removing d | ||||
forgetting z | ||||
|
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 | |||
$ 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 | |||
|
r22099 | call `hg revert` with --all | ||
--------------------------- | ||||
|
r12106 | |||
$ hg revert --all -rtip | ||||
reverting a | ||||
|
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 | ||||
|
r15447 | reverting b/b (glob) | ||
forgetting newdir/newfile (glob) | ||||
|
r12106 | $ echo foobar > b/b | ||
$ hg revert . | ||||
|
r15447 | reverting b/b (glob) | ||
|
r12106 | |||
reverting a rename target should revert the source | ||||
|
r22099 | -------------------------------------------------- | ||
|
r12106 | |||
$ hg mv a newa | ||||
$ hg revert newa | ||||
$ hg st a newa | ||||
? newa | ||||
$ 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 | ||||
|
r15447 | reverting ignoreddir/file (glob) | ||
undeleting ignoreddir/removed (glob) | ||||
|
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 | ||||
adding allyour | ||||
adding base | ||||
removing ignored | ||||
$ 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) | ||||
|
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 | |||
|
r22124 | This section tests most of the possible combinations of working directory | ||
changes and inter-revision changes. The number of possible cases is significant | ||||
|
r23139 | but they all have a slightly different handling. So this section commits to | ||
|
r22124 | generating and testing all of them to allow safe refactoring of the revert code. | ||
A python script is used to generate a file history for each combination of | ||||
changes between, on one side the working directory and its parent and on | ||||
the other side, changes between a revert target (--rev) and working directory | ||||
parent. The three states generated are: | ||||
- a "base" revision | ||||
- a "parent" revision | ||||
- the working directory (based on "parent") | ||||
The file generated have names of the form: | ||||
<changeset-state>_<working-copy-state> | ||||
Here, "changeset-state" conveys the state in "base" and "parent" (or the change | ||||
that happen between them), "working-copy-state" is self explanatory. | ||||
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 | ||||
------------------------------- | ||||
$ cat << EOF > gen-revert-cases.py | ||||
> # generate proper file state to test revert behavior | ||||
> import sys | ||||
|
r22133 | > import os | ||
|
r22124 | > | ||
> # content of the file in "base" and "parent" | ||||
|
r22133 | > # None means no file at all | ||
|
r22124 | > ctxcontent = { | ||
|
r22135 | > # clean: no change from base to parent | ||
> 'clean': ['base', 'base'], | ||||
|
r22124 | > # modified: file content change from base to parent | ||
> 'modified': ['base', 'parent'], | ||||
|
r22133 | > # added: file is missing from base and added in parent | ||
> 'added': [None, 'parent'], | ||||
|
r22136 | > # removed: file exist in base but is removed from parent | ||
> 'removed': ['base', None], | ||||
|
r22137 | > # file exist neither in base not in parent | ||
> 'missing': [None, None], | ||||
|
r22124 | > } | ||
> | ||||
> # content of file in working copy | ||||
> wccontent = { | ||||
> # clean: wc content is the same as parent | ||||
> 'clean': lambda cc: cc[1], | ||||
|
r22138 | > # revert: wc content is the same as base | ||
> 'revert': lambda cc: cc[0], | ||||
|
r22139 | > # wc: file exist with a content different from base and parent | ||
> 'wc': lambda cc: 'wc', | ||||
|
r22140 | > # removed: file is missing and marked as untracked | ||
> 'removed': lambda cc: None, | ||||
|
r22144 | > # deleted: file is recorded as tracked but missing | ||
> # rely on file deletion outside of this script | ||||
> 'deleted': lambda cc:'TOBEDELETED', | ||||
|
r22124 | > } | ||
|
r22141 | > # untracked-X is a version of X where the file is not tracked (? unknown) | ||
> wccontent['untracked-clean'] = wccontent['clean'] | ||||
|
r22142 | > wccontent['untracked-revert'] = wccontent['revert'] | ||
|
r22143 | > wccontent['untracked-wc'] = wccontent['wc'] | ||
|
r22124 | > | ||
> # build the combination of possible states | ||||
> combination = [] | ||||
|
r23153 | > for ctxkey, ctxvalue in ctxcontent.iteritems(): | ||
|
r22124 | > for wckey in wccontent: | ||
|
r23153 | > if (ctxvalue[0] == ctxvalue[1] and 'revert' in wckey): | ||
> continue | ||||
|
r23154 | > if not ctxvalue[0] and 'revert' in wckey: | ||
> continue | ||||
|
r23155 | > if not ctxvalue[1] and ('removed' in wckey or 'deleted' in wckey): | ||
> continue | ||||
|
r22124 | > filename = "%s_%s" % (ctxkey, wckey) | ||
> combination.append((filename, ctxkey, wckey)) | ||||
> | ||||
> # make sure we have stable output | ||||
> combination.sort() | ||||
> | ||||
> # retrieve the state we must generate | ||||
> target = sys.argv[1] | ||||
> | ||||
> # compute file content | ||||
> content = [] | ||||
> for filename, ctxkey, wckey in combination: | ||||
> cc = ctxcontent[ctxkey] | ||||
|
r22127 | > if target == 'filelist': | ||
> print filename | ||||
> elif target == 'base': | ||||
|
r22124 | > content.append((filename, cc[0])) | ||
> elif target == 'parent': | ||||
> content.append((filename, cc[1])) | ||||
> elif target == 'wc': | ||||
> content.append((filename, wccontent[wckey](cc))) | ||||
> else: | ||||
> print >> sys.stderr, "unknown target:", target | ||||
> sys.exit(1) | ||||
> | ||||
> # write actual content | ||||
> for filename, data in content: | ||||
|
r22133 | > if data is not None: | ||
> f = open(filename, 'w') | ||||
> f.write(data + '\n') | ||||
> f.close() | ||||
> elif os.path.exists(filename): | ||||
> os.remove(filename) | ||||
|
r22124 | > EOF | ||
|
r22127 | check list of planned files | ||
$ python gen-revert-cases.py filelist | ||||
|
r22133 | added_clean | ||
|
r22144 | added_deleted | ||
|
r22140 | added_removed | ||
|
r22141 | added_untracked-clean | ||
|
r22143 | added_untracked-wc | ||
|
r22139 | added_wc | ||
|
r22135 | clean_clean | ||
|
r22144 | clean_deleted | ||
|
r22140 | clean_removed | ||
|
r22141 | clean_untracked-clean | ||
|
r22143 | clean_untracked-wc | ||
|
r22139 | clean_wc | ||
|
r22137 | missing_clean | ||
|
r22141 | missing_untracked-clean | ||
|
r22143 | missing_untracked-wc | ||
|
r22139 | missing_wc | ||
|
r22127 | modified_clean | ||
|
r22144 | modified_deleted | ||
|
r22140 | modified_removed | ||
|
r22138 | modified_revert | ||
|
r22141 | modified_untracked-clean | ||
|
r22142 | modified_untracked-revert | ||
|
r22143 | modified_untracked-wc | ||
|
r22139 | modified_wc | ||
|
r22136 | removed_clean | ||
|
r22138 | removed_revert | ||
|
r22141 | removed_untracked-clean | ||
|
r22142 | removed_untracked-revert | ||
|
r22143 | removed_untracked-wc | ||
|
r22139 | removed_wc | ||
|
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 | ||||
> import os | ||||
> files = os.listdir('.') | ||||
> files.sort() | ||||
> for filename in files: | ||||
> if os.path.isdir(filename): | ||||
> continue | ||||
> content = open(filename).read() | ||||
> print '%-6s %s' % (content.strip(), filename) | ||||
> EOF | ||||
|
r22124 | |||
Generate appropriate repo state | ||||
------------------------------- | ||||
$ hg init revert-ref | ||||
$ cd revert-ref | ||||
Generate base changeset | ||||
$ python ../gen-revert-cases.py base | ||||
$ hg addremove --similarity 0 | ||||
|
r22135 | adding clean_clean | ||
|
r22144 | adding clean_deleted | ||
|
r22140 | adding clean_removed | ||
|
r22141 | adding clean_untracked-clean | ||
|
r22143 | adding clean_untracked-wc | ||
|
r22139 | adding clean_wc | ||
|
r22124 | adding modified_clean | ||
|
r22144 | adding modified_deleted | ||
|
r22140 | adding modified_removed | ||
|
r22138 | adding modified_revert | ||
|
r22141 | adding modified_untracked-clean | ||
|
r22142 | adding modified_untracked-revert | ||
|
r22143 | adding modified_untracked-wc | ||
|
r22139 | adding modified_wc | ||
|
r22136 | adding removed_clean | ||
|
r22138 | adding removed_revert | ||
|
r22141 | adding removed_untracked-clean | ||
|
r22142 | adding removed_untracked-revert | ||
|
r22143 | adding removed_untracked-wc | ||
|
r22139 | adding removed_wc | ||
|
r22124 | $ hg status | ||
|
r22135 | A clean_clean | ||
|
r22144 | A clean_deleted | ||
|
r22140 | A clean_removed | ||
|
r22141 | A clean_untracked-clean | ||
|
r22143 | A clean_untracked-wc | ||
|
r22139 | A clean_wc | ||
|
r22124 | A modified_clean | ||
|
r22144 | A modified_deleted | ||
|
r22140 | A modified_removed | ||
|
r22138 | A modified_revert | ||
|
r22141 | A modified_untracked-clean | ||
|
r22142 | A modified_untracked-revert | ||
|
r22143 | A modified_untracked-wc | ||
|
r22139 | A modified_wc | ||
|
r22136 | A removed_clean | ||
|
r22138 | A removed_revert | ||
|
r22141 | A removed_untracked-clean | ||
|
r22142 | A removed_untracked-revert | ||
|
r22143 | A removed_untracked-wc | ||
|
r22139 | A removed_wc | ||
|
r22124 | $ hg commit -m 'base' | ||
|
r22126 | (create a simple text version of the content) | ||
$ python ../dircontent.py > ../content-base.txt | ||||
$ cat ../content-base.txt | ||||
|
r22135 | base clean_clean | ||
|
r22144 | base clean_deleted | ||
|
r22140 | base clean_removed | ||
|
r22141 | base clean_untracked-clean | ||
|
r22143 | base clean_untracked-wc | ||
|
r22139 | base clean_wc | ||
|
r22126 | base modified_clean | ||
|
r22144 | base modified_deleted | ||
|
r22140 | base modified_removed | ||
|
r22138 | base modified_revert | ||
|
r22141 | base modified_untracked-clean | ||
|
r22142 | base modified_untracked-revert | ||
|
r22143 | base modified_untracked-wc | ||
|
r22139 | base modified_wc | ||
|
r22136 | base removed_clean | ||
|
r22138 | base removed_revert | ||
|
r22141 | base removed_untracked-clean | ||
|
r22142 | base removed_untracked-revert | ||
|
r22143 | base removed_untracked-wc | ||
|
r22139 | base removed_wc | ||
|
r22126 | |||
|
r22124 | Create parent changeset | ||
$ python ../gen-revert-cases.py parent | ||||
$ hg addremove --similarity 0 | ||||
|
r22133 | adding added_clean | ||
|
r22144 | adding added_deleted | ||
|
r22140 | adding added_removed | ||
|
r22141 | adding added_untracked-clean | ||
|
r22143 | adding added_untracked-wc | ||
|
r22139 | adding added_wc | ||
|
r22136 | removing removed_clean | ||
|
r22138 | removing removed_revert | ||
|
r22141 | removing removed_untracked-clean | ||
|
r22142 | removing removed_untracked-revert | ||
|
r22143 | removing removed_untracked-wc | ||
|
r22139 | removing removed_wc | ||
|
r22124 | $ hg status | ||
M modified_clean | ||||
|
r22144 | M modified_deleted | ||
|
r22140 | M modified_removed | ||
|
r22138 | M modified_revert | ||
|
r22141 | M modified_untracked-clean | ||
|
r22142 | M modified_untracked-revert | ||
|
r22143 | M modified_untracked-wc | ||
|
r22139 | M modified_wc | ||
|
r22133 | A added_clean | ||
|
r22144 | A added_deleted | ||
|
r22140 | A added_removed | ||
|
r22141 | A added_untracked-clean | ||
|
r22143 | A added_untracked-wc | ||
|
r22139 | A added_wc | ||
|
r22136 | R removed_clean | ||
|
r22138 | R removed_revert | ||
|
r22141 | R removed_untracked-clean | ||
|
r22142 | R removed_untracked-revert | ||
|
r22143 | R removed_untracked-wc | ||
|
r22139 | R removed_wc | ||
|
r22124 | $ hg commit -m 'parent' | ||
|
r22126 | (create a simple text version of the content) | ||
$ python ../dircontent.py > ../content-parent.txt | ||||
$ cat ../content-parent.txt | ||||
|
r22133 | parent added_clean | ||
|
r22144 | parent added_deleted | ||
|
r22140 | parent added_removed | ||
|
r22141 | parent added_untracked-clean | ||
|
r22143 | parent added_untracked-wc | ||
|
r22139 | parent added_wc | ||
|
r22135 | base clean_clean | ||
|
r22144 | base clean_deleted | ||
|
r22140 | base clean_removed | ||
|
r22141 | base clean_untracked-clean | ||
|
r22143 | base clean_untracked-wc | ||
|
r22139 | base clean_wc | ||
|
r22126 | parent modified_clean | ||
|
r22144 | parent modified_deleted | ||
|
r22140 | parent modified_removed | ||
|
r22138 | parent modified_revert | ||
|
r22141 | parent modified_untracked-clean | ||
|
r22142 | parent modified_untracked-revert | ||
|
r22143 | parent modified_untracked-wc | ||
|
r22139 | parent modified_wc | ||
|
r22126 | |||
|
r22124 | Setup working directory | ||
|
r23134 | $ python ../gen-revert-cases.py wc | ||
|
r22124 | $ hg addremove --similarity 0 | ||
|
r22140 | removing added_removed | ||
removing clean_removed | ||||
|
r22143 | adding missing_untracked-wc | ||
|
r22139 | adding missing_wc | ||
|
r22140 | removing modified_removed | ||
|
r22138 | adding removed_revert | ||
|
r22142 | adding removed_untracked-revert | ||
|
r22143 | adding removed_untracked-wc | ||
|
r22139 | adding removed_wc | ||
|
r22141 | $ hg forget *untracked* | ||
|
r22144 | $ rm *deleted* | ||
|
r22124 | $ hg status | ||
|
r22139 | M added_wc | ||
M clean_wc | ||||
|
r22138 | M modified_revert | ||
|
r22139 | M modified_wc | ||
A missing_wc | ||||
|
r22138 | A removed_revert | ||
|
r22139 | A removed_wc | ||
|
r22140 | R added_removed | ||
|
r22141 | R added_untracked-clean | ||
|
r22143 | R added_untracked-wc | ||
|
r22140 | R clean_removed | ||
|
r22141 | R clean_untracked-clean | ||
|
r22143 | R clean_untracked-wc | ||
|
r22140 | R modified_removed | ||
|
r22141 | R modified_untracked-clean | ||
|
r22142 | R modified_untracked-revert | ||
|
r22143 | R modified_untracked-wc | ||
|
r22144 | ! added_deleted | ||
! clean_deleted | ||||
! modified_deleted | ||||
|
r22143 | ? missing_untracked-wc | ||
|
r22142 | ? removed_untracked-revert | ||
|
r22143 | ? removed_untracked-wc | ||
|
r22124 | |||
$ hg status --rev 'desc("base")' | ||||
|
r22139 | M clean_wc | ||
|
r22124 | M modified_clean | ||
|
r22139 | M modified_wc | ||
M removed_wc | ||||
|
r22133 | A added_clean | ||
|
r22139 | A added_wc | ||
A missing_wc | ||||
|
r22140 | R clean_removed | ||
|
r22141 | R clean_untracked-clean | ||
|
r22143 | R clean_untracked-wc | ||
|
r22140 | R modified_removed | ||
|
r22141 | R modified_untracked-clean | ||
|
r22142 | R modified_untracked-revert | ||
|
r22143 | R modified_untracked-wc | ||
|
r22136 | R removed_clean | ||
|
r22141 | R removed_untracked-clean | ||
|
r22142 | R removed_untracked-revert | ||
|
r22143 | R removed_untracked-wc | ||
|
r22144 | ! added_deleted | ||
! clean_deleted | ||||
! modified_deleted | ||||
|
r22143 | ? missing_untracked-wc | ||
|
r22124 | |||
|
r22126 | (create a simple text version of the content) | ||
$ python ../dircontent.py > ../content-wc.txt | ||||
$ cat ../content-wc.txt | ||||
|
r22133 | parent added_clean | ||
|
r22141 | parent added_untracked-clean | ||
|
r22143 | wc added_untracked-wc | ||
|
r22139 | wc added_wc | ||
|
r22135 | base clean_clean | ||
|
r22141 | base clean_untracked-clean | ||
|
r22143 | wc clean_untracked-wc | ||
|
r22139 | wc clean_wc | ||
|
r22143 | wc missing_untracked-wc | ||
|
r22139 | wc missing_wc | ||
|
r22126 | parent modified_clean | ||
|
r22138 | base modified_revert | ||
|
r22141 | parent modified_untracked-clean | ||
|
r22142 | base modified_untracked-revert | ||
|
r22143 | wc modified_untracked-wc | ||
|
r22139 | wc modified_wc | ||
|
r22138 | base removed_revert | ||
|
r22142 | base removed_untracked-revert | ||
|
r22143 | wc removed_untracked-wc | ||
|
r22139 | wc removed_wc | ||
|
r22126 | |||
|
r22124 | $ cd .. | ||
|
r22128 | Test revert --all to parent content | ||
----------------------------------- | ||||
(setup from reference repo) | ||||
$ cp -r revert-ref revert-parent-all | ||||
$ cd revert-parent-all | ||||
check revert output | ||||
$ hg revert --all | ||||
|
r22144 | reverting added_deleted | ||
|
r22140 | undeleting added_removed | ||
|
r22141 | undeleting added_untracked-clean | ||
|
r22143 | undeleting added_untracked-wc | ||
|
r22139 | reverting added_wc | ||
|
r22144 | reverting clean_deleted | ||
|
r22140 | undeleting clean_removed | ||
|
r22141 | undeleting clean_untracked-clean | ||
|
r22143 | undeleting clean_untracked-wc | ||
|
r22139 | reverting clean_wc | ||
forgetting missing_wc | ||||
|
r22144 | reverting modified_deleted | ||
|
r22140 | undeleting modified_removed | ||
|
r22138 | reverting modified_revert | ||
|
r22141 | undeleting modified_untracked-clean | ||
|
r22142 | undeleting modified_untracked-revert | ||
|
r22143 | undeleting modified_untracked-wc | ||
|
r22139 | reverting modified_wc | ||
|
r22138 | forgetting removed_revert | ||
|
r22139 | forgetting removed_wc | ||
|
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. | ||||
$ python ../dircontent.py > ../content-parent-all.txt | ||||
$ cd .. | ||||
$ diff -U 0 -- content-parent.txt content-parent-all.txt | grep _ | ||||
|
r22143 | +wc added_untracked-wc.orig | ||
|
r22139 | +wc added_wc.orig | ||
|
r22143 | +wc clean_untracked-wc.orig | ||
|
r22139 | +wc clean_wc.orig | ||
|
r22143 | +wc missing_untracked-wc | ||
|
r22139 | +wc missing_wc | ||
|
r22138 | +base modified_revert.orig | ||
|
r22142 | +base modified_untracked-revert.orig | ||
|
r22143 | +wc modified_untracked-wc.orig | ||
|
r22139 | +wc modified_wc.orig | ||
|
r22138 | +base removed_revert | ||
|
r22142 | +base removed_untracked-revert | ||
|
r22143 | +wc removed_untracked-wc | ||
|
r22139 | +wc removed_wc | ||
|
r22129 | |||
Test revert --all to "base" content | ||||
----------------------------------- | ||||
(setup from reference repo) | ||||
$ cp -r revert-ref revert-base-all | ||||
$ cd revert-base-all | ||||
check revert output | ||||
$ hg revert --all --rev 'desc(base)' | ||||
|
r22133 | removing added_clean | ||
|
r22144 | removing added_deleted | ||
|
r22139 | removing added_wc | ||
|
r22144 | reverting clean_deleted | ||
|
r22140 | undeleting clean_removed | ||
|
r22141 | undeleting clean_untracked-clean | ||
|
r22143 | undeleting clean_untracked-wc | ||
|
r22139 | reverting clean_wc | ||
forgetting missing_wc | ||||
|
r22129 | reverting modified_clean | ||
|
r22144 | reverting modified_deleted | ||
|
r22140 | undeleting modified_removed | ||
|
r22141 | undeleting modified_untracked-clean | ||
|
r22142 | undeleting modified_untracked-revert | ||
|
r22143 | undeleting modified_untracked-wc | ||
|
r22139 | reverting modified_wc | ||
|
r22136 | adding removed_clean | ||
|
r22141 | adding removed_untracked-clean | ||
|
r22142 | adding removed_untracked-revert | ||
|
r22143 | adding removed_untracked-wc | ||
|
r22139 | reverting removed_wc | ||
|
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. | ||||
$ python ../dircontent.py > ../content-base-all.txt | ||||
$ cd .. | ||||
$ diff -U 0 -- content-base.txt content-base-all.txt | grep _ | ||||
|
r22141 | +parent added_untracked-clean | ||
|
r22143 | +wc added_untracked-wc | ||
|
r22611 | +wc added_wc.orig | ||
|
r22143 | +wc clean_untracked-wc.orig | ||
|
r22139 | +wc clean_wc.orig | ||
|
r22143 | +wc missing_untracked-wc | ||
|
r22139 | +wc missing_wc | ||
|
r22141 | +parent modified_untracked-clean.orig | ||
|
r22143 | +wc modified_untracked-wc.orig | ||
|
r22139 | +wc modified_wc.orig | ||
|
r22143 | +wc removed_untracked-wc.orig | ||
|
r22139 | +wc removed_wc.orig | ||
|
r22130 | |||
Test revert to parent content with explicit file name | ||||
----------------------------------------------------- | ||||
(setup from reference repo) | ||||
$ cp -r revert-ref revert-parent-explicit | ||||
$ cd revert-parent-explicit | ||||
revert all files individually and check the output | ||||
(output is expected to be different than in the --all case) | ||||
$ for file in `python ../gen-revert-cases.py filelist`; do | ||||
> echo '### revert for:' $file; | ||||
> hg revert $file; | ||||
> echo | ||||
> done | ||||
|
r22133 | ### revert for: added_clean | ||
no changes needed to added_clean | ||||
|
r22144 | ### revert for: added_deleted | ||
|
r22140 | ### revert for: added_removed | ||
|
r22141 | ### revert for: added_untracked-clean | ||
|
r22143 | ### revert for: added_untracked-wc | ||
|
r22139 | ### revert for: added_wc | ||
|
r22135 | ### revert for: clean_clean | ||
no changes needed to clean_clean | ||||
|
r22144 | ### revert for: clean_deleted | ||
|
r22140 | ### revert for: clean_removed | ||
|
r22141 | ### revert for: clean_untracked-clean | ||
|
r22143 | ### revert for: clean_untracked-wc | ||
|
r22139 | ### revert for: clean_wc | ||
|
r22137 | ### revert for: missing_clean | ||
missing_clean: no such file in rev * (glob) | ||||
|
r22141 | ### revert for: missing_untracked-clean | ||
missing_untracked-clean: no such file in rev * (glob) | ||||
|
r22143 | ### revert for: missing_untracked-wc | ||
file not managed: missing_untracked-wc | ||||
|
r22139 | ### revert for: missing_wc | ||
|
r22130 | ### revert for: modified_clean | ||
no changes needed to modified_clean | ||||
|
r22144 | ### revert for: modified_deleted | ||
|
r22140 | ### revert for: modified_removed | ||
|
r22138 | ### revert for: modified_revert | ||
|
r22141 | ### revert for: modified_untracked-clean | ||
|
r22142 | ### revert for: modified_untracked-revert | ||
|
r22143 | ### revert for: modified_untracked-wc | ||
|
r22139 | ### revert for: modified_wc | ||
|
r22136 | ### revert for: removed_clean | ||
removed_clean: no such file in rev * (glob) | ||||
|
r22138 | ### revert for: removed_revert | ||
|
r22141 | ### revert for: removed_untracked-clean | ||
removed_untracked-clean: no such file in rev * (glob) | ||||
|
r22142 | ### revert for: removed_untracked-revert | ||
file not managed: removed_untracked-revert | ||||
|
r22143 | ### revert for: removed_untracked-wc | ||
file not managed: removed_untracked-wc | ||||
|
r22139 | ### revert for: removed_wc | ||
|
r22130 | |||
|
r23139 | check resulting directory against the --all run | ||
|
r22130 | (There should be no difference) | ||
$ python ../dircontent.py > ../content-parent-explicit.txt | ||||
$ 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) | ||||
$ cp -r revert-ref revert-base-explicit | ||||
$ cd revert-base-explicit | ||||
revert all files individually and check the output | ||||
(output is expected to be different than in the --all case) | ||||
$ for file in `python ../gen-revert-cases.py filelist`; do | ||||
> echo '### revert for:' $file; | ||||
> hg revert $file --rev 'desc(base)'; | ||||
> echo | ||||
> done | ||||
|
r22133 | ### revert for: added_clean | ||
|
r22144 | ### revert for: added_deleted | ||
|
r22140 | ### revert for: added_removed | ||
|
r22156 | no changes needed to added_removed | ||
|
r22140 | |||
|
r22141 | ### revert for: added_untracked-clean | ||
|
r22156 | no changes needed to added_untracked-clean | ||
|
r22141 | |||
|
r22143 | ### revert for: added_untracked-wc | ||
|
r22156 | no changes needed to added_untracked-wc | ||
|
r22143 | |||
|
r22139 | ### revert for: added_wc | ||
|
r22135 | ### revert for: clean_clean | ||
|
r22186 | no changes needed to clean_clean | ||
|
r22135 | |||
|
r22144 | ### revert for: clean_deleted | ||
|
r22140 | ### revert for: clean_removed | ||
|
r22141 | ### revert for: clean_untracked-clean | ||
|
r22143 | ### revert for: clean_untracked-wc | ||
|
r22139 | ### revert for: clean_wc | ||
|
r22137 | ### revert for: missing_clean | ||
missing_clean: no such file in rev * (glob) | ||||
|
r22141 | ### revert for: missing_untracked-clean | ||
missing_untracked-clean: no such file in rev * (glob) | ||||
|
r22143 | ### revert for: missing_untracked-wc | ||
file not managed: missing_untracked-wc | ||||
|
r22139 | ### revert for: missing_wc | ||
|
r22131 | ### revert for: modified_clean | ||
|
r22144 | ### revert for: modified_deleted | ||
|
r22140 | ### revert for: modified_removed | ||
|
r22138 | ### revert for: modified_revert | ||
|
r22190 | no changes needed to modified_revert | ||
|
r22138 | |||
|
r22141 | ### revert for: modified_untracked-clean | ||
|
r22142 | ### revert for: modified_untracked-revert | ||
|
r22143 | ### revert for: modified_untracked-wc | ||
|
r22139 | ### revert for: modified_wc | ||
|
r22136 | ### revert for: removed_clean | ||
|
r22138 | ### revert for: removed_revert | ||
|
r22208 | no changes needed to removed_revert | ||
|
r22138 | |||
|
r22141 | ### revert for: removed_untracked-clean | ||
|
r22142 | ### revert for: removed_untracked-revert | ||
|
r22143 | ### revert for: removed_untracked-wc | ||
|
r22139 | ### revert for: removed_wc | ||
|
r22131 | |||
|
r23139 | check resulting directory against the --all run | ||
|
r22131 | (There should be no difference) | ||
$ python ../dircontent.py > ../content-base-explicit.txt | ||||
$ cd .. | ||||
$ diff -U 0 -- content-base-all.txt content-base-explicit.txt | grep _ | ||||
[1] | ||||