Julian Foad wrote:
> Neels Janosch Hofmeyr wrote:
>> Hi TC folks,
>>
>> after being disappointed in svn's current awareness/handling of
>> tree-conflicts during incoming replace, I felt the desire to have a set of
>> tests that cover all the possible cases. But I find 1652 of them :o
>>
>> [[[
>> REPLACE CASES DURING MERGE:
>>
>> actions | reasons
>> -------------|------------------
>> fwf | - | - | d | -
>> dwd | m | h | m | c
>> fwd | p | | p |
>> dwf | mp | | mp |
>
> Hi Neels.
>
> When "action" is changing the node kind, it doesn't make sense to talk
> of whether it's also "modified". Similarly for "reason" when reason is a
> replacement. So:
Right, for dwf, I can't think of any content modifications.
But it might make a difference whether the added directory is empty or
whether it has more content inside (e.g. missing or stray 'Skipping...'
messages?).
And the property mods are still possible. I am thinking 'replaced and set a
property' vs. 'replaced and didn't set a property', to prove that
tree-conflicts and property additions don't interfere with each other.
In a particular case, when the incoming replace set a property with the same
name as a local property addition, it is treated as a separate conflict from
the tree-conflict, and that's bad. See attached script.
But you're right, should be ok to test that separately. It still gives me a
sense of uncertainty. To be sure, we should actually test every single
variant on its own. But we won't since it's not practical. Fine.
>
> | actions | ...
> |--------------| ...
> | fwf | - | -
> | dwd | m | h
> | | p |
> | | mp |
> |----------|
> | fwd |
> | dwf |
> |--------------
>
> Next, don't try to test all different kinds of modification in all these
> combinations. Just have "different" versus "identical" in this batch of
> tests. Have a separate set of tests just for testing that different
> actions are correctly detected:
>
> | actions | reasons
> |--------------|------------------
> | fwf | - | - | (just pick one reason)
> | dwd | m | h |
> | | p | |
> | | mp | |
>
> and another set for testing that all different reasons are correctly
> detected (just pick one action).
>
> Another thought. When "action" is replacing with a node of the same
> kind, we might assume that the replacement node should differ from the
> ancestor/base node. (If it is identical, we might want to treat it
> specially as it's close to a no-op, but I don't think we have discussed
> doing that.) It is more interesting to ask whether it is identical to or
> different from the target node that it clashes with on the receiving
> ("local") side.
Yes, good point.
>
>
>> 4*4*2*(4 + 2*2*4)*2 = 1652 permutations
>
> (I make that 1280 but who cares?)
Maybe it's a good number to impress raging users with... I didn't realize
myself that there are over a thousand variants in which replace conflicts
can manifest. I was thinking more like six. :P
BTW, in attached script, see how the reason is 'local add', even though it
was a local prop, and the action is 'incoming add', even though it was a
replace. (Probably a lot of such cases still hidden in the bushes.)
~Neels
------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2387067
#!/bin/bash
## CONFIGURE THIS:
## The next line is the only line you should need to adjust.
## (and uncomment all four lines)
#SVNDIR=/my/svn/trunk
#alias svn=${SVNDIR}/subversion/svn/svn
#alias svnserve=${SVNDIR}/subversion/svnserve/svnserve
#alias svnadmin=${SVNDIR}/subversion/svnadmin/svnadmin
svn --version
URL=file:///`pwd`/repos
rm -rf repos wc
svnadmin create repos
svn co -q ${URL} wc
set -x
cd wc
## ACTUAL TEST
mkdir -p trunk/dir
svn add trunk
svn ci -m r1
svn cp -m r2 ^/trunk ^/branch
svn up
# on the branch, replace the dir
svn rm branch/dir
svn ci -m r3
svn mkdir branch/dir
# also add a conflicting property.
svn ps propname otherval branch/dir
svn ci -m r4
# on trunk, set a prop on the dir, don't commit it.
svn ps propname propval trunk/dir
# merge the dir replacement onto trunk (that has the property set).
# When omitting the --accept option, this goes into interactive prop
# conflict resolution before mentioning tree-conflicts!
svn merge --accept=postpone ^/branch trunk
svn st
# There's a tree-conflict, but it says 'local add'.
svn info trunk/dir
svn pg propname trunk/dir
svn pg propname branch/dir
Received on 2009-08-26 23:49:51 CEST