summaryrefslogtreecommitdiffstats
path: root/meta/classes
diff options
context:
space:
mode:
authorJoshua Lock <josh@linux.intel.com>2010-01-29 12:27:30 +0000
committerJoshua Lock <josh@linux.intel.com>2010-01-29 12:33:46 +0000
commit50ffb99417c768a9f5286bb69b37b9b7b57baa4f (patch)
tree17997859a1020e30e36b50ddcc025c360b376a8b /meta/classes
parent0e4111c7d9a6241854bfa6f69f41d200830b2558 (diff)
downloadpoky-50ffb99417c768a9f5286bb69b37b9b7b57baa4f.tar.gz
packaged-staging: basic support for pulling staging packages from a mirror
Add simple support for trying to fetch staging packages from a http, https or ftp mirror if they do not already exist in PSTAGE_DIR. As documented in local.conf.sample "Poky can try and fetch packaged-staging packages from a http, https or ftp mirror. Set this variable to the root of a pstage directory on a server." If the PSTAGE_MIRROR variable is not set, or the package cannot be found on the mirror it will be built as usual. Signed-off-by: Joshua Lock <josh@linux.intel.com>
Diffstat (limited to 'meta/classes')
-rw-r--r--meta/classes/packaged-staging.bbclass27
1 files changed, 26 insertions, 1 deletions
diff --git a/meta/classes/packaged-staging.bbclass b/meta/classes/packaged-staging.bbclass
index 74855c4ab3..4789ecc3b1 100644
--- a/meta/classes/packaged-staging.bbclass
+++ b/meta/classes/packaged-staging.bbclass
@@ -135,7 +135,9 @@ do_clean_prepend() {
135 135
136 stagepkg = bb.data.expand("${PSTAGE_PKG}", d) 136 stagepkg = bb.data.expand("${PSTAGE_PKG}", d)
137 bb.note("Removing staging package %s" % stagepkg) 137 bb.note("Removing staging package %s" % stagepkg)
138 os.system('rm -rf ' + stagepkg) 138 # Add a wildcard to the end of stagepkg to also get its md5
139 # if it's a fetched package
140 os.system('rm -rf ' + stagepkg + '*')
139} 141}
140 142
141staging_helper () { 143staging_helper () {
@@ -159,6 +161,27 @@ staging_helper () {
159 fi 161 fi
160} 162}
161 163
164def staging_fetch(stagepkg, d):
165 import bb.fetch
166
167 # only try and fetch if the user has configured a mirror
168 if bb.data.getVar('PSTAGE_MIRROR', d) != "":
169 # Copy the data object and override DL_DIR and SRC_URI
170 pd = d.createCopy()
171 dldir = bb.data.expand("${PSTAGE_DIR}/${PSTAGE_PKGPATH}", pd)
172 mirror = bb.data.expand("${PSTAGE_MIRROR}/${PSTAGE_PKGPATH}/", pd)
173 srcuri = mirror + os.path.basename(stagepkg)
174 bb.data.setVar('DL_DIR', dldir, pd)
175 bb.data.setVar('SRC_URI', srcuri, pd)
176
177 # Try a fetch from the pstage mirror, if it fails just return and
178 # we will build the package
179 try:
180 bb.fetch.init([srcuri], pd)
181 bb.fetch.go(pd, [srcuri])
182 except:
183 return
184
162PSTAGE_TASKS_COVERED = "fetch unpack munge patch configure qa_configure rig_locales compile sizecheck install deploy package populate_sysroot package_write_deb package_write_ipk package_write package_stage qa_staging" 185PSTAGE_TASKS_COVERED = "fetch unpack munge patch configure qa_configure rig_locales compile sizecheck install deploy package populate_sysroot package_write_deb package_write_ipk package_write package_stage qa_staging"
163 186
164SCENEFUNCS += "packagestage_scenefunc" 187SCENEFUNCS += "packagestage_scenefunc"
@@ -174,6 +197,8 @@ python packagestage_scenefunc () {
174 pstage_cleanpackage(removepkg, d) 197 pstage_cleanpackage(removepkg, d)
175 198
176 stagepkg = bb.data.expand("${PSTAGE_PKG}", d) 199 stagepkg = bb.data.expand("${PSTAGE_PKG}", d)
200 if not os.path.exists(stagepkg):
201 staging_fetch(stagepkg, d)
177 202
178 if os.path.exists(stagepkg): 203 if os.path.exists(stagepkg):
179 path = bb.data.getVar("PATH", d, 1) 204 path = bb.data.getVar("PATH", d, 1)