views:

2048

answers:

3

This should be a really simple question but somehow I cannot find the answer to it. My apologies if I have missed something blindingly obvious.

I am writing a script which will add a new project in the repository, based on the name supplied by the user. Part of this involves checking that an url with the same name does not already exist on the repository.

In the repository, all the projects of our team are stored in

https://developernetwork.repo.net/svn/Projects/

Let's say that the user wants to call the project "Calculator" and runs the script. In this case, we need to ensure that the following does not already exist in the repository

https://developernetwork.repo.net/svn/Projects/Calculator/

Is there an svn command which I can use to accomplish that? Unfortunately I cannot see an appropriate command I can use in the svn documentation (http://svnbook.red-bean.com/en/1.0/svn-book.html) at all.

Thank you.

+5  A: 

You can just use

svn ls https://developernetwork.repo.net/svn/Projects/Calculator/

It will tell you if the repository(directory) exist or not.

Liwen
This works. If the directory does not exist I get the following error:svn: URL 'https://developernetwork.repo.net/svn/Projects/Calculator/' non-existent in that revision. That should be a good enough search string.Just out of interest, is there a better way for the script to analyse the results than searching the text output for a "non-existent in that revision" match?
Andy
As suggested in the other comment, searching for 'non-existent' might not be ideal as the error msg changes from version to version, e.g. svn 1.6.1 has changed the error msg to 'svn: No repository found in 'svn+ssh://'. However, parsing xml is not reliable as of svn 1.6.1, if the repository doesn't exsit, it WILL return an incomplete xml which is not parsable. That would make it worse. The best way I can think probably is just to check if the original repository url you sent in is in the return msg. It seems to be guranteed that it will get returned if something went wrong.
Liwen
Thank you. Having to analyse the text output of commands is one of the least enjoyable aspects of scripting, but it has to be done. I will check for the repository url in the return message then.
Andy
Have you tried looking at the return code in these cases?
Willbill
+4  A: 

To receive information about any existing repository (e.g. for possibly enriching an error message) you could also use

svn info https://developernetwork.repo.net/svn/Projects/Calculator/

For a non-existing project it will just return

svn: Could not open the requested SVN filesystem
AlexH
Actually, my version of Slik SVN returned:https://developernetwork.repo.net/svn/Projects/Calculator/: (Not a valid URL)svn: A problem occurred; see other errors for detailsHowever, "Not a valid URL" should be good enough search string.Just out of interest, is there a better way for the script to analyse the results than searching the text output for a "Not a valid URL" string?
Andy
Given the different possible error messages different build of svn might give, you should consider to parse the output string for a positive pattern rather than a negative. That is, test for the occurrence of something you won't get when the repo does NOT exist. Here, CollabNet SVN 1.6.1 (Windows) provides the ability to turn on xml output via the `--xml` parameter. Personally I'd just check for the existence of the UUID element, that should be included in any `info` data (correct me if not).
AlexH
Thank you. We do not even have server 1.5.0 running yet, so I will note down your comment and put this in the to-do list.
Andy
+3  A: 

Instead of checking for return strings I would just check for the return code:

both

svn ls REPOSITORY/PATH

et

svn info REPOSITORY/PATH

return 0 if all went fine, and 1 if things went wrong; you can quickly check it out:

echo $?

so in a bash script just do something like:

error=$?
if [ $error -ne 0 ]; then
      YOUR ERROR HANDLING
fi

works like a threat!

Stefano