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 -- Dmitry Pavlenko, TMate Software, http://subgit.com/ - git-svn bridge