[PATCH] Re: Directory becomes file when applying patch
From: Dmitry Pavlenko <pavlenko_at_tmatesoft.com>
Date: Thu, 19 Jul 2018 19:57:05 +0200
Anyway I've created a test for the case. I'm not 100% sure in the expected
The test fails because it expects a directory with a property to be created
-- Dmitry Pavlenko, TMate Software, http://subgit.com/ - git-svn bridge > Hello! > When I apply Git format patch that adds a directory with properties, a file > is added instead. > > Here I provide a reproducing script and also add a file for comparison. > > I think the origin of the problem in the fact that SVN patch doesn't keep > "node kind". But a patch in "svn diff --git" format does. Here's the example > of the patch. Notice > > a) "Property changes on: dir" and "Property changes on: file" lines; > b) "new file mode 10644" for file and no such line for directory; > > allowing to distinguish between files and directories. > > I don't know whether it's a known issue or not but I think it would be nice > to infer "node kind" from that information and also (if this is not already > done) by the following logic: if patch changes "dir" and "dir/someFile", > then "dir" is probably a directory. > > > Index: /tmp/wc/dir > =================================================================== > diff --git a/dir b/dir > --- a/dir (nonexistent) > +++ b/dir (working copy) > > Property changes on: dir > ___________________________________________________________________ > Added: propName > ## -0,0 +1 ## > +propValue > \ No newline at end of property > Index: /tmp/wc/file > =================================================================== > diff --git a/file b/file > new file mode 10644 > > Property changes on: file > ___________________________________________________________________ > Added: propName > ## -0,0 +1 ## > +propValue > \ No newline at end of property > > > > The reproducing script: > > > #!/bin/sh > > SVN=svn > > #1. Create an empty SVN repository. > > REPOSITORY_PATH="$PWD/svn.repo" > > svnadmin create "$REPOSITORY_PATH" > > # 2. Add a file with properties and a directory with properties to the > repository. > > WC_PATH="/tmp/wc" > REPOSITORY_URL="file://$REPOSITORY_PATH" > > $SVN co $REPOSITORY_URL $WC_PATH > > touch $WC_PATH/file > > $SVN add $WC_PATH/file > $SVN mkdir $WC_PATH/dir > > $SVN propset propName propValue $WC_PATH/file > $SVN propset propName propValue $WC_PATH/dir > > # 3. Create diff between repository HEAD and working copy: > > PATCH_FILE=/tmp/patch > > $SVN diff --git $REPOSITORY_URL $WC_PATH > $PATCH_FILE > > # 4. Cleanup the working copy > > $SVN revert $WC_PATH/file > $SVN revert $WC_PATH/dir > > rm $WC_PATH/file > rmdir $WC_PATH/dir > > # 5. Apply the patch back: > > $SVN patch $PATCH_FILE $WC_PATH > > # 6. Make sure that the file is file and that dir is directory > > FILE_TYPE=`stat -c "%F" $WC_PATH/file` > DIRECTORY_TYPE=`stat -c "%F" $WC_PATH/dir` > > if [ "$FILE_TYPE" != "regular empty file" ] ; then > echo "================" > echo "File is not file but $FILE_TYPE" > echo "================" > fi > > if [ "$DIRECTORY_TYPE" != "directory" ] ; then > echo "================" > echo "Dir is not directory but $DIRECTORY_TYPE" > echo "================" > fi
This is an archived mail posted to the Subversion Dev mailing list.