[pypy-svn] pypy default: Added support for version info from both hg/git.
tav
commits-noreply at bitbucket.org
Thu Mar 3 16:13:41 CET 2011
Author: tav <tav at espians.com>
Branch:
Changeset: r42408:4568a57a31bf
Date: 2011-03-03 15:13 +0000
http://bitbucket.org/pypy/pypy/changeset/4568a57a31bf/
Log: Added support for version info from both hg/git.
diff --git a/pypy/tool/udir.py b/pypy/tool/udir.py
--- a/pypy/tool/udir.py
+++ b/pypy/tool/udir.py
@@ -21,7 +21,7 @@
import os, sys
import py
-from pypy.tool.version import get_mercurial_info
+from pypy.tool.version import get_repo_version_info
from py.path import local
PYPY_KEEP = int(os.environ.get('PYPY_USESSION_KEEP', '3'))
@@ -30,7 +30,7 @@
if dir is not None:
dir = local(dir)
if basename is None:
- info = get_mercurial_info()
+ info = get_repo_version_info()
if info:
project, hgtag, hgid = info
basename = hgtag
diff --git a/pypy/module/sys/__init__.py b/pypy/module/sys/__init__.py
--- a/pypy/module/sys/__init__.py
+++ b/pypy/module/sys/__init__.py
@@ -63,7 +63,7 @@
'version' : 'version.get_version(space)',
'pypy_version_info' : 'version.get_pypy_version_info(space)',
'subversion' : 'version.get_subversion_info(space)',
- '_mercurial' : 'version.wrap_mercurial_info(space)',
+ '_mercurial' : 'version.get_repo_info(space)',
'hexversion' : 'version.get_hexversion(space)',
'displayhook' : 'hook.displayhook',
diff --git a/pypy/tool/test/test_version.py b/pypy/tool/test/test_version.py
--- a/pypy/tool/test/test_version.py
+++ b/pypy/tool/test/test_version.py
@@ -1,8 +1,8 @@
import os, sys
import py
-from pypy.tool.version import get_mercurial_info
+from pypy.tool.version import get_repo_version_info
-def test_get_mercurial_info():
- assert get_mercurial_info(None)
- assert get_mercurial_info(os.devnull) == ('PyPy', '?', '?')
- assert get_mercurial_info(sys.executable) == ('PyPy', '?', '?')
+def test_get_repo_version_info():
+ assert get_repo_version_info(None)
+ assert get_repo_version_info(os.devnull) == ('PyPy', '?', '?')
+ assert get_repo_version_info(sys.executable) == ('PyPy', '?', '?')
diff --git a/pypy/module/sys/version.py b/pypy/module/sys/version.py
--- a/pypy/module/sys/version.py
+++ b/pypy/module/sys/version.py
@@ -28,7 +28,7 @@
import pypy
pypydir = os.path.dirname(os.path.abspath(pypy.__file__))
del pypy
-from pypy.tool.version import get_mercurial_info
+from pypy.tool.version import get_repo_version_info
import time as t
gmtime = t.gmtime()
@@ -67,7 +67,7 @@
CPYTHON_VERSION[0],
CPYTHON_VERSION[1],
CPYTHON_VERSION[2],
- hg_universal_id(),
+ get_repo_version_info()[2],
date,
time,
ver,
@@ -83,32 +83,22 @@
def get_pypy_version_info(space):
ver = PYPY_VERSION
- #ver = ver[:-1] + (svn_revision(),)
w_version_info = app.wget(space, "version_info")
return space.call_function(w_version_info, space.wrap(ver))
def get_subversion_info(space):
return space.wrap(('PyPy', '', ''))
-
-def wrap_mercurial_info(space):
- info = get_mercurial_info()
+def get_repo_info(space):
+ info = get_repo_version_info()
if info:
- project, hgtag, hgid = info
+ project, repo_tag, repo_version = info
return space.newtuple([space.wrap(project),
- space.wrap(hgtag),
- space.wrap(hgid)])
+ space.wrap(repo_tag),
+ space.wrap(repo_version)])
else:
return space.w_None
-def hg_universal_id():
- info = get_mercurial_info()
- if info:
- return info[2]
- else:
- return '?'
-
-
def tuple2hex(ver):
d = {'alpha': 0xA,
'beta': 0xB,
diff --git a/pypy/tool/version.py b/pypy/tool/version.py
--- a/pypy/tool/version.py
+++ b/pypy/tool/version.py
@@ -4,23 +4,51 @@
import pypy
pypydir = os.path.dirname(os.path.abspath(pypy.__file__))
-def get_mercurial_info(hgexe=None):
- '''Obtain Mercurial version information by invoking the 'hg' command.'''
+def get_repo_version_info(hgexe=None):
+ '''Obtain version information by invoking the 'hg' or 'git' commands.'''
# TODO: support extracting from .hg_archival.txt
default_retval = 'PyPy', '?', '?'
pypyroot = os.path.abspath(os.path.join(pypydir, '..'))
- if hgexe is None:
- hgexe = py.path.local.sysfind('hg')
- def maywarn(err):
+ def maywarn(err, repo_type='Mercurial'):
if not err:
return
from pypy.tool.ansi_print import ansi_log
log = py.log.Producer("version")
py.log.setconsumer("version", ansi_log)
- log.WARNING('Errors getting Mercurial information: %s' % err)
+ log.WARNING('Errors getting %s information: %s' % (repo_type, err))
+
+ # Try to see if we can get info from Git if hgexe is not specified.
+ if not hgexe:
+ if os.path.isdir(os.path.join(pypyroot, '.git')):
+ gitexe = py.path.local.sysfind('git')
+ if gitexe:
+ try:
+ p = Popen(
+ [str(gitexe), 'describe', '--tags', '--always'],
+ stdout=PIPE, stderr=PIPE
+ )
+ except OSError, e:
+ maywarn(e, 'Git')
+ return default_retval
+ if p.wait() != 0:
+ maywarn(p.stderr.read(), 'Git')
+ return default_retval
+ tag = p.stdout.read().strip()
+ p = Popen(
+ [str(gitexe), 'rev-parse', 'HEAD'],
+ stdout=PIPE, stderr=PIPE
+ )
+ if p.wait() != 0:
+ maywarn(p.stderr.read(), 'Git')
+ return 'PyPy', tag, '?'
+ return 'PyPy', tag, p.stdout.read().strip()[:12]
+
+ # Fallback to trying Mercurial.
+ if hgexe is None:
+ hgexe = py.path.local.sysfind('hg')
if not os.path.isdir(os.path.join(pypyroot, '.hg')):
maywarn('Not running from a Mercurial repository!')
More information about the Pypy-commit
mailing list