Check that an svn repository url does not exist

2020-05-19 06:09发布

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.

6条回答
太酷不给撩
2楼-- · 2020-05-19 06:44

I face the above problem and i tried all the way. not work for me.. if we access svn with a path not in svn it's failed with error and the shell script will break.

Instead of accessing unknown path, what i did is get the directory list of parent folder and check whether matching one contain or not.

Get all the projects form your Parent directory (if you want to find a specific tags then your parent directory path should be https://developernetwork.repo.net/svn/Projects/Calculator/tags)

projects=$(svn ls https://developernetwork.repo.net/svn/Projects/)

then check your project folder exists. Remember to add / after your project name.

projectName="Calculator/"
for i in $projects; do 
    if [ "$i" == "$projectName/" ];
        then
        echo Project Exist
        else
        echo Project does not exist
    fi
done 

simple.

查看更多
Melony?
3楼-- · 2020-05-19 06:51

Like @A Scott says, the echo $? can't be used to know wether the URL is correct (I'm on Mac OS 10.11 and SVN client 1.9.5).

For potential future readers, i use this workaround :

content=$(svn info $SVN_TAG_URL)

if [[ -z $content ]]; then
    echo "The SVN URL doesn't exist"; exit
fi
查看更多
该账号已被封号
4楼-- · 2020-05-19 06:58

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

both

svn ls REPOSITORY/PATH

and

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 treat!

查看更多
对你真心纯属浪费
5楼-- · 2020-05-19 07:01

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
查看更多
时光不老,我们不散
6楼-- · 2020-05-19 07:07

I'd have commented on an existing answer but I don't have sufficient reputation.

I wanted to find if a file had been imported successfully or not so I tried "svn info" and "svn ls" with "echo $?". I could only get a zero/non-zero return code when I used "svn ls": "svn info" always returned zero.

This was with subversion 1.5.5 on Redhat RHEL6.

查看更多
该账号已被封号
7楼-- · 2020-05-19 07:08

You can just use

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

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

Update

for directories with many files use:

svn ls http://server/svn/foo --depth empty
查看更多
登录 后发表回答