summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2016-09-15 11:45:14 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-09-15 22:56:36 +0100
commit2268efd0cd3ddb40870c4c424d10444ba86d2849 (patch)
tree13aced9298cbf20b2bdf5bec115fb17f0fc407ee
parent059d475b6bce1e5414170a4fe2e7989f6b0eacd6 (diff)
downloadopenembedded-core-contrib-2268efd0cd3ddb40870c4c424d10444ba86d2849.tar.gz
openembedded-core-contrib-2268efd0cd3ddb40870c4c424d10444ba86d2849.tar.bz2
openembedded-core-contrib-2268efd0cd3ddb40870c4c424d10444ba86d2849.zip
sstate: Add postrm command support
There are some issues in sstate which can't be handled by file removal alone. Currently there is no way to execute a command against sstate and doing so is potentially problematic for things like dependencies. This patch adds a mechanism where any "postrm" script is executed if its present allowing some openjade/sgml issues to be resolved. [YOCTO #8273] Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/classes/sstate.bbclass11
1 files changed, 11 insertions, 0 deletions
diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass
index 216e133279..ac9d77d528 100644
--- a/meta/classes/sstate.bbclass
+++ b/meta/classes/sstate.bbclass
@@ -175,6 +175,8 @@ def sstate_install(ss, d):
if os.access(manifest, os.R_OK):
bb.fatal("Package already staged (%s)?!" % manifest)
+ d.setVar("SSTATE_INST_POSTRM", manifest + ".postrm")
+
locks = []
for lock in ss['lockfiles-shared']:
locks.append(bb.utils.lockfile(lock, True))
@@ -408,6 +410,13 @@ def sstate_clean_manifest(manifest, d):
except OSError:
pass
+ postrm = manifest + ".postrm"
+ if os.path.exists(manifest + ".postrm"):
+ import subprocess
+ os.chmod(postrm, 0o755)
+ subprocess.call(postrm, shell=True)
+ oe.path.remove(postrm)
+
oe.path.remove(manifest)
def sstate_clean(ss, d):
@@ -1012,6 +1021,8 @@ python sstate_eventhandler2() {
for r in toremove:
(stamp, manifest, workdir) = r.split()
for m in glob.glob(manifest + ".*"):
+ if m.endswith(".postrm"):
+ continue
sstate_clean_manifest(m, d)
bb.utils.remove(stamp + "*")
if removeworkdir: