#!/bin/sh

# Message-ID: <4DDC40D5.4070409@gmail.com>
# Date: Tue, 24 May 2011 19:35:49 -0400
# From: David Tombs <cyan.spam@gmail.com>
# To: users@subversion.apache.org
# Subject: Re: tree conflict: local add, incoming add upon merge

URL=file:///`pwd`/repos

rm -rf repos import-me trunk branch

svnadmin create repos

echo "### Making a Greek Tree for import..."
mkdir import-me
mkdir import-me/trunk
mkdir import-me/tags
mkdir import-me/branches
mkdir import-me/trunk/A
echo "This is the file 'iota'."        > import-me/trunk/iota
echo "This is the file 'A/mu'."        > import-me/trunk/A/mu
echo "### Done."
echo ""
echo "### Importing it..."
(cd import-me; svn import -q -m "Initial import." $URL)
echo "### Done."
echo ""

svn cp $URL/trunk $URL/branches/br1 -m "branch br1"

svn co -q $URL/trunk trunk
svn co -q $URL/branches/br1 branch

cd trunk
echo "changed iota on trunk" > iota # Just for fun.
svn mkdir config
echo "trunk foo" > config/foo.java
svn add config/foo.java
svn ci -m "config dir on trunk"
cd ..

cd branch
svn mkdir config
echo "branch bar" > config/bar.java
svn add config/bar.java
svn ci -m "config dir on branch"

set -x

# Do a "sync" merge on the branch.

svn up
# Avoid a tree conflict by deleting the victim before the merge.
svn rm config
svn merge ^/trunk

# Reveal the dir's child by reverting it.  In 1.7 (r1127008) the
# revert has no effect.  But config/bar.java is visible in the status,
# which is inconsistent.
svn revert config/bar.java
svn st -v
svn info config/bar.java
svn ci -m "Sync merge from trunk.  Revert deleted child."
svn st
svn up

# 1.6.16: The following svn commands fail because
# ^/branches/br1/config/bar.java doesn't exist in the repository!
svn log config/bar.java
echo "more bar text" >> config/bar.java
svn ci -m "Modify config/bar."

exit

# An alternate workaround: Let the tree conflict appear.  Do a manual
# copy after the merge.
svn up
svn merge ^/trunk
svn st -v
svn info config
svn resolved config
svn cp ^/trunk/config/foo.java config
svn ci -m "Sync merge from trunk.  Merged conflicted 'config' tree by hand."
