aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Oberritter <obi@opendreambox.org>2012-08-29 23:27:44 +0200
committerAndreas Oberritter <obi@opendreambox.org>2012-08-29 23:31:01 +0200
commit0ba8294b3746980b7b93c2dbb9b9cba235c67c67 (patch)
tree5b575e6efd24553ece729499f9ac2465a4181c5a
parentd409f1f7594944153bb8edd42fd4d8140b8964eb (diff)
downloadopenembedded-core-contrib-0ba8294b3746980b7b93c2dbb9b9cba235c67c67.tar.gz
sstate.bbclass: don't remove shared pkgdata if PACKAGE_ARCH changed to MACHINE_ARCH
Signed-off-by: Andreas Oberritter <obi@opendreambox.org>
-rw-r--r--meta/classes/sstate.bbclass32
1 files changed, 32 insertions, 0 deletions
diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass
index a8c98e5c7f..a9d70e6cd9 100644
--- a/meta/classes/sstate.bbclass
+++ b/meta/classes/sstate.bbclass
@@ -219,13 +219,45 @@ def sstate_clean_cachefiles(d):
sstate_clean_cachefile(ss, d)
def sstate_clean_manifest(manifest, d):
+ from glob import glob
import oe.path
+ check_package_arch = manifest.endswith('.package')
+ if check_package_arch:
+ package_arch = d.getVar('PACKAGE_ARCH', True)
+ machine = d.getVar('MACHINE', True)
+ package_arch_old = ''
+ dir_scanned = False
+ pkg_set = set()
+ pn = d.getVar('PN', True)
+ sstate_manifests = d.getVar('SSTATE_MANIFESTS', True)
+ pkgdata_dir = d.getVar('PKGDATA_DIR', True)
+ pkgdata_root = '/'.join(pkgdata_dir.split('/')[:-1]) + '/'
+
mfile = open(manifest)
entries = mfile.readlines()
mfile.close()
for entry in entries:
+ if check_package_arch:
+ if not package_arch_old and entry.startswith(pkgdata_root):
+ package_arch_old = entry[len(pkgdata_root):].split('-')[0]
+ if package_arch_old:
+ if package_arch_old != package_arch:
+ if not dir_scanned:
+ for f in glob('%s/manifest-*-%s.package' % (sstate_manifests, pn)):
+ if f == manifest:
+ continue
+ tfile = open(f)
+ pkg_set = pkg_set | set(tfile.readlines())
+ tfile.close()
+ dir_scanned = True
+ if entry in pkg_set:
+ bb.debug(2, "Keeping manifest: %s (used by another machine)" % entry.strip())
+ continue
+ else:
+ check_package_arch = False
+
entry = entry.strip()
bb.debug(2, "Removing manifest: %s" % entry)
# We can race against another package populating directories as we're removing them