##// END OF EJS Templates
copies: add config option for writing copy metadata to file and/or changset...
copies: add config option for writing copy metadata to file and/or changset This introduces a config option that lets you choose to write copy metadata to the changeset extras instead of to filelog. There's also an option to write it to both places. I imagine that may possibly be useful when transitioning an existing repo. The copy metadata is stored as two fields in extras: one for copies since p1 and one for copies since p2. I may need to add more information later in order to make copy tracing faster. Specifically, I'm thinking out recording which files were added or removed so that copies._chaincopies() doesn't have to look at the manifest for that. But that would just be an optimization and that can be added once we know if it's necessary. I have also considered saving space by using replacing the destination file path by an index into the "files" list, but that can also be changed later (but before the feature is ready to release). Differential Revision: https://phab.mercurial-scm.org/D6183

File last commit:

r39743:5abc47d4 default
r42317:0e41f40b default
Show More
test-addremove-similar.t
174 lines | 3.8 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
Matt Harbison
tests: quote PYTHON usage...
r39743 $ "$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
Matt Harbison
tests: quote PYTHON usage...
r39743 $ "$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
Matt Harbison
tests: quote PYTHON usage...
r39743 $ "$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
Matt Harbison
tests: quote PYTHON usage...
r39743 $ "$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
Yuya Nishihara
similar: sort files not by object id but by path for stable result...
r31579 should be sorted by path for stable result
Matt Harbison
tests: quote PYTHON usage...
r39743 $ for i in `"$PYTHON" $TESTDIR/seq.py 0 9`; do
Yuya Nishihara
similar: sort files not by object id but by path for stable result...
r31579 > cp small-file $i
> done
$ rm small-file
$ hg addremove
adding 0
adding 1
adding 2
adding 3
adding 4
adding 5
adding 6
adding 7
adding 8
adding 9
removing small-file
recording removal of small-file as rename to 0 (100% similar)
recording removal of small-file as rename to 1 (100% similar)
recording removal of small-file as rename to 2 (100% similar)
recording removal of small-file as rename to 3 (100% similar)
recording removal of small-file as rename to 4 (100% similar)
recording removal of small-file as rename to 5 (100% similar)
recording removal of small-file as rename to 6 (100% similar)
recording removal of small-file as rename to 7 (100% similar)
recording removal of small-file as rename to 8 (100% similar)
recording removal of small-file as rename to 9 (100% similar)
$ hg commit -m '10 same files'
pick one from many identical files
$ cp 0 a
Matt Harbison
tests: quote PYTHON usage...
r39743 $ rm `"$PYTHON" $TESTDIR/seq.py 0 9`
Yuya Nishihara
similar: sort files not by object id but by path for stable result...
r31579 $ hg addremove
removing 0
removing 1
removing 2
removing 3
removing 4
removing 5
removing 6
removing 7
removing 8
removing 9
adding a
Yuya Nishihara
similar: take the first match instead of the last...
r31583 recording removal of 0 as rename to a (100% similar)
Yuya Nishihara
similar: sort files not by object id but by path for stable result...
r31579 $ hg revert -aq
pick one from many similar files
$ cp 0 a
Matt Harbison
tests: quote PYTHON usage...
r39743 $ for i in `"$PYTHON" $TESTDIR/seq.py 0 9`; do
Yuya Nishihara
similar: sort files not by object id but by path for stable result...
r31579 > echo $i >> $i
> done
$ hg commit -m 'make them slightly different'
Matt Harbison
tests: quote PYTHON usage...
r39743 $ rm `"$PYTHON" $TESTDIR/seq.py 0 9`
Yuya Nishihara
similar: sort files not by object id but by path for stable result...
r31579 $ hg addremove -s50
removing 0
removing 1
removing 2
removing 3
removing 4
removing 5
removing 6
removing 7
removing 8
removing 9
adding a
Yuya Nishihara
similar: take the first match instead of the last...
r31583 recording removal of 0 as rename to a (99% similar)
Yuya Nishihara
similar: sort files not by object id but by path for stable result...
r31579 $ hg commit -m 'always the same file should be selected'
Martin Geisler
tests: unify test-addremove-similar
r11851 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 ..
Pierre-Yves David
error: get Abort from 'error' instead of 'util'...
r26587 Issue1527: repeated addremove causes 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
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 recording removal of d/a as rename to d/b (100% similar)
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
tests: remove (glob) annotations that were only for '\' matches...
r35394 removing d/b
Martin Geisler
tests: unify test-addremove-similar
r11851
copies here
$ hg addremove -s80
adding c
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 recording removal of d/a as rename to c (100% similar)
Mads Kiilerich
tests: add missing trailing 'cd ..'...
r16913
$ cd ..