blob: 0acf26bc4344ca2e470210b56a98b56397661e44 [file] [log] [blame]
import re
import os
from lnt.util import logger
from lnt.testing.util import commands
_git_svn_id_re = re.compile("^ git-svn-id: [^@]*@([0-9]+) .*$")
def get_source_version(path):
"""get_source_version(path) -> str or None
Given the path to a revision controlled source tree, return a revision
number, hash, etc. which identifies the source version.
"""
if os.path.exists(os.path.join(path, ".svn")):
return commands.capture(['/bin/sh', '-c',
'cd "%s" && svnversion' % path]).strip()
elif os.path.exists(os.path.join(path, ".git", "svn")):
# git-svn is pitifully slow, extract the revision manually.
res = commands.capture(['/bin/sh', '-c',
('cd "%s" && '
'git log -1') % path]
).strip()
last_line = res.split("\n")[-1]
m = _git_svn_id_re.match(last_line)
if not m:
logger.warning("unable to understand git svn log: %r" % res)
return
return m.group(1)
elif os.path.exists(os.path.join(path, ".git")):
return commands.capture(['/bin/sh', '-c',
('cd "%s" && '
'git log -1 --pretty=format:%%H') % path]
).strip()