This is a feature branch for teaching 'svn patch' to parse old mode 100644 new mode 100755 lines generated by 'git diff'. Steps: - [DONE] Implement parse-diff.c support - [DONE] Implement "make it executable" support, with tests - [DONE] Implement "make it non-executable" support, with tests - [DONE] Handle svn:executable and 'new mode' lines both present - [DONE] parser: Review handling of modes other than 0644/0755 Consider checking "mode & 0111" - [DONE] check rename/copy with mode change; ensure test coverage - [DONE] ensure binary diff & mode changes interact properly - [DONE] Teach 'svn diff --git' to emit mode information (executability) - In addition to the standard propchange form used for all user properties, for compatibility with released 'svn patch' versions - Consider the case of an unversioned file being one side of the diff. - Use-case? Who are the current consumers of 'svn diff --git'? - [TODO] Support symlinks as well (mode 120000) - add the 'svn:special' property - map the link target representation svn to/from git - [DONE] teach parse-diff.c to parse mode 120000 - [TODO] forbid mode=120000 and svn:special on one file (don't know how to parse file contents) - [TODO] munge hunks: repository normal form ↔ just the symlink target - [TODO] add symlink, remove symlink - [TODO] parse mode from "index" lines on file hunks [required for next item] - [TODO] change symlink target - [TODO] change plain file to symlink - [TODO] change symlink to plain file - [TODO] teach 'svn diff --git' to emit mode information (symlinks) [supporting symlinks is orthogonal to supporting mode changes]