add get_git_svn_revision and fall back to it

Now gramps developers using git need not be ashamed of their
``gramps --version'' output :)

svn: r23118
This commit is contained in:
Vassilii Khachaturov 2013-09-13 21:42:35 +00:00
parent 7518fc5d2a
commit 5a7e4bd2c6

View File

@ -22,6 +22,7 @@
import sys
import subprocess
import re
if sys.version_info[0] < 3:
cuni = unicode
@ -30,21 +31,32 @@ else:
return s.decode("utf-8", errors = 'replace')
cuni = to_utf8
def get_svn_revision(path=""):
def _get_svn_revision(path, command, stdout_to_rev):
stdout = ""
try:
p = subprocess.Popen("svnversion -n \"%s\"" % path, shell=True,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
p = subprocess.Popen(
"{} \"{}\"".format(command, path),
shell=True,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
(stdout, stderr) = p.communicate()
except:
return "" # subprocess failed
# subprocess worked
if stdout and len(stdout) > 0: # has output
stdout = cuni(stdout) # get a proper string
if stdout[0].isdigit():
return "-r" + stdout
else:
return ""
rev = stdout_to_rev(stdout)
return "-r" + rev if rev else ""
else: # no output from svnversion
return ""
def get_svn_revision(path=""):
return _get_svn_revision(path, "svnversion -n",
lambda stdout: stdout if stdout[0].isdigit() else ""
) or get_git_svn_revision(path)
def get_git_svn_revision(path=""):
def stdout_to_rev(stdout):
m = re.search("Revision:\s+(\d+)", stdout, re.MULTILINE)
return m.group(1) if m else ""
return _get_svn_revision(path, "git svn info", stdout_to_rev)