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