diff options
author | Lars Wirzenius <lars.wirzenius@codethink.co.uk> | 2013-01-28 14:58:17 +0000 |
---|---|---|
committer | Lars Wirzenius <lars.wirzenius@codethink.co.uk> | 2013-01-28 14:58:17 +0000 |
commit | 2024583a303ef1a79709b7ecc9fc2dce22e8ce98 (patch) | |
tree | a33b00874aaf7ccdf450b320d7fa1c51d8add1c1 /morphlib | |
parent | e48bbe396cccb4f4be2e7170547cab1de3d6c623 (diff) | |
parent | 132951b02d1e4e628cfbafab2d35bcda9c1fc24e (diff) | |
download | morph-2024583a303ef1a79709b7ecc9fc2dce22e8ce98.tar.gz |
Merge remote-tracking branch 'origin/baserock/richardmaw/morph-version'
Diffstat (limited to 'morphlib')
-rw-r--r-- | morphlib/__init__.py | 5 | ||||
-rw-r--r-- | morphlib/builder2.py | 7 | ||||
-rw-r--r-- | morphlib/gitversion.py | 57 |
3 files changed, 67 insertions, 2 deletions
diff --git a/morphlib/__init__.py b/morphlib/__init__.py index 213241d8..2d2f68a2 100644 --- a/morphlib/__init__.py +++ b/morphlib/__init__.py @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2012 Codethink Limited +# Copyright (C) 2011-2013 Codethink Limited # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -19,8 +19,9 @@ import cliapp +import gitversion -__version__ = '0.1' +__version__ = gitversion.version class Error(cliapp.AppException): diff --git a/morphlib/builder2.py b/morphlib/builder2.py index a60c4a47..ac40bf22 100644 --- a/morphlib/builder2.py +++ b/morphlib/builder2.py @@ -33,6 +33,7 @@ import cliapp import morphlib from morphlib.artifactcachereference import ArtifactCacheReference +import morphlib.gitversion def ldconfig(runcmd, rootdir): # pragma: no cover @@ -204,6 +205,12 @@ class BuilderBase(object): 'morphology': self.artifact.source.filename, 'cache-key': self.artifact.cache_key, 'cache-id': self.artifact.cache_id, + 'morph-version': { + 'ref': morphlib.gitversion.ref, + 'tree': morphlib.gitversion.tree, + 'commit': morphlib.gitversion.commit, + 'version': morphlib.gitversion.version, + }, } return meta diff --git a/morphlib/gitversion.py b/morphlib/gitversion.py new file mode 100644 index 00000000..b1f82da6 --- /dev/null +++ b/morphlib/gitversion.py @@ -0,0 +1,57 @@ +# Copyright (C) 2013 Codethink Limited +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +'''Version information retrieved either from the package data, or the + git repository the library is being run from. + + It is an error to run morph without this version information, since + it makes it impossible to reproduce any Systems that are built. +''' + + +import subprocess +import os + +import cliapp + + +try: + import pkgutil + version = pkgutil.get_data('morphlib', 'version') + commit = pkgutil.get_data('morphlib', 'commit') + tree = pkgutil.get_data('morphlib', 'tree') + ref = pkgutil.get_data('morphlib', 'ref') +except IOError, e: + from os.path import dirname + def run_git(*args): + command = ['git'] + list(args) + p = subprocess.Popen(command, + cwd=os.path.dirname(__file__), + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT) + o = p.communicate() + if p.returncode: + raise subprocess.CalledProcessError(p.returncode, + command) + return o[0].strip() + + try: + version = run_git('describe', '--always', '--dirty=-unreproducible') + commit = run_git('rev-parse', 'HEAD^{commit}') + tree = run_git('rev-parse', 'HEAD^{tree}') + ref = run_git('rev-parse', '--symbolic-full-name', 'HEAD') + except cliapp.AppException: + raise cliapp.AppException("morphlib version could not be determined") |