add get_git_svn_revision and fall back to it

reapply from trunk

svn: r23119
This commit is contained in:
Vassilii Khachaturov 2013-09-13 21:43:58 +00:00
parent 132c3c60ac
commit 67f33a0c69

View File

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