##// END OF EJS Templates
localrepo: make journal.dirstate contain in-memory changes before transaction...
localrepo: make journal.dirstate contain in-memory changes before transaction Before this patch, in-memory dirstate changes aren't written out at opening transaction, even though 'journal.dirstate' is created directly from '.hg/dirstate'. Therefore, subsequent 'hg rollback' uses incomplete 'undo.dirstate' to restore dirstate, if dirstate is changed and isn't written out before opening transaction. In cases below, the condition "dirstate is changed and isn't written out before opening transaction" isn't satisfied and this problem doesn't appear: - "wlock scope" and "transaction scope" are almost equivalent e.g. 'commit --amend', 'import' and so on - dirstate changes are written out before opening transaction e.g. 'rebase' (via 'dirstateguard') and 'commit -A' (by separated wlock scopes) On the other hand, 'backout' may satisfy the condition above. To make 'journal.dirstate' contain in-memory changes before opening transaction, this patch explicitly invokes 'dirstate.write()' in 'localrepository.transaction()'. 'dirstate.write()' is placed before not "writing journal files out" but "invoking pretxnopen hooks" for visibility of dirstate changes to external hook processes. BTW, in the test script, 'touch -t 200001010000' and 'hg status' are invoked to make file 'c' surely clean in dirstate, because "clean but unsure" files indirectly cause 'dirstate.write()' at 'repo.status()' in 'repo.commit()' (see fe03f522dda9 for detail) and prevents from certainly reproducing the issue.

File last commit:

r23481:94091ab9 default
r25878:800e090e stable
Show More
test-addremove-similar.t
102 lines | 2.1 KiB | text/troff | Tads3Lexer
/ tests / test-addremove-similar.t
Martin Geisler
tests: unify test-addremove-similar
r11851 $ hg init rep; cd rep
$ touch empty-file
Augie Fackler
tests: use $PYTHON instead of hardcoding python...
r22947 $ $PYTHON -c 'for x in range(10000): print x' > large-file
Martin Geisler
tests: unify test-addremove-similar
r11851
$ hg addremove
adding empty-file
adding large-file
$ hg commit -m A
$ rm large-file empty-file
Augie Fackler
tests: use $PYTHON instead of hardcoding python...
r22947 $ $PYTHON -c 'for x in range(10,10000): print x' > another-file
Martin Geisler
tests: unify test-addremove-similar
r11851
$ hg addremove -s50
adding another-file
removing empty-file
removing large-file
recording removal of large-file as rename to another-file (99% similar)
$ hg commit -m B
comparing two empty files caused ZeroDivisionError in the past
$ hg update -C 0
2 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ rm empty-file
$ touch another-empty-file
$ hg addremove -s50
adding another-empty-file
removing empty-file
$ cd ..
$ hg init rep2; cd rep2
Augie Fackler
tests: use $PYTHON instead of hardcoding python...
r22947 $ $PYTHON -c 'for x in range(10000): print x' > large-file
$ $PYTHON -c 'for x in range(50): print x' > tiny-file
Martin Geisler
tests: unify test-addremove-similar
r11851
$ hg addremove
adding large-file
adding tiny-file
$ hg commit -m A
Augie Fackler
tests: use $PYTHON instead of hardcoding python...
r22947 $ $PYTHON -c 'for x in range(70): print x' > small-file
Martin Geisler
tests: unify test-addremove-similar
r11851 $ rm tiny-file
$ rm large-file
$ hg addremove -s50
removing large-file
adding small-file
removing tiny-file
recording removal of tiny-file as rename to small-file (82% similar)
$ hg commit -m B
should all fail
$ hg addremove -s foo
abort: similarity must be a number
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Martin Geisler
tests: unify test-addremove-similar
r11851 $ hg addremove -s -1
abort: similarity must be between 0 and 100
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Martin Geisler
tests: unify test-addremove-similar
r11851 $ hg addremove -s 1e6
abort: similarity must be between 0 and 100
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Martin Geisler
tests: unify test-addremove-similar
r11851
$ cd ..
Martin Geisler
tests: added a short description to issue numbers...
r12399 Issue1527: repeated addremove causes util.Abort
Martin Geisler
tests: unify test-addremove-similar
r11851
$ hg init rep3; cd rep3
$ mkdir d
$ echo a > d/a
$ hg add d/a
$ hg commit -m 1
$ mv d/a d/b
$ hg addremove -s80
removing d/a
adding d/b
Mads Kiilerich
tests: make (glob) on windows accept \ instead of /...
r15447 recording removal of d/a as rename to d/b (100% similar) (glob)
Martin Geisler
tests: unify test-addremove-similar
r11851 $ hg debugstate
r 0 0 1970-01-01 00:00:00 d/a
a 0 -1 unset d/b
copy: d/a -> d/b
$ mv d/b c
no copies found here (since the target isn't in d
$ hg addremove -s80 d
Matt Harbison
addremove: restore the relative path printing when files are named...
r23481 removing d/b (glob)
Martin Geisler
tests: unify test-addremove-similar
r11851
copies here
$ hg addremove -s80
adding c
Mads Kiilerich
tests: make (glob) on windows accept \ instead of /...
r15447 recording removal of d/a as rename to c (100% similar) (glob)
Mads Kiilerich
tests: add missing trailing 'cd ..'...
r16913
$ cd ..