diff options
| author | Richard Purdie <richard@openedhand.com> | 2007-08-24 16:50:56 +0000 |
|---|---|---|
| committer | Richard Purdie <richard@openedhand.com> | 2007-08-24 16:50:56 +0000 |
| commit | e93df891ad1f6a27a7f181203675e9a7158b35b1 (patch) | |
| tree | 69fc5b06b3d2468550e82632147e64f6d9a6006a | |
| parent | bc8fdf047246c6d73dea83c1053dba697fa6953f (diff) | |
| download | poky-e93df891ad1f6a27a7f181203675e9a7158b35b1.tar.gz | |
package_ipk/deb.bbclass: Add locking for package creation to stop conflicts
git-svn-id: https://svn.o-hand.com/repos/poky/trunk@2557 311d38ba-8fff-0310-9ca6-ca027cbcb966
| -rw-r--r-- | meta/classes/package_deb.bbclass | 18 | ||||
| -rw-r--r-- | meta/classes/package_ipk.bbclass | 17 |
2 files changed, 29 insertions, 6 deletions
diff --git a/meta/classes/package_deb.bbclass b/meta/classes/package_deb.bbclass index 241bb67e8d..550436a5eb 100644 --- a/meta/classes/package_deb.bbclass +++ b/meta/classes/package_deb.bbclass | |||
| @@ -61,9 +61,7 @@ python do_package_deb_install () { | |||
| 61 | } | 61 | } |
| 62 | 62 | ||
| 63 | python do_package_deb () { | 63 | python do_package_deb () { |
| 64 | import copy # to back up env data | 64 | import sys, re, fcntl, copy |
| 65 | import sys | ||
| 66 | import re | ||
| 67 | 65 | ||
| 68 | workdir = bb.data.getVar('WORKDIR', d, 1) | 66 | workdir = bb.data.getVar('WORKDIR', d, 1) |
| 69 | if not workdir: | 67 | if not workdir: |
| @@ -96,10 +94,21 @@ python do_package_deb () { | |||
| 96 | bb.debug(1, "No packages; nothing to do") | 94 | bb.debug(1, "No packages; nothing to do") |
| 97 | return | 95 | return |
| 98 | 96 | ||
| 97 | def lockfile(name): | ||
| 98 | lf = open(name, "a+") | ||
| 99 | fcntl.flock(lf.fileno(), fcntl.LOCK_EX) | ||
| 100 | return lf | ||
| 101 | |||
| 102 | def unlockfile(lf): | ||
| 103 | fcntl.flock(lf.fileno(), fcntl.LOCK_UN) | ||
| 104 | lf.close | ||
| 105 | |||
| 99 | for pkg in packages.split(): | 106 | for pkg in packages.split(): |
| 100 | localdata = bb.data.createCopy(d) | 107 | localdata = bb.data.createCopy(d) |
| 101 | root = "%s/install/%s" % (workdir, pkg) | 108 | root = "%s/install/%s" % (workdir, pkg) |
| 102 | 109 | ||
| 110 | lf = lockfile(root + ".lock") | ||
| 111 | |||
| 103 | bb.data.setVar('ROOT', '', localdata) | 112 | bb.data.setVar('ROOT', '', localdata) |
| 104 | bb.data.setVar('ROOT_%s' % pkg, root, localdata) | 113 | bb.data.setVar('ROOT_%s' % pkg, root, localdata) |
| 105 | pkgname = bb.data.getVar('PKG_%s' % pkg, localdata, 1) | 114 | pkgname = bb.data.getVar('PKG_%s' % pkg, localdata, 1) |
| @@ -130,6 +139,7 @@ python do_package_deb () { | |||
| 130 | if not g and not bb.data.getVar('ALLOW_EMPTY', localdata): | 139 | if not g and not bb.data.getVar('ALLOW_EMPTY', localdata): |
| 131 | from bb import note | 140 | from bb import note |
| 132 | note("Not creating empty archive for %s-%s-%s" % (pkg, bb.data.getVar('PV', localdata, 1), bb.data.getVar('PR', localdata, 1))) | 141 | note("Not creating empty archive for %s-%s-%s" % (pkg, bb.data.getVar('PV', localdata, 1), bb.data.getVar('PR', localdata, 1))) |
| 142 | unlockfile(lf) | ||
| 133 | continue | 143 | continue |
| 134 | controldir = os.path.join(root, 'DEBIAN') | 144 | controldir = os.path.join(root, 'DEBIAN') |
| 135 | bb.mkdirhier(controldir) | 145 | bb.mkdirhier(controldir) |
| @@ -244,6 +254,8 @@ python do_package_deb () { | |||
| 244 | except OSError: | 254 | except OSError: |
| 245 | pass | 255 | pass |
| 246 | del localdata | 256 | del localdata |
| 257 | |||
| 258 | unlockfile(lf) | ||
| 247 | } | 259 | } |
| 248 | 260 | ||
| 249 | python () { | 261 | python () { |
diff --git a/meta/classes/package_ipk.bbclass b/meta/classes/package_ipk.bbclass index afe70005d9..d88d11b994 100644 --- a/meta/classes/package_ipk.bbclass +++ b/meta/classes/package_ipk.bbclass | |||
| @@ -61,9 +61,7 @@ python package_ipk_install () { | |||
| 61 | } | 61 | } |
| 62 | 62 | ||
| 63 | python do_package_ipk () { | 63 | python do_package_ipk () { |
| 64 | import copy # to back up env data | 64 | import sys, re, fcntl, copy |
| 65 | import sys | ||
| 66 | import re | ||
| 67 | 65 | ||
| 68 | workdir = bb.data.getVar('WORKDIR', d, 1) | 66 | workdir = bb.data.getVar('WORKDIR', d, 1) |
| 69 | if not workdir: | 67 | if not workdir: |
| @@ -97,10 +95,21 @@ python do_package_ipk () { | |||
| 97 | bb.debug(1, "No packages; nothing to do") | 95 | bb.debug(1, "No packages; nothing to do") |
| 98 | return | 96 | return |
| 99 | 97 | ||
| 98 | def lockfile(name): | ||
| 99 | lf = open(name, "a+") | ||
| 100 | fcntl.flock(lf.fileno(), fcntl.LOCK_EX) | ||
| 101 | return lf | ||
| 102 | |||
| 103 | def unlockfile(lf): | ||
| 104 | fcntl.flock(lf.fileno(), fcntl.LOCK_UN) | ||
| 105 | lf.close | ||
| 106 | |||
| 100 | for pkg in packages.split(): | 107 | for pkg in packages.split(): |
| 101 | localdata = bb.data.createCopy(d) | 108 | localdata = bb.data.createCopy(d) |
| 102 | root = "%s/install/%s" % (workdir, pkg) | 109 | root = "%s/install/%s" % (workdir, pkg) |
| 103 | 110 | ||
| 111 | lf = lockfile(root + ".lock") | ||
| 112 | |||
| 104 | bb.data.setVar('ROOT', '', localdata) | 113 | bb.data.setVar('ROOT', '', localdata) |
| 105 | bb.data.setVar('ROOT_%s' % pkg, root, localdata) | 114 | bb.data.setVar('ROOT_%s' % pkg, root, localdata) |
| 106 | pkgname = bb.data.getVar('PKG_%s' % pkg, localdata, 1) | 115 | pkgname = bb.data.getVar('PKG_%s' % pkg, localdata, 1) |
| @@ -129,6 +138,7 @@ python do_package_ipk () { | |||
| 129 | if not g and not bb.data.getVar('ALLOW_EMPTY', localdata): | 138 | if not g and not bb.data.getVar('ALLOW_EMPTY', localdata): |
| 130 | from bb import note | 139 | from bb import note |
| 131 | note("Not creating empty archive for %s-%s-%s" % (pkg, bb.data.getVar('PV', localdata, 1), bb.data.getVar('PR', localdata, 1))) | 140 | note("Not creating empty archive for %s-%s-%s" % (pkg, bb.data.getVar('PV', localdata, 1), bb.data.getVar('PR', localdata, 1))) |
| 141 | unlockfile(lf) | ||
| 132 | continue | 142 | continue |
| 133 | controldir = os.path.join(root, 'CONTROL') | 143 | controldir = os.path.join(root, 'CONTROL') |
| 134 | bb.mkdirhier(controldir) | 144 | bb.mkdirhier(controldir) |
| @@ -236,6 +246,7 @@ python do_package_ipk () { | |||
| 236 | except OSError: | 246 | except OSError: |
| 237 | pass | 247 | pass |
| 238 | del localdata | 248 | del localdata |
| 249 | unlockfile(lf) | ||
| 239 | } | 250 | } |
| 240 | 251 | ||
| 241 | python () { | 252 | python () { |
