[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

[PATCH] Inconsistent behavior in cat command

From: Noorul Islam K M <noorul_at_collab.net>
Date: Mon, 27 Dec 2010 16:21:02 +0530

Julian Foad <julian.foad_at_wandisco.com> writes:

> On Thu, 2010-12-02, Noorul Islam K M wrote:
>
>> Noorul Islam K M <noorul_at_collab.net> writes:
>>
>> > When I was trying to come up with a patch for issue 3713, I observed the
>> > following.
>> >
>> > For example I have two files 1.txt and 2.txt in a repository located at
>> > file:///tmp/testrepo
>> >
>> > svn cat behaves differently for local paths and URLs. See the
>> > illustration below.
>> >
>> > noorul_at_noorul:/tmp/wc/testrepo$ svn cat 1.txt 2.txt
>> > 1
>> > 2
>> >
>> > A) Local non-existent target followed by existing target
>> >
>> > noorul_at_noorul:/tmp/wc/testrepo$ svn cat 3.txt 1.txt
>> > svn: warning: '/tmp/wc/testrepo/3.txt' is not under version control
>> > 1
>> >
>> > B) Non-existent URL followed by existing URL
>> >
>> > noorul_at_noorul:/tmp/wc/testrepo$ svn cat ^/3.txt ^/1.txt
>> >
>> > svn: File not found: revision 1, path '/3.txt'
>> >
>> >
>> > In case A, even though the first target was non-existent it performs cat
>> > operation on the second target but in the case of B, svn errors out at
>> > the first failure itself.
>> >
>> > I am not sure about behavior of other svn commands which accepts
>> > multiple targets. When I discussed this Julian in IRC, he said a
>> > discussion is needed to come up with standardized behavior across svn
>> > commands. Any thoughts?
>> >
>>
>> Any updates?
>
> Hi Noorul.
>
> A good way to start a discussion of this sort is to:
>
> list the possible solutions;
> find out and describe how the other subcommands behave;

I checked 'svn info' and it behaves the same way for both wc and URL.

> say what you think is good and bad about each possible solution;
> say which solution you think we should choose.
>
> That will make it much easier for readers to respond.

I figured out that for non-existent URL path, svn_client_cat2 returns
SVN_ERR_FS_NOT_FOUND which needs to be caught by svn_cl__try. Therefore
I passed this code as one the arguments.

Attached is the patch. All tests pass with this patch.

Log

[[[
Make 'svn cat' not to error out when one of the URL targets do not
exist.

* subversion/svn/cat-cmd.c
  (svn_cl__cat): Pass SVN_ERR_FS_NOT_FOUND to svn_cl__try in order to
  catch the error, print warning and proceed with other targets.

Patch by: Noorul Islam K M <noorul{_AT_}collab.net>
]]]

Thanks and Regards
Noorul

Index: subversion/svn/cat-cmd.c
===================================================================
--- subversion/svn/cat-cmd.c (revision 1053010)
+++ subversion/svn/cat-cmd.c (working copy)
@@ -78,6 +78,7 @@
                            SVN_ERR_UNVERSIONED_RESOURCE,
                            SVN_ERR_ENTRY_NOT_FOUND,
                            SVN_ERR_CLIENT_IS_DIRECTORY,
+ SVN_ERR_FS_NOT_FOUND,
                            SVN_NO_ERROR));
     }
   svn_pool_destroy(subpool);
Received on 2010-12-27 11:53:42 CET

This is an archived mail posted to the Subversion Dev mailing list.