Please Cc responses as I am not subscribed to the list. I'm primarily a Tortoise user under Windows, but have recently needed to start using the command line client more frequently. Our development environment heavily leverages externals and developers often distribute patches as a means for code review. With the command line client I've discovered that "svn patch" fails with an E155005: No write-lock error when applying a patch which adds or deletes files which span externals. I've observed this with both 1.7.7 and 1.8.10. I've had no problems when applying such patches with the Tortoise patch mechanism. A trivial example for clarity:
Assume the following wc structure: test1/ fileA.txt externals/ test2/ fileB.txt [gmyers@pc test1]$ svn -v status 2 2 gmyers . 2 2 gmyers externals X externals/test2 2 1 gmyers fileA.txt Performing status on external item at 'externals/test2': 1 1 gmyers /home/gmyers/svnadmin_test/demo/test1/externals/test2 1 1 gmyers /home/gmyers/svnadmin_test/demo/test1/externals/test2/fileB.txt Now assume I have three patch files which perform the following operations: 1) Add a file file2.dat to externals/test2/, 2)Delete externals/test2/fileB.txt, 3) Modify externals/test2/fileB.txt. The patches were all generated by performing the desired task and dumping the result from svn diff. [gmyers@pc test1]$ cat add.patch Index: externals/test2/file2.dat =================================================================== --- externals/test2/file2.dat (revision 0) +++ externals/test2/file2.dat (working copy) @@ -0,0 +1 @@ +This is file2. [gmyers@pc test1]$ cat delete.patch Index: externals/test2/fileB.txt =================================================================== --- externals/test2/fileB.txt (revision 1) +++ externals/test2/fileB.txt (working copy) @@ -1 +0,0 @@ -This is fileB.txt [gmyers@pc test1]$ cat modify.patch Index: externals/test2/fileB.txt =================================================================== --- externals/test2/fileB.txt (revision 1) +++ externals/test2/fileB.txt (working copy) @@ -1 +1,3 @@ This is fileB.txt + +Add some text. Now I'll attempt to apply the patches. The "add" patch returns E155005 and although it creates the new file2.dat file it fails to add it to svn: [gmyers@pc test1]$ svn patch add.patch svn: E155005: No write-lock in '/home/gmyers/svnadmin_test/demo/test1/externals/test2' The "delete" patch returns E155005 and does nothing: [gmyers@pc test1]$ svn patch delete.patch svn: E155005: No write-lock in '/home/gmyers/svnadmin_test/demo/test1/externals/test2' The "modify" patch succeeds as expected: [gmyers@pc test1]$ svn patch modify.patch U externals/test2/fileB.txt I'm wondering if this is a bug or the intended behavior? If it is intended then what is the reasoning behind the apparent need for a lock only for adds/deletes to externals but not for modify operations? Is there any sort of recommended workaround for this issue? Thanks, Griffin Myers