Hi folks.

I faced the following problem. The command
  svn merge -r 3:4 -r 4:5 ^^/trunk
works smoothly while command
  svn merge -r 3:5 ^^/trunk
results in a text conflict. This seems like a buggy behavior (since
the two merges are equivalent).

I reproduced it in a simple situation when trunk contains only a
single file. Here is a list of revisions:

r1. Initial directory structure (trunk and branches).
r2. Add file trunk/foo.
r3. Create branch branches/test from trunk.
r4. Set svn:eol-style to native on trunk/foo.
r5. Modify text in trunk/foo.

After that I checkout branches/test and try to perform the merge
(which only sets svn:eol-style on trunk/foo and modifies its content).
Then I get the aforementioned conflict.

I performed the test with the following Subversion version:

svn, version 1.9.0 (r1692801)
   compiled Aug  3 2015, 21:00:08 on x86-microsoft-windows

I attach the script (cmd batch file) which creates local repository
and performs all the preparation to demonstrate the problem (please
remove the .txt extension to run it).

My guess is that svn:eol-style change is the root of the problem.
Could please somebody explain the behavior or confirm that this is a
bug?
@echo off

cd %~dp0%

if exist test_svn (
  echo ERROR: test_svn already exists. Please remove it first
  exit /b 1
)

echo *** Creating directory test_svn
mkdir test_svn
cd test_svn
echo *** Creating repo
svnadmin create repo

rem A trick to get normal svn URL with forward slashes
set repo_path=file://%~p0%/test_svn/repo
set repo_path=%repo_path:\=/%
echo *** Repository address is %repo_path%

echo *** Creating initial directory structure (trunk and branches)
svn co %repo_path% full_repo
cd full_repo
md trunk
md branches
svn add trunk branches
svn ci -m "initial tree"
cd ..

echo *** Checking out trunk and creating simple file foo
svn co %repo_path%/trunk trunk
cd trunk
echo Simple file > foo
svn add foo
svn ci -m "added foo"

echo *** Creating branch test
svn copy . ^^/branches/test -m "create branch"

echo *** Setting svn:eol-style=native on trunk/foo
svn propset svn:eol-style native foo
svn ci -m "set property"

echo *** Modifying trunk/foo
echo Modification >> foo
svn ci -m "modified foo"

echo *** Checking out branches/test
cd ..
svn co %repo_path%/branches/test
cd test

echo.
echo.
echo Now while in test_svn/test directory:
echo.
echo 1. Try
echo    ^>  svn merge -r 3:5 ^^/trunk
echo    and you get a conflict
echo 2. Revert (svn revert -R .) and try
echo    ^>  svn merge -r 3:4 -r 4:5 ^^/trunk
echo    and you do not get any conflicts

Reply via email to