diff options
author | Lianhao Lu <lianhao.lu@intel.com> | 2011-12-22 15:29:11 +0800 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2012-01-11 10:33:24 +0000 |
commit | 9979107d8eaf503efd921564385859b1e83dbb3c (patch) | |
tree | a79dd735499d19f0b5ebefc96ccb79c001d50d6b /meta/classes | |
parent | 0df0399677a6677fc810e32e9275ee9e79021e9a (diff) | |
download | openembedded-core-9979107d8eaf503efd921564385859b1e83dbb3c.tar.gz openembedded-core-9979107d8eaf503efd921564385859b1e83dbb3c.tar.bz2 openembedded-core-9979107d8eaf503efd921564385859b1e83dbb3c.tar.xz openembedded-core-9979107d8eaf503efd921564385859b1e83dbb3c.zip |
meta/PRService: Added export/import fuctions.
[YOCTO #1556]
- Modified meta/class/package.bbclass and prserv.bbclass according to
the change in PR service by adding PACKAGE_ARCH into the query tuple.
- Added prexport.bbclass, primport.bbclass to export/import AUTOPR
values from/to PRService.
- Move PR service related common code to lib/oe/prservice.py.
- Supported reading the AUTOPR values from the exported .inc file
instead of reading it from remote PR service.
- Created a new script bitbake-prserv-tool to export/import the AUTOPR
values from/to the PR service.
Typical usage scenario of the export/import is:
1. bitbake-prserv-tool export <file> to export the AUTOPR values from
the current PR service into an exported .inc file.
2. Others may use that exported .inc file(to be included in the
local.conf) to lockdown and reproduce the same AUTOPR when generating
package feeds.
3. Others may "bitbake-prserv-tool import <file>" to import the AUTOPR
values into their own PR service and the AUTOPR values will be
incremented from there.
Signed-off-by: Lianhao Lu <lianhao.lu@intel.com>
Diffstat (limited to 'meta/classes')
-rw-r--r-- | meta/classes/package.bbclass | 13 | ||||
-rw-r--r-- | meta/classes/prexport.bbclass | 45 | ||||
-rw-r--r-- | meta/classes/primport.bbclass | 17 | ||||
-rw-r--r-- | meta/classes/prserv.bbclass | 36 |
4 files changed, 86 insertions, 25 deletions
diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass index 9040eb40b..65e65715e 100644 --- a/meta/classes/package.bbclass +++ b/meta/classes/package.bbclass @@ -351,10 +351,17 @@ def runtime_mapping_rename (varname, d): python package_get_auto_pr() { if d.getVar('USE_PR_SERV', True) != "0": - auto_pr=prserv_get_pr_auto(d) - if auto_pr is None: - bb.fatal("Can NOT get auto PR revision from remote PR service") + try: + auto_pr=prserv_get_pr_auto(d) + except Exception as e: + bb.fatal("Can NOT get PRAUTO, exception %s" % str(e)) return + if auto_pr is None: + if d.getVar('PRSERV_LOCKDOWN', True): + bb.fatal("Can NOT get PRAUTO from lockdown exported file") + else: + bb.fatal("Can NOT get PRAUTO from remote PR service") + return d.setVar('PRAUTO',str(auto_pr)) } diff --git a/meta/classes/prexport.bbclass b/meta/classes/prexport.bbclass new file mode 100644 index 000000000..5b5b707a8 --- /dev/null +++ b/meta/classes/prexport.bbclass @@ -0,0 +1,45 @@ +PRSERV_DUMPOPT_VERSION = "${PRAUTOINX}" +PRSERV_DUMPOPT_PKGARCH = "" +PRSERV_DUMPOPT_CHECKSUM = "" +PRSERV_DUMPOPT_COL = "0" + +PRSERV_DUMPDIR ??= "${LOG_DIR}/db" +PRSERV_DUMPFILE ??= "${PRSERV_DUMPDIR}/prserv.inc" + +python prexport_handler () { + import bb.event + if not e.data: + return + + if isinstance(e, bb.event.RecipeParsed): + import oe.prservice + #get all PR values for the current PRAUTOINX + ver = e.data.getVar('PRSERV_DUMPOPT_VERSION', True) + ver = ver.replace('%','-') + retval = oe.prservice.prserv_dump_db(e.data) + if not retval: + bb.fatal("prexport_handler: export failed!") + (metainfo, datainfo) = retval + if not datainfo: + bb.error("prexport_handler: No AUROPR values found for %s" % ver) + return + oe.prservice.prserv_export_tofile(e.data, None, datainfo, False) + elif isinstance(e, bb.event.ParseStarted): + import bb.utils + #remove dumpfile + bb.utils.remove(e.data.getVar('PRSERV_DUMPFILE', True)) + elif isinstance(e, bb.event.ParseCompleted): + import oe.prservice + #dump meta info of tables + d = e.data.createCopy() + d.setVar('PRSERV_DUMPOPT_COL', "1") + retval = oe.prservice.prserv_dump_db(d) + if not retval: + bb.error("prexport_handler: export failed!") + return + (metainfo, datainfo) = retval + oe.prservice.prserv_export_tofile(d, metainfo, None, True) + +} + +addhandler prexport_handler diff --git a/meta/classes/primport.bbclass b/meta/classes/primport.bbclass new file mode 100644 index 000000000..08e5a8f42 --- /dev/null +++ b/meta/classes/primport.bbclass @@ -0,0 +1,17 @@ +python primport_handler () { + import bb.event + if not e.data: + return + + if isinstance(e, bb.event.ParseCompleted): + import oe.prservice + #import all exported AUTOPR values + imported = oe.prservice.prserv_import_db(e.data) + if imported is None: + bb.fatal("import failed!") + + for (version, pkgarch, checksum, value) in imported: + bb.note("imported (%s,%s,%s,%d)" % (version, pkgarch, checksum, value)) +} + +addhandler primport_handler diff --git a/meta/classes/prserv.bbclass b/meta/classes/prserv.bbclass index 18b8589a7..0825306f9 100644 --- a/meta/classes/prserv.bbclass +++ b/meta/classes/prserv.bbclass @@ -1,29 +1,21 @@ -def prserv_make_conn(d): - import prserv.serv - host=d.getVar("PRSERV_HOST",True) - port=d.getVar("PRSERV_PORT",True) - try: - conn=None - conn=prserv.serv.PRServerConnection(host,int(port)) - d.setVar("__PRSERV_CONN",conn) - except Exception, exc: - bb.fatal("Connecting to PR service %s:%s failed: %s" % (host, port, str(exc))) - - return conn - def prserv_get_pr_auto(d): - if d.getVar('USE_PR_SERV', True) != "0": + import oe.prservice + if d.getVar('USE_PR_SERV', True) != "1": bb.warn("Not using network based PR service") return None - conn=d.getVar("__PRSERV_CONN", True) - if conn is None: - conn=prserv_make_conn(d) + version = d.getVar("PRAUTOINX", True) + pkgarch = d.getVar("PACKAGE_ARCH", True) + checksum = d.getVar("BB_TASKHASH", True) + + if d.getVar('PRSERV_LOCKDOWN', True): + auto_rev = d.getVar('PRAUTO_' + version + '_' + pkgarch, True) or d.getVar('PRAUTO_' + version, True) or None + else: + conn = d.getVar("__PRSERV_CONN", True) if conn is None: - return None + conn = oe.prservice.prserv_make_conn(d) + if conn is None: + return None + auto_rev = conn.getPR(version, pkgarch, checksum) - version=d.getVar("PF", True) - checksum=d.getVar("BB_TASKHASH", True) - auto_rev=conn.getPR(version,checksum) - bb.debug(1,"prserv_get_pr_auto: version: %s checksum: %s result %d" % (version, checksum, auto_rev)) return auto_rev |