Patchwork [3/5] classes/package(prserv).bbclass: Added PR service support.

login
register
mail settings
Submitter Lianhao Lu
Date May 19, 2011, 10:29 a.m.
Message ID <c75426ee78c4ed4dae65ba35fc8781be4afdc701.1305800693.git.lianhao.lu@intel.com>
Download mbox | patch
Permalink /patch/4501/
State New, archived
Headers show

Comments

Lianhao Lu - May 19, 2011, 10:29 a.m.
From: Lianhao Lu <lianhao.lu@intel.com>

1. Added package_get_auto_rev to PACKAGEFUNCS to get the auto
incremented value(PRAUTO) from remote PR service.

2. Save PRFORMAT to pkgdata to be used by package_write_xxx.

3. Added supporting functions in prserv.bbclass.

Signed-off-by: Lianhao Lu <lianhao.lu@intel.com>
---
 meta/classes/package.bbclass |   36 +++++++++++++++++++++++++-----------
 meta/classes/prserv.bbclass  |   29 +++++++++++++++++++++++++++++
 2 files changed, 54 insertions(+), 11 deletions(-)
 create mode 100644 meta/classes/prserv.bbclass
Richard Purdie - May 19, 2011, 11:54 a.m.
On Thu, 2011-05-19 at 18:29 +0800, Lianhao Lu wrote:
> From: Lianhao Lu <lianhao.lu@intel.com>
> 
> 1. Added package_get_auto_rev to PACKAGEFUNCS to get the auto
> incremented value(PRAUTO) from remote PR service.
> 
> 2. Save PRFORMAT to pkgdata to be used by package_write_xxx.
> 
> 3. Added supporting functions in prserv.bbclass.
> 
> Signed-off-by: Lianhao Lu <lianhao.lu@intel.com>
> ---
>  meta/classes/package.bbclass |   36 +++++++++++++++++++++++++-----------
>  meta/classes/prserv.bbclass  |   29 +++++++++++++++++++++++++++++
>  2 files changed, 54 insertions(+), 11 deletions(-)
>  create mode 100644 meta/classes/prserv.bbclass
> 
> diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
> index 4eb349d..efadbbd 100644
> --- a/meta/classes/package.bbclass
> +++ b/meta/classes/package.bbclass
> @@ -324,6 +327,15 @@ def runtime_mapping_rename (varname, d):
>  # Package functions suitable for inclusion in PACKAGEFUNCS
>  #
>  
> +python package_get_auto_rev() {
> +	if bb.data.getVar('USE_PR_SERV', d, True):
> +		auto_rev=get_auto_rev(d)
> +		if auto_rev is None:
> +			bb.fatal("Can NOT get auto revision from remote PR service")
> +			return
> +		bb.data.setVar('PRAUTO',str(auto_rev),d)
> +}
> +
>  python package_do_split_locales() {
>  	if (bb.data.getVar('PACKAGE_NO_LOCALE', d, True) == '1'):
>  		bb.debug(1, "package requested not splitting locales")

This looks a little confusing to me as at first glance I'd have said it
was related to SRCREV auto incrementing. Can we add something to to with
pr to the function name? Function names like get_auto_rev() and
make_conf() also need clearer namespacing to include prserv as a prefix
so its clearer where the functions are from and what they do.

Cheers,

Richard

Patch

diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
index 4eb349d..efadbbd 100644
--- a/meta/classes/package.bbclass
+++ b/meta/classes/package.bbclass
@@ -7,34 +7,37 @@ 
 #
 # There are the following default steps but PACKAGEFUNCS can be extended:
 #
-# a) perform_packagecopy - Copy D into PKGD
+# a) package_get_auto_rev - get PRAUTO from remote PR service
 #
-# b) package_do_split_locales - Split out the locale files, updates FILES and PACKAGES
+# b) perform_packagecopy - Copy D into PKGD
 #
-# c) split_and_strip_files - split the files into runtime and debug and strip them.
+# c) package_do_split_locales - Split out the locale files, updates FILES and PACKAGES
+#
+# d) split_and_strip_files - split the files into runtime and debug and strip them.
 #    Debug files include debug info split, and associated sources that end up in -dbg packages
 #
-# d) populate_packages - Split the files in PKGD into separate packages in PKGDEST/<pkgname>
+# e) populate_packages - Split the files in PKGD into separate packages in PKGDEST/<pkgname>
 #    Also triggers the binary stripping code to put files in -dbg packages.
 #
-# e) package_do_filedeps - Collect perfile run-time dependency metadata
+# f) package_do_filedeps - Collect perfile run-time dependency metadata
 #    The data is stores in FILER{PROVIDES,DEPENDS}_file_pkg variables with
 #    a list of affected files in FILER{PROVIDES,DEPENDS}FLIST_pkg
 #
-# f) package_do_shlibs - Look at the shared libraries generated and autotmatically add any 
+# g) package_do_shlibs - Look at the shared libraries generated and autotmatically add any 
 #    depenedencies found. Also stores the package name so anyone else using this library 
 #    knows which package to depend on.
 #
-# g) package_do_pkgconfig - Keep track of which packages need and provide which .pc files
+# h) package_do_pkgconfig - Keep track of which packages need and provide which .pc files
 #
-# h) read_shlibdeps - Reads the stored shlibs information into the metadata
+# i) read_shlibdeps - Reads the stored shlibs information into the metadata
 #
-# i) package_depchains - Adds automatic dependencies to -dbg and -dev packages
+# j) package_depchains - Adds automatic dependencies to -dbg and -dev packages
 #
-# j) emit_pkgdata - saves the packaging data into PKGDATA_DIR for use in later 
+# k) emit_pkgdata - saves the packaging data into PKGDATA_DIR for use in later 
 #    packaging steps
 
 inherit packagedata
+inherit prserv
 
 PKGD    = "${WORKDIR}/package"
 PKGDEST = "${WORKDIR}/packages-split"
@@ -324,6 +327,15 @@  def runtime_mapping_rename (varname, d):
 # Package functions suitable for inclusion in PACKAGEFUNCS
 #
 
+python package_get_auto_rev() {
+	if bb.data.getVar('USE_PR_SERV', d, True):
+		auto_rev=get_auto_rev(d)
+		if auto_rev is None:
+			bb.fatal("Can NOT get auto revision from remote PR service")
+			return
+		bb.data.setVar('PRAUTO',str(auto_rev),d)
+}
+
 python package_do_split_locales() {
 	if (bb.data.getVar('PACKAGE_NO_LOCALE', d, True) == '1'):
 		bb.debug(1, "package requested not splitting locales")
@@ -771,6 +783,7 @@  python emit_pkgdata() {
 		write_if_exists(sf, pkg, 'PN')
 		write_if_exists(sf, pkg, 'PV')
 		write_if_exists(sf, pkg, 'PR')
+		write_if_exists(sf, pkg, 'PRFORMAT')
 		write_if_exists(sf, pkg, 'DESCRIPTION')
 		write_if_exists(sf, pkg, 'SUMMARY')
 		write_if_exists(sf, pkg, 'RDEPENDS')
@@ -1346,7 +1359,8 @@  python package_depchains() {
 }
 
 PACKAGE_PREPROCESS_FUNCS ?= ""
-PACKAGEFUNCS ?= "perform_packagecopy \
+PACKAGEFUNCS ?= "package_get_auto_rev \	
+                perform_packagecopy \
                 ${PACKAGE_PREPROCESS_FUNCS} \
 		package_do_split_locales \
 		split_and_strip_files \
diff --git a/meta/classes/prserv.bbclass b/meta/classes/prserv.bbclass
new file mode 100644
index 0000000..67c88f9
--- /dev/null
+++ b/meta/classes/prserv.bbclass
@@ -0,0 +1,29 @@ 
+def make_conn(d):
+    import prserv.serv
+    host=bb.data.getVar("PRSERV_HOST",d,True)
+    port=bb.data.getVar("PRSERV_PORT",d,True)
+    try:
+        conn=None
+        conn=prserv.serv.PRServerConnection(host,int(port))
+        bb.data.setVar("__PRSERV_CONN",conn,d)
+    except Exception, exc:
+        bb.fatal("Connecting to PR service %s:%s failed: %s" % (host, port, str(exc)))
+
+    return conn
+
+def get_auto_rev(d):
+    if not bb.data.getVar('USE_PR_SERV', d, True):
+        bb.warn("Not using network based PR service")
+        return None
+
+    conn=bb.data.getVar("__PRSERV_CONN", d, True)
+    if conn is None:
+        conn=make_conn(d)
+        if conn is None:
+            return None
+
+    version=bb.data.getVar("PF", d, True)
+    checksum=bb.data.getVar("BB_TASKHASH", d, True)
+    auto_rev=conn.getPR(version,checksum)
+    bb.debug(1,"get_auto_rev: version: %s checksum: %s result %d" % (version, checksum, auto_rev))
+    return auto_rev