summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Walters <walters@verbum.org>2012-05-02 07:30:02 -0400
committerColin Walters <walters@verbum.org>2012-05-04 16:16:16 -0400
commit851a9c2ce952ab0b017c9cce3bc17f5d8879d7cb (patch)
tree3ca0e4cd2c6be472499d167fb8c2c5b4dd5ea261
parent29b230107ea0db881255e7cc551de5215eb11d59 (diff)
downloadostree-851a9c2ce952ab0b017c9cce3bc17f5d8879d7cb.tar.gz
ostbuild: Checksum full component metadata for --skip-built
If we're using --skip-built, we really do want to rebuild if anything changed (like the build dependency, configure arguments etc.)
-rwxr-xr-xsrc/ostbuild/pyostbuild/builtin_build_components.py30
1 files changed, 22 insertions, 8 deletions
diff --git a/src/ostbuild/pyostbuild/builtin_build_components.py b/src/ostbuild/pyostbuild/builtin_build_components.py
index 6adcbc7c..7ae787c2 100755
--- a/src/ostbuild/pyostbuild/builtin_build_components.py
+++ b/src/ostbuild/pyostbuild/builtin_build_components.py
@@ -19,6 +19,7 @@ import os,sys,subprocess,tempfile,re,shutil
import argparse
import time
import urlparse
+import hashlib
import json
from StringIO import StringIO
@@ -69,6 +70,16 @@ class OstbuildBuildComponents(builtins.Builtin):
current_vcs_version = component['revision']
+ # TODO - deduplicate this with chroot_compile_one
+ current_meta_io = StringIO()
+ meta_copy = dict(component)
+ meta_copy['name'] = basename # Note we have to match the name here
+ json.dump(meta_copy, current_meta_io, indent=4, sort_keys=True)
+ current_metadata_text = current_meta_io.getvalue()
+ sha = hashlib.sha256()
+ sha.update(current_metadata_text)
+ current_meta_digest = sha.hexdigest()
+
previous_build_version = run_sync_get_output(['ostree', '--repo=' + self.repo,
'rev-parse', buildname],
stderr=open('/dev/null', 'w'),
@@ -80,18 +91,21 @@ class OstbuildBuildComponents(builtins.Builtin):
'cat', previous_build_version,
'/_ostbuild-meta.json'],
log_initiation=True)
- previous_meta = json.loads(previous_metadata_text)
-
- previous_vcs_version = previous_meta['revision']
+ sha = hashlib.sha256()
+ sha.update(previous_metadata_text)
+ previous_meta_digest = sha.hexdigest()
- vcs_version_matches = False
- if previous_vcs_version == current_vcs_version:
- vcs_version_matches = True
- log("VCS version is unchanged from '%s'" % (previous_vcs_version, ))
+ if current_meta_digest == previous_meta_digest:
+ log("Metadata is unchanged from previous")
if self.buildopts.skip_built:
return False
else:
- log("VCS version is now '%s', was '%s'" % (current_vcs_version, previous_vcs_version))
+ current_vcs_version = component['revision']
+ previous_vcs_version = json.loads(previous_metadata_text)['revision']
+ if current_vcs_version != previous_vcs_version:
+ log("Metadata differs; VCS version unchanged")
+ else:
+ log("Metadata differs; note vcs version is now '%s', was '%s'" % (current_vcs_version, previous_vcs_version))
else:
log("No previous build for '%s' found" % (name, ))