It is known that the commands which takes multiple targets does not behave in a consistent manner. I analyzed the behaviour of some of the commands, to see how they works when, multiple targets are passed and one of them is a non-existing target. Also various svn commands return inconsistent codes to the shell (See one such issue http://subversion.tigris.org/issues/show_bug.cgi?id=3713).
Commands are executed with three existing targets 1.txt, 2.txt and 3.txt along with non-existing target 4.txt. ** add: noorul@noorul:/tmp/wc/repo1.7$ ~/projects/subversion/builds/trunk/bin/svn add 1.tx t 4.txt 2.txt 3.txt A 1.txt svn: warning: '/tmp/wc/repo1.7/4.txt' not found A 2.txt A 3.txt noorul@noorul:/tmp/wc/repo1.7$ echo $? 0 ** blame: noorul@noorul:/tmp/wc/repo1.7$ ~/projects/subversion/builds/trunk/bin/svn blame 1. txt 4.txt 2.txt 3.txt 2 noorul Adding one line svn: The node '/tmp/wc/repo1.7/4.txt' was not found. noorul@noorul:/tmp/wc/repo1.7$ echo $? 1 ** cat: noorul@noorul:/tmp/wc/repo1.7$ ~/projects/subversion/builds/trunk/bin/svn cat 1.tx t 4.txt 2.txt 3.txt Adding one line svn: warning: '/tmp/wc/repo1.7/4.txt' is not under version control noorul@noorul:/tmp/wc/repo1.7$ echo $? 0 ** changelist: noorul@noorul:/tmp/wc/repo1.7$ ~/projects/subversion/builds/trunk/bin/svn cl testl ist 1.txt 4.txt 2.txt 3.txt A [testlist] 1.txt svn: warning: The node '/tmp/wc/repo1.7/4.txt' was not found. noorul@noorul:/tmp/wc/repo1.7$ echo $? 0 ** commit: Changes in 1.txt and 2.txt noorul@noorul:/tmp/wc/repo1.7$ ~/projects/subversion/builds/trunk/bin/svn ci 1.txt 4.txt 2.txt 3.txt -m "Commit" svn: Commit failed (details follow): svn: '/tmp/wc/repo1.7/4.txt' is not under version control noorul@noorul:/tmp/wc/repo1.7$ echo $? 1 ** copy: noorul@noorul:/tmp/wc/repo1.7$ ~/projects/subversion/builds/trunk/bin/svn copy 1.t xt 4.txt 2.txt 3.txt temp svn: Path '/tmp/wc/repo1.7/4.txt' does not exist noorul@noorul:/tmp/wc/repo1.7$ echo $? 1 ** delete: noorul@noorul:/tmp/wc/repo1.7$ ~/projects/subversion/builds/trunk/bin/svn del 1.tx t 4.txt 2.txt 3.txt D 1.txt svn: '/tmp/wc/repo1.7/4.txt' does not exist noorul@noorul:/tmp/wc/repo1.7$ echo $? 1 ** diff: noorul@noorul:/tmp/wc/repo1.7$ ~/projects/subversion/builds/trunk/bin/svn diff 1.t xt 4.txt 2.txt 3.txt -c 2 Index: 1.txt =================================================================== --- 1.txt (revision 1) +++ 1.txt (revision 2) @@ -0,0 +1 @@ +Adding one line svn: The node '/tmp/wc/repo1.7/4.txt' was not found. noorul@noorul:/tmp/wc/repo1.7$ echo $? 1 ** info: noorul@noorul:/tmp/wc/repo1.7$ ~/projects/subversion/builds/trunk/bin/svn info 1.t xt 4.txt 2.txt 3.txt Path: 1.txt Name: 1.txt Working Copy Root Path: /tmp/wc/repo1.7 URL: file:///tmp/repo1.7/1.txt Repository Root: file:///tmp/repo1.7 Repository UUID: 25579947-ca24-4ba8-ad04-23900ccc89dc Revision: 5 Node Kind: file Schedule: normal Last Changed Author: noorul Last Changed Rev: 3 Last Changed Date: 2011-01-11 12:05:08 +0530 (Tue, 11 Jan 2011) Text Last Updated: 2011-01-11 12:35:28 +0530 (Tue, 11 Jan 2011) Checksum: dd3cee37d491d7690669eb9a5f2c3744bd851253 svn: warning: The node '/tmp/wc/repo1.7/4.txt' was not found. Path: 2.txt Name: 2.txt Working Copy Root Path: /tmp/wc/repo1.7 URL: file:///tmp/repo1.7/2.txt Repository Root: file:///tmp/repo1.7 Repository UUID: 25579947-ca24-4ba8-ad04-23900ccc89dc Revision: 5 Node Kind: file Schedule: normal Last Changed Author: noorul Last Changed Rev: 3 Last Changed Date: 2011-01-11 12:05:08 +0530 (Tue, 11 Jan 2011) Text Last Updated: 2011-01-11 12:03:10 +0530 (Tue, 11 Jan 2011) Checksum: 9b22e741d575bdad23521c3cdbdbf93c818291ee Path: 3.txt Name: 3.txt Working Copy Root Path: /tmp/wc/repo1.7 URL: file:///tmp/repo1.7/3.txt Repository Root: file:///tmp/repo1.7 Repository UUID: 25579947-ca24-4ba8-ad04-23900ccc89dc Revision: 5 Node Kind: file Schedule: normal Last Changed Author: noorul Last Changed Rev: 1 Last Changed Date: 2011-01-11 11:51:39 +0530 (Tue, 11 Jan 2011) Text Last Updated: 2011-01-11 11:47:29 +0530 (Tue, 11 Jan 2011) Checksum: da39a3ee5e6b4b0d3255bfef95601890afd80709 svn: A problem occurred; see other errors for details noorul@noorul:/tmp/wc/repo1.7$ echo $? 1 ** list: noorul@noorul:/tmp/wc/repo1.7$ ~/projects/subversion/builds/trunk/bin/svn ls 1.txt 4.txt 2.txt 3.txt 1.txt svn: The node '/tmp/wc/repo1.7/4.txt' was not found. noorul@noorul:/tmp/wc/repo1.7$ echo $? 1 ** log: URL targets. Multiple WC targets are not allowed. noorul@noorul:/tmp/wc/repo1.7$ ~/projects/subversion/builds/trunk/bin/svn log ^/ 1 .txt 4.txt 2.txt svn: File not found: revision 5, path '/4.txt' noorul@noorul:/tmp/wc/repo1.7$ echo $? 1 ** revert: noorul@noorul:/tmp/wc/repo1.7$ ~/projects/subversion/builds/trunk/bin/svn del 1.tx t 2.txt 3.txt D 1.txt D 2.txt D 3.txt noorul@noorul:/tmp/wc/repo1.7$ ~/projects/subversion/builds/trunk/bin/svn revert 1 .txt 4.txt 2.txt 3.txt Reverted '1.txt' Skipped '4.txt' Reverted '2.txt' Reverted '3.txt' noorul@noorul:/tmp/wc/repo1.7$ echo $? 0 ** Summary: Most of the commands did not proceed with next target when one of them is non-existing. | Command | Return Code | Continue | |------------+-------------+----------| | add | 0 | Y | | blame | 1 | N | | cat | 1 | Y | | changelist | 0 | N | | commit | 1 | N | | copy | 1 | N | | delete | 1 | N | | diff | 1 | N | | info | 1 | Y | | list | 1 | N | | log | 1 | N | | revert | 0 | Y | The commands add, cat, info and revert continues execution even if it finds one of the targets non-existing. All of them returns 0 to the shell except 'info' which returns 1. Also info prints svn: A problem occurred; see other errors for details at the end of the execution which tells the user that something went wrong during execution. This is not the case with 'add', 'cat' and 'revert'. I think these three commands also should return 1 and print the message which 'info' does, so that users does not have to scroll up to see the warnings to decide something went wrong. Among these revert prints 'Skipped' message and others print 'svn: warning: ..' message. I think commit operation is an atomic one, therefore it does make sense when it errors out when one of the target is invalid. I am not sure why all the other commands errors out when one of the targets is non-existing. I am sending out this mail so that we can decide on a generic behaviour. Any thoughts? Thanks and Regards Noorul