This error is about the working copy lock, not user locks. This lock makes sure only a single operation can change (a part of) the working copy at the same time, to avoid breaking your working copy.
The problem here is that patch locks only one working copy, but your patch tries to change multiple working copies. (Directory externals are separate working copies). This is a scenario that was never designed for patch. Bert From: Griffin Myers Sent: Tuesday, November 4, 2014 2:56 PM To: users@subversion.apache.org 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