summaryrefslogtreecommitdiff
path: root/morphlib
diff options
context:
space:
mode:
authorLars Wirzenius <lars.wirzenius@codethink.co.uk>2013-01-28 14:58:17 +0000
committerLars Wirzenius <lars.wirzenius@codethink.co.uk>2013-01-28 14:58:17 +0000
commit2024583a303ef1a79709b7ecc9fc2dce22e8ce98 (patch)
treea33b00874aaf7ccdf450b320d7fa1c51d8add1c1 /morphlib
parente48bbe396cccb4f4be2e7170547cab1de3d6c623 (diff)
parent132951b02d1e4e628cfbafab2d35bcda9c1fc24e (diff)
downloadmorph-2024583a303ef1a79709b7ecc9fc2dce22e8ce98.tar.gz
Merge remote-tracking branch 'origin/baserock/richardmaw/morph-version'
Diffstat (limited to 'morphlib')
-rw-r--r--morphlib/__init__.py5
-rw-r--r--morphlib/builder2.py7
-rw-r--r--morphlib/gitversion.py57
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")