Mercurial > hg-stable
view tests/test-record @ 5210:90d9ec0dc69d
merge: forcefully mark files that we get from the second parent as dirty
After a hg merge, we want to include in the commit all the files that we
got from the second parent, so that we have the correct file-level
history. To make them visible to hg commit, we try to mark them as dirty.
Unfortunately, right now we can't really mark them as dirty[1] - the
best we can do is to mark them as needing a full comparison of their
contents, but they will still be considered clean if they happen to be
identical to the version in the first parent.
This changeset extends the dirstate format in a compatible way, so that
we can mark a file as dirty:
Right now we use a negative file size to indicate we don't have valid
stat data for this entry. In practice, this size is always -1.
This patch uses -2 to indicate that the entry is dirty. Older versions
of hg won't choke on this dirstate, but they may happily mark the file
as clean after a full comparison, destroying all of our hard work.
The patch adds a dirstate.normallookup method with the semantics of the
current normaldirty, and changes normaldirty to forcefully mark the
entry as dirty.
This should fix issue522.
[1] - well, we could put them in state 'm', but that state has a
different meaning.
author | Alexis S. L. Carvalho <alexis@cecm.usp.br> |
---|---|
date | Thu, 23 Aug 2007 01:48:29 -0300 |
parents | 67afecb8d6cc |
children | 6fa7b6fb90a9 |
line wrap: on
line source
#!/bin/sh echo "[ui]" >> $HGRCPATH echo "interactive=true" >> $HGRCPATH echo "[extensions]" >> $HGRCPATH echo "record=" >> $HGRCPATH echo % help hg help record hg init a cd a echo % select no files touch empty-rw hg add empty-rw hg record empty-rw<<EOF n EOF echo; hg tip -p echo % select files but no hunks hg record empty-rw<<EOF y n EOF echo; hg tip -p echo % record empty file hg record -d '0 0' -m empty empty-rw<<EOF y y EOF echo; hg tip -p echo % rename empty file hg mv empty-rw empty-rename hg record -d '1 0' -m rename<<EOF y EOF echo; hg tip -p echo % copy empty file hg cp empty-rename empty-copy hg record -d '2 0' -m copy<<EOF y EOF echo; hg tip -p echo % delete empty file hg rm empty-copy hg record -d '3 0' -m delete<<EOF y EOF echo; hg tip -p echo % add binary file hg bundle --base -2 tip.bundle hg add tip.bundle hg record -d '4 0' -m binary<<EOF y EOF echo; hg tip -p echo % change binary file hg bundle --base -2 tip.bundle hg record -d '5 0' -m binary-change<<EOF y EOF echo; hg tip -p echo % rename and change binary file hg mv tip.bundle top.bundle hg bundle --base -2 top.bundle hg record -d '6 0' -m binary-change-rename<<EOF y EOF echo; hg tip -p echo % add plain file for i in 1 2 3 4 5 6 7 8 9 10; do echo $i >> plain done hg add plain hg record -d '7 0' -m plain plain<<EOF y y EOF echo; hg tip -p echo % modify end of plain file echo 11 >> plain hg record -d '8 0' -m end plain <<EOF y y EOF echo % modify end of plain file, no EOL hg tip --template '{node}' >> plain hg record -d '9 0' -m noeol plain <<EOF y y EOF echo % modify end of plain file, add EOL echo >> plain hg record -d '10 0' -m eol plain <<EOF y y y EOF echo % modify beginning, trim end, record both rm plain for i in 2 2 3 4 5 6 7 8 9 10; do echo $i >> plain done hg record -d '10 0' -m begin-and-end plain <<EOF y y y EOF echo; hg tip -p echo % trim beginning, modify end rm plain for i in 4 5 6 7 8 9 10.new; do echo $i >> plain done echo % record end hg record -d '11 0' -m end-only plain <<EOF y n y EOF echo; hg tip -p echo % record beginning hg record -d '12 0' -m begin-only plain <<EOF y y EOF echo; hg tip -p echo % add to beginning, trim from end rm plain for i in 1 2 3 4 5 6 7 8 9; do echo $i >> plain done echo % record end hg record --traceback -d '13 0' -m end-again plain<<EOF y n y EOF echo % add to beginning, middle, end rm plain for i in 1 2 3 4 5 5.new 5.reallynew 6 7 8 9 10 11; do echo $i >> plain done echo % record beginning, middle hg record -d '14 0' -m middle-only plain <<EOF y y y n EOF echo; hg tip -p echo % record end hg record -d '15 0' -m end-only plain <<EOF y y EOF echo; hg tip -p mkdir subdir cd subdir echo a > a hg ci -d '16 0' -Amsubdir echo a >> a hg record -d '16 0' -m subdir-change a <<EOF y y EOF echo; hg tip -p echo a > f1 echo b > f2 hg add f1 f2 hg ci -mz -d '17 0' echo a >> f1 echo b >> f2 echo % help, quit hg record <<EOF ? q EOF echo % skip hg record <<EOF s EOF echo % no hg record <<EOF n EOF echo % f, quit hg record <<EOF f q EOF echo % s, all hg record -d '18 0' -mx <<EOF s a EOF echo; hg tip -p echo % f hg record -d '19 0' -my <<EOF f EOF echo; hg tip -p