开发者

using bash to get revision number from subversion

I want to write a shell script in bash to deploy websites from an svn repository. When I deploy a website, I name the exported directory website_name-Rrevision_number. I'd like the bash script to automatically rename the exported directory, so it needs to learn the current revision number from 开发者_开发知识库the export directory. If I run

$> svn info http://svn-repository/trunk

Path: trunk
URL: http://svn-repository/mystery/trunk
Repository Root: http://svn-repository/mystery
Repository UUID: b809e6ab-5153-0410-a985-ac99030dffe6
Revision: 624
Node Kind: directory
Last Changed Author: author
Last Changed Rev: 624
Last Changed Date: 2010-02-19 15:48:16 -0500 (Fri, 19 Feb 2010)

The number after the string Revision: is what I want. How do I get that into a bash variable? Do I do string parsing of the output from the svn info command?


Use svnversion. This will output the revision number/range with minimal additional cruft


REVISION=`svn info http://svn-repository/trunk |grep '^Revision:' | sed -e 's/^Revision: //'`

It's simple, if inelegant.


Parsing the 'Revision' string is not portable across different locales. Eg. with my locale it is like:

...
Wersja: 6583
Rodzaj obiektu: katalog
Zlecenie: normalne
Autor ostatniej zmiany: ...
Ostatnio zmieniona wersja: 6583
Data ostatniej zmiany: 2013-03-21 11:33:44 +0100 (czw)
...

You don't wanna parse that :)

So, the best approach is to use 'svnversion' as oefe suggested. This is the tool mentioned for this purpose.


just use one awk command. much simpler as well.

var=$(svn info http://svn-repository/trunk | awk '/^Revision:/{print $2}')


Without using sed, grep or awk:

REVISION=`svn info --show-item=revision --no-newline`


svn info http://svn-repository/trunk | grep Revision | tr -d 'Revison: '

Spits out the revision Use backticks in your shell script to execute this and assign the results to a variable:

REVISION=`svn info http://svn-repository/trunk | grep Revision | tr -d 'Revison: '`


There are probably a dozen different ways to do this, but I'd go with something simple like:

revision="$(svn info http://svn-repository/trunk | grep "^Revision:" | cut -c 11-)"


This will give you the head revision number

svn info -r 'HEAD' | grep Revision | egrep -o "[0-9]+"

egrep is extended grep.


REVISION=$(svn info http://svn-repository/trunk |grep '^Revision:' | sed -e 's/^Revision: //p')
echo $REVISION
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜