package_deb/package_ipk: Cleanup control file handling/races

If you Ctrl+C ppackage_write_{deb/ipk} control files can get left lying around
and make it into another packaging format. This ensures we cleanup all known
control files before starting packaging. We can simplify some of the globbing
as a result.

(From OE-Core rev: 7f8c728c82a17621461be2114c1afab3713a808e)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie
2013-11-05 22:08:56 +00:00
parent 1eefcf0ba8
commit 0331fc2805
2 changed files with 16 additions and 13 deletions

View File

@@ -202,6 +202,12 @@ python do_package_deb () {
pkgdest = d.getVar('PKGDEST', True)
def cleanupcontrol(root):
for p in ['CONTROL', 'DEBIAN']:
p = os.path.join(root, p)
if os.path.exists(p):
bb.utils.prunedir(p)
for pkg in packages.split():
localdata = bb.data.createCopy(d)
root = "%s/%s" % (pkgdest, pkg)
@@ -224,13 +230,9 @@ python do_package_deb () {
bb.utils.mkdirhier(pkgoutdir)
os.chdir(root)
cleanupcontrol(root)
from glob import glob
g = glob('*')
try:
del g[g.index('DEBIAN')]
del g[g.index('./DEBIAN')]
except ValueError:
pass
if not g and localdata.getVar('ALLOW_EMPTY') != "1":
bb.note("Not creating empty archive for %s-%s-%s" % (pkg, localdata.getVar('PKGV', True), localdata.getVar('PKGR', True)))
bb.utils.unlockfile(lf)
@@ -402,11 +404,10 @@ python do_package_deb () {
os.chdir(basedir)
ret = subprocess.call("PATH=\"%s\" dpkg-deb -b %s %s" % (localdata.getVar("PATH", True), root, pkgoutdir), shell=True)
if ret != 0:
bb.utils.prunedir(controldir)
bb.utils.unlockfile(lf)
raise bb.build.FuncFailed("dpkg-deb execution failed")
bb.utils.prunedir(controldir)
cleanupcontrol(root)
bb.utils.unlockfile(lf)
}

View File

@@ -234,6 +234,12 @@ python do_package_ipk () {
if os.access(os.path.join(tmpdir, "stamps", "IPK_PACKAGE_INDEX_CLEAN"), os.R_OK):
os.unlink(os.path.join(tmpdir, "stamps", "IPK_PACKAGE_INDEX_CLEAN"))
def cleanupcontrol(root):
for p in ['CONTROL', 'DEBIAN']:
p = os.path.join(root, p)
if os.path.exists(p):
bb.utils.prunedir(p)
for pkg in packages.split():
localdata = bb.data.createCopy(d)
root = "%s/%s" % (pkgdest, pkg)
@@ -255,13 +261,9 @@ python do_package_ipk () {
pkgoutdir = "%s/%s" % (outdir, arch)
bb.utils.mkdirhier(pkgoutdir)
os.chdir(root)
cleanupcontrol(root)
from glob import glob
g = glob('*')
try:
del g[g.index('CONTROL')]
del g[g.index('./CONTROL')]
except ValueError:
pass
if not g and localdata.getVar('ALLOW_EMPTY') != "1":
bb.note("Not creating empty archive for %s-%s-%s" % (pkg, localdata.getVar('PKGV', True), localdata.getVar('PKGR', True)))
bb.utils.unlockfile(lf)
@@ -407,7 +409,7 @@ python do_package_ipk () {
bb.utils.unlockfile(lf)
raise bb.build.FuncFailed("opkg-build execution failed")
bb.utils.prunedir(controldir)
cleanupcontrol(root)
bb.utils.unlockfile(lf)
}