You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@subversion.apache.org by "Andrey (JIRA)" <ji...@apache.org> on 2016/11/23 12:20:59 UTC

[jira] [Updated] (SVN-4662) svn diff-revert-patch breaks moved files and folders

     [ https://issues.apache.org/jira/browse/SVN-4662?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Andrey updated SVN-4662:
------------------------
    Description: 
Steps to reproduce:
1. Create empty repository on local drive, for example, "repo"
2. Checkout a working copy: repo_root
3. Add directory structure:
  trunk/dir1/file1.txt
  trunk/dir1/file2.txt
  trunk/dir1/file3.txt
  trunk/dir2/
(actually, the structure can be anything, does not much matter)
4. switch current directory into the trunk/
5. make a local change with file: dir1/file1.txt
6. make a move (remove all other files/folders not need to be moved):
>svn move dir1/file1.txt dir2/file1.txt
A         dir2\file1.txt
D         dir1\file1.txt
>svn move dir1/file2.txt dir2/file2_.txt
A         dir2\file2_.txt
D         dir1\file2.txt
>svn remove dir1
D         dir1
D         dir1\file3.txt

7. make a patch:
>svn diff . > trunk.patch

8. revert all back:
>svn revert . -R
Reverted 'dir1'
Reverted 'dir1\file1.txt'
Reverted 'dir1\file2.txt'
Reverted 'dir1\file3.txt'
Reverted 'dir2\file1.txt'
Reverted 'dir2\file2_.txt'

9. apply the patch:
>svn patch trunk.patch .
D         dir1\file1.txt
D         dir1\file2.txt
D         dir1\file3.txt
D         dir1
Skipped missing target: 'dir2\file1.txt'
Summary of conflicts:
  Skipped paths: 1

As you see, entire set of files + 1 change has lost. Commit of this will be definitely broken and the consequenced revert is immenent.

In mine case it was the TortoiseSvn where the implementation of move semantic in the patch was a slightly different and at least has saved some files from complete loss.


  was:
Steps to reproduce:
1. Create empty repository on local drive, for example, "repo"
2. Checkout a working copy: repo_root
3. Add directory structure:
  trunk/dir1/file1.txt
  trunk/dir1/file2.txt
  trunk/dir1/file3.txt
  trunk/dir2/
(actually, the structure can be anything, does not much matter)
4. switch current directory into the trunk/
5. make a move (remove all other files/folders not need to be moved):
>svn move dir1/file1.txt dir2/file1.txt
A         dir2\file1.txt
D         dir1\file1.txt
>svn move dir1/file2.txt dir2/file2_.txt
A         dir2\file2_.txt
D         dir1\file2.txt
>svn remove dir1
D         dir1
D         dir1\file3.txt

6. make a patch:
>svn diff . > trunk.patch

7. revert all back:
>svn revert . -R
Reverted 'dir1'
Reverted 'dir1\file1.txt'
Reverted 'dir1\file2.txt'
Reverted 'dir1\file3.txt'
Reverted 'dir2\file1.txt'
Reverted 'dir2\file2_.txt'

8. apply the patch:
>svn patch trunk.patch .
D         dir1\file1.txt
D         dir1\file2.txt
D         dir1\file3.txt
D         dir1

As you see, entire set of changes was lost. Commit of this will be definitely broken and the consequenced revert is immenent.

In mine case it was the TortoiseSvn where the implementation of move semantic in the patch was a slightly different and at least has saved some files from complete loss.



> svn diff-revert-patch breaks moved files and folders
> ----------------------------------------------------
>
>                 Key: SVN-4662
>                 URL: https://issues.apache.org/jira/browse/SVN-4662
>             Project: Subversion
>          Issue Type: Bug
>    Affects Versions: 1.9.4
>         Environment: windows 7 x64, tortoisesvn command line tools
>            Reporter: Andrey
>
> Steps to reproduce:
> 1. Create empty repository on local drive, for example, "repo"
> 2. Checkout a working copy: repo_root
> 3. Add directory structure:
>   trunk/dir1/file1.txt
>   trunk/dir1/file2.txt
>   trunk/dir1/file3.txt
>   trunk/dir2/
> (actually, the structure can be anything, does not much matter)
> 4. switch current directory into the trunk/
> 5. make a local change with file: dir1/file1.txt
> 6. make a move (remove all other files/folders not need to be moved):
> >svn move dir1/file1.txt dir2/file1.txt
> A         dir2\file1.txt
> D         dir1\file1.txt
> >svn move dir1/file2.txt dir2/file2_.txt
> A         dir2\file2_.txt
> D         dir1\file2.txt
> >svn remove dir1
> D         dir1
> D         dir1\file3.txt
> 7. make a patch:
> >svn diff . > trunk.patch
> 8. revert all back:
> >svn revert . -R
> Reverted 'dir1'
> Reverted 'dir1\file1.txt'
> Reverted 'dir1\file2.txt'
> Reverted 'dir1\file3.txt'
> Reverted 'dir2\file1.txt'
> Reverted 'dir2\file2_.txt'
> 9. apply the patch:
> >svn patch trunk.patch .
> D         dir1\file1.txt
> D         dir1\file2.txt
> D         dir1\file3.txt
> D         dir1
> Skipped missing target: 'dir2\file1.txt'
> Summary of conflicts:
>   Skipped paths: 1
> As you see, entire set of files + 1 change has lost. Commit of this will be definitely broken and the consequenced revert is immenent.
> In mine case it was the TortoiseSvn where the implementation of move semantic in the patch was a slightly different and at least has saved some files from complete loss.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)