Hi, Subversion 1.8.11 behaves differently than 1.7.17 and 1.6.11, in that it sets empty svn:mergeinfo properties for files within a tree-conflicted directory during a merge. The effect is this:
Layout: /trunk /branches/branch Add empty dir/file.txt to trunk and independently to branch. Merge trunk to branch; the resulting merge generates: % svn propget -v svn:mergeinfo -R Properties on '.': svn:mergeinfo /trunk:2-4 Properties on 'dir/file.txt': svn:mergeinfo % Expected result is that no svn:mergeinfo property would appear on dir/file.txt. Is this a bug? A known bug? Thanks, Pete Script to reproduce (run as "script.sh /path/to/svn"): #!/bin/bash # # Reproduce an issue in Subversion 1.8.11 where files in a tree # conflict can have svn:mergeinfo properties added to them during a # merge. set -e SERVER_DIR=server CLIENT_DIR=client if [ $# != 1 ]; then echo "usage: $0 <path to svn>" exit fi SVN=$1 SVNADMIN="$(dirname $SVN)/svnadmin" SERVER_URL="file:///$PWD/$SERVER_DIR" createAndCommitSubdirWithFile () { mkdir dir touch dir/file.txt $SVN add dir $SVN commit -m "$1" $SVN update # Update . to committed rev } # Create the repo and enter it. $SVNADMIN create $SERVER_DIR $SVN checkout $SERVER_URL $CLIENT_DIR cd $CLIENT_DIR # Create the trunk/branches structure mkdir trunk mkdir branches $SVN add trunk branches $SVN commit -m 'Create initial structure' # Make a branch from the trunk. $SVN copy ^/trunk ^/branches/branch -m 'Create branch from trunk' # Commit a subdir with a file in it in the trunk and commit it. $SVN switch --ignore-ancestry ^/trunk createAndCommitSubdirWithFile 'Committed on trunk' # Commit a subdir with a file in it in the branch and commit it. $SVN switch ^/branches/branch createAndCommitSubdirWithFile 'Committed on branch' # Merge the trunk and display any svn:mergeinfo properties. # (Remove --non-interactive if testing svn prior to 1.7) $SVN merge --non-interactive ^/trunk || true $SVN propget svn:mergeinfo -R . >actual.out echo '. - /trunk:2-4' >expected.out $SVN --version | head -1 if diff -q actual.out expected.out; then echo Success else echo 'Test failed!' echo 'Expected output:' cat expected.out echo 'Actual output:' cat actual.out exit 1 fi