Getting Svn Revision Number Into A Program Automatically
Solution 1:
I'm not sure about the Python specifics, but if put the string $Revision$ into your file somewhere and you have enable-auto-props=true in your SVN config, it'll get rewritten to something like $Revision: 144$. You could then parse this in your script.
There are a number of property keywords you can use in this way.
This won't have any overhead, e.g. querying the SVN repo, because the string is hard-coded into your file on commit or update.
I'm not sure how you'd parse this in Python but in PHP I'd do:
$revString = '$Revision: 144$';
if(preg_match('/: ([0-9]+)\$/', $revString, $matches) {
echo'Revision is ' . $matches[1];
}
Solution 2:
Similar to, but a little more pythonic than the PHP answer; put this in your module's __init__.py
:
__version__ = filter(str.isdigit, "$Revision: 13 $")
and make sure you add the Revision property:
svn propset svn:keywords Revision __init__.py
Solution 3:
Or you can do like this:
import re,subprocess
svn_info = subprocess.check_output("svn info")
print (re.search(ur"Revision:\s\d+", svn_info)).group()
it prints "Revision: 2874"
in my project
Or like this:
print (subprocess.check_output("svnversion")).split(":")[0]
it prints "2874"
in my project
Edit
For newer python versions (>=3.4) and for explicit file path:
import re,subprocess
file_path = 'c:/foo'
svn_info = subprocess.check_output('svn info ' + file_path)
revision_string = re.search(r"Revision:\s\d+", str(svn_info)).group()
revision = revision_string.split(': ')[1]
print(revision)
Prints for example
'8623'
Solution 4:
The file hooks/pre-commit
in your repository is a script or program which will be executed before a successful commit. Simply make this a script which updates your file with the proper version number as it is being committed (the revision number is passed to your script as it's run). Here's a tutorial with an example of writing a pre-commit hook: http://wordaligned.org/articles/a-subversion-pre-commit-hook
Solution 5:
There's a snippet of code in Django that allows you to do this, I'd recommend looking at it. http://code.djangoproject.com/browser/django/trunk/django/utils/version.py
Post a Comment for "Getting Svn Revision Number Into A Program Automatically"