You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@subversion.apache.org by Ne...@rwe.com on 2011/01/13 17:12:04 UTC

Subversion Issue: 'delete file' not transmitted to server when performing multiple merge-commit

Dear Users,

My user reported that an extra file existed in the repository after
performing a merge (claiming this file was not in his working copy prior
to the commit).  My initial thought was they had done the merges out of
sequence causing the deletion of a file before it was added, the user
was adamant this was not the case.

I created a copy of the repository (up to the revision immediately
before the merge) and reproduced the merge.  The working copy was
correct however once committed the extra file appeared in the
repository.  What appears to be the issue was when a revision containing
and add folder with files is merged, then delete one of the files in a
subsequent revision merge, the working copy is correct but the "delete"
was not transmitted to the server (only the add folder & contents).   If
each merge revision was committed separately then the issue does not
appear (this is *not* a practical work-around since the merge-commit is
one logical unit of work - i.e. all the changes related to one defect).

We are currently using Subversion 1.6.12 (client & server), Apache 2.2
(server) and TortoiseSVN 1.6.10 (clients) in a Windows only environment
(Server 2003 / XP).

I have created a test script that reproduces the issue (the file that
should be deleted is 'trunk/folder3/file6.txt')

This script should be run twice (copy it to two separate directories),
once performing three merges with three commits (gives correct result)
and once performing three merges with one commit.

REM build starting structure
md start
md start\branches
md start\tags
md start\trunk
md start\trunk\folder1
echo > start\trunk\folder1\file1.txt
md start\trunk\folder2
echo > start\trunk\folder2\file2.txt
echo > start\trunk\folder2\file3.txt

REM initiate repository (set repo= saves code)
svnadmin create repo
set repo=file:///%cd:\=/%/repo

svn import start %repo% -m "Import Starting Structure"
svn copy %repo%/trunk %repo%/branches/dev -m ""

svn checkout %repo%/branches/dev dev

REM add new files 
echo > dev\folder1\file4.txt
svn add dev/folder1/file4.txt
echo > dev\folder2\file5.txt
svn add dev/folder2/file5.txt
svn commit dev -m "Add some new files"

REM add new folder 
md dev\folder3
echo > dev\folder3\file6.txt
echo > dev\folder3\file7.txt
svn add dev/folder3
REM modify a file
echo >> dev\folder2\file3.txt
svn commit dev -m "Add new folder/files + change a file"

svn del dev/folder2/file5.txt
svn del dev/folder3/file6.txt
svn commit dev -m "Delete some files"

svn checkout %repo%/trunk trunk

svn merge %repo%/branches/dev@3 trunk
REM comment-out on second run!!!
svn commit trunk -m "Merge changes back"

svn merge %repo%/branches/dev@4 trunk
REM comment-out on second run!!!
svn commit trunk -m "Merge changes back"

svn merge %repo%/branches/dev@5 trunk
svn commit trunk -m "Merge changes back"

svn ls -R trunk

The working copy (trunk) will be identical after both runs, however the
repositories are different.  The file "file6.txt" that was deleted from
the "branches/dev/folder3" in revision 5 is not removed from
"trunk/folder3" when merged at the same time that this folder was added
in revision 4.

Awaiting an acknowledgement (and a "buddy" to confirm).

Regards
Neil Tuffs
Configuration & Release Management

RWE Supply & Trading GmbH
Windmill Hill Business Park
Whitehill Way
Swindon
SN5 6PB

Tel (Internal):	7 322 2705
Tel (External):	+44 (0)1793 892705
Fax:	+44 (0)1793 893560
E-mail:	neil.tuffs@rwe.com




Re: Subversion Issue: 'delete file' not transmitted to server when performing multiple merge-commit

Posted by Philip Martin <ph...@wandisco.com>.
<Ne...@rwe.com> writes:

> My user reported that an extra file existed in the repository after
> performing a merge (claiming this file was not in his working copy prior
> to the commit).  My initial thought was they had done the merges out of
> sequence causing the deletion of a file before it was added, the user
> was adamant this was not the case.

A simpler sequence:

  rm -rf repo wc file
  touch file
  url=file://`pwd`/repo
  svnadmin create repo

  svn mkdir -mm $url/trunk
  svn cp -mm $url/trunk $url/branch
  svn import -mm file $url/branch/folder/file
  svn rm -mm $url/branch/folder/file

  svn co $url/trunk wc
  svn merge $url/branch@3 wc
  svn merge $url/branch@4 wc

The first merge adds a folder containing a file, the second merge
deletes the file.  After the two merges 1.6 shows status:

 M    wc
A  +  wc/folder

This is a problem because folder's history is a copy from a revision
where it contains the file, so the file will exist in repository after
the commit.  Using 1.7 status shows:

 M    wc
A  +  wc/folder
D  +  wc/folder/file

so 1.7 will delete explicitly the file when the merge is committed.

-- 
Philip

Re: Subversion Issue: 'delete file' not transmitted to server when performing multiple merge-commit

Posted by Philip Martin <ph...@wandisco.com>.
<Ne...@rwe.com> writes:

> My user reported that an extra file existed in the repository after
> performing a merge (claiming this file was not in his working copy prior
> to the commit).  My initial thought was they had done the merges out of
> sequence causing the deletion of a file before it was added, the user
> was adamant this was not the case.

A simpler sequence:

  rm -rf repo wc file
  touch file
  url=file://`pwd`/repo
  svnadmin create repo

  svn mkdir -mm $url/trunk
  svn cp -mm $url/trunk $url/branch
  svn import -mm file $url/branch/folder/file
  svn rm -mm $url/branch/folder/file

  svn co $url/trunk wc
  svn merge $url/branch@3 wc
  svn merge $url/branch@4 wc

The first merge adds a folder containing a file, the second merge
deletes the file.  After the two merges 1.6 shows status:

 M    wc
A  +  wc/folder

This is a problem because folder's history is a copy from a revision
where it contains the file, so the file will exist in repository after
the commit.  Using 1.7 status shows:

 M    wc
A  +  wc/folder
D  +  wc/folder/file

so 1.7 will delete explicitly the file when the merge is committed.

-- 
Philip