]> code.ossystems Code Review - openembedded-core.git/commitdiff
utility-tasks.bbclass: add automatic version check for GIT/SVN proto
authorKevin Tian <kevin.tian@intel.com>
Thu, 8 Jul 2010 07:42:42 +0000 (15:42 +0800)
committerSaul Wold <Saul.Wold@intel.com>
Fri, 9 Jul 2010 04:08:19 +0000 (21:08 -0700)
both git/svn supports remote information query: 'git ls-remote', and
'svn info'. With them, now upstream version will be automatically
checked for git/svn packages.

In the meantime, manual latest version tagged in distro tracking
fields are also compared as one alternative if upstream check fails.
Also such check is one indicator whether tracking field is missing.

Signed-off-by: Kevin Tian <kevin.tian@intel.com>
meta/classes/utility-tasks.bbclass
meta/conf/distro/include/private/distro_base_utils_1.inc
meta/conf/distro/include/private/distro_x11_libs.inc
meta/conf/distro/poky.conf

index c3001ecfc878b4b24eadaabc803902d34422d219..a4db4f8beb851b3b70fcd1717f2b17c1dd6ba5ae 100644 (file)
@@ -276,7 +276,6 @@ python do_checkpkg() {
 
        """generate package information from .bb file"""
        pname = bb.data.getVar('PN', d, 1)
-       pcurver = bb.data.getVar('PV', d, 1)
        pdesc = bb.data.getVar('DESCRIPTION', d, 1)
        pgrp = bb.data.getVar('SECTION', d, 1)
 
@@ -295,6 +294,11 @@ python do_checkpkg() {
        pstatus = "ErrUnknown"
 
        (type, host, path, user, pswd, parm) = bb.decodeurl(uri)
+       if type in ['http', 'https', 'ftp']:
+               pcurver = bb.data.getVar('PV', d, 1)
+       else:
+               pcurver = bb.data.getVar("SRCREV", d, 1)
+
        if type in ['http', 'https', 'ftp']:
                newver = pcurver
                altpath = path
@@ -342,12 +346,52 @@ python do_checkpkg() {
                if re.match("Err", newver):
                        pstatus = newver + ":" + altpath + ":" + dirver + ":" + curname
        elif type == 'git':
-               """N.B. Now hardcode UPDATE for git/svn/cvs."""
-               pupver = "master"
-               pstatus = "UPDATE"
+               if user:
+                       gituser = user + '@'
+               else:
+                       gituser = ""
+
+               if 'protocol' in parm:
+                       gitproto = parm['protocol']
+               else:
+                       gitproto = "rsync"
+
+               gitcmd = "git ls-remote %s://%s%s%s HEAD 2>&1" % (gitproto, gituser, host, path)
+               print gitcmd
+               ver = os.popen(gitcmd).read()
+               if ver and re.search("HEAD", ver):
+                       pupver = ver.split("\t")[0]
+                       if pcurver == pupver:
+                               pstatus = "MATCH"
+                       else:
+                               pstatus = "UPDATE"
+               else:
+                       pstatus = "ErrGitAccess"
        elif type == 'svn':
-               pupver = "HEAD"
-               pstatus = "UPDATE"
+               options = []
+               if user:
+                       options.append("--username %s" % user)
+               if pswd:
+                       options.append("--password %s" % pswd)
+               svnproto = 'svn'
+               if 'proto' in parm:
+                       svnproto = parm['proto']
+               if 'rev' in parm:
+                       pcurver = parm['rev']
+
+               svncmd = "svn info %s %s://%s%s/%s/ 2>&1" % (" ".join(options), svnproto, host, path, parm["module"])
+               print svncmd
+               svninfo = os.popen(svncmd).read()
+               for line in svninfo.split("\n"):
+                       if re.search("^Last Changed Rev:", line):
+                               pupver = line.split(" ")[-1]
+                               if pcurver == pupver:
+                                       pstatus = "MATCH"
+                               else:
+                                       pstatus = "UPDATE"
+
+               if re.match("Err", pstatus):
+                       pstatus = "ErrSvnAccess"
        elif type == 'cvs':
                pupver = "HEAD"
                pstatus = "UPDATE"
@@ -360,10 +404,22 @@ python do_checkpkg() {
 
        if re.match("Err", pstatus):
                pstatus += ":%s%s" % (host, path)
+
+       """Read from manual distro tracking fields as alternative"""
+       pmver = bb.data.getVar("RECIPE_LATEST_VERSION", d, 1)
+       if not pmver:
+               pmver = "N/A"
+               pmstatus = "ErrNoRecipeData"
+       else:
+               if pmver == pcurver:
+                       pmstatus = "MATCH"
+               else:
+                       pmstatus = "UPDATE"
+       
        lf = bb.utils.lockfile(logfile + ".lock")
        f = open(logfile, "a")
-       f.write("\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n" % \
-                 (pname, pgrp, pproto, pcurver, pupver, pstatus, pdesc))
+       f.write("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n" % \
+                 (pname, pgrp, pproto, pcurver, pmver, pupver, pmstatus, pstatus, pdesc))
        f.close()
        bb.utils.unlockfile(lf)
 }
index b36eec7e408ce7a512457a371739d55e309c5d14..8f7559ac83c895503abf4fb9ec1b3d23e5fe4e57 100644 (file)
@@ -47,7 +47,7 @@ RECIPE_COMMENTS_pn-initramfs-live-install = "local scripts follow Poky's MIT lic
 RECIPE_STATUS_pn-initscripts = "green"
 DEPENDENCY_CHECK_pn-initscripts = "not done"
 RECIPE_LATEST_VERSION_pn-initscripts = "1.0"
-RECIPE_PATCH_pn-initscripts+* = "many local scripts"
+RECIPE_PATCH_pn-initscripts = "many local scripts"
 RECIPE_INTEL_SECTION_pn-initscripts = "base utils"
 RECIPE_TIME_BETWEEN_LAST_TWO_RELEASES_pn-initscripts = "n/a"
 RECIPE_LATEST_RELEASE_DATE_pn-initscripts = "n/a"
@@ -56,7 +56,7 @@ RECIPE_COMMENTS_pn-initscripts = "local scripts follow Poky's MIT license"
 RECIPE_STATUS_pn-keymaps = "yellow" # LICENSE
 DEPENDENCY_CHECK_pn-keymaps = "not done"
 RECIPE_LATEST_VERSION_pn-keymaps = "1.0"
-RECIPE_PATCH_pn-keymaps+* = "many local keymap files"
+RECIPE_PATCH_pn-keymaps = "many local keymap files"
 RECIPE_INTEL_SECTION_pn-keymaps = "base utils"
 RECIPE_TIME_BETWEEN_LAST_TWO_RELEASES_pn-keymaps = "n/a"
 RECIPE_LATEST_RELEASE_DATE_pn-keymaps = "n/a"
@@ -74,7 +74,7 @@ RECIPE_COMMENTS_pn-modutils-initscripts = "local scripts follow Poky's MIT licen
 RECIPE_STATUS_pn-network-suspend-scripts = "yellow" # no PV
 DEPENDENCY_CHECK_pn-network-suspend-scripts = "not done"
 RECIPE_LATEST_VERSION_pn-network-suspend-scripts = "1.0"
-RECIPE_PATCH_pn-network-suspend-scripts+* = "local scripts"
+RECIPE_PATCH_pn-network-suspend-scripts = "local scripts"
 RECIPE_INTEL_SECTION_pn-network-suspend-scripts = "base utils"
 RECIPE_TIME_BETWEEN_LAST_TWO_RELEASES_pn-network-suspend-scripts = "n/a"
 RECIPE_LATEST_RELEASE_DATE_pn-network-suspend-scripts = "n/a"
@@ -83,7 +83,7 @@ RECIPE_COMMENTS_pn-network-suspend-scripts = "local scripts follow Poky's MIT li
 RECIPE_STATUS_pn-opkg-collateral = "yellow" # license
 DEPENDENCY_CHECK_pn-opkg-collateral = "not done"
 RECIPE_LATEST_VERSION_pn-opkg-collateral = "1.0"
-RECIPE_PATCH_pn-opkg-collateral+* = "local"
+RECIPE_PATCH_pn-opkg-collateral = "local"
 RECIPE_INTEL_SECTION_pn-opkg-collateral = "base utils"
 RECIPE_TIME_BETWEEN_LAST_TWO_RELEASES_pn-opkg-collateral = "n/a"
 RECIPE_LATEST_RELEASE_DATE_pn-opkg-collateral = "n/a"
index 3fbc582f61d382d1458e43b43bfbbe754b4eaea7..73e89be0991d7b1398ad11b2aa806ababbf65428 100644 (file)
@@ -426,7 +426,7 @@ RECIPE_COMMENTS_pn-libxau = ""
 
 RECIPE_STATUS_pn-libxcalibrate = "yellow"
 DEPENDENCY_CHECK_pn-libxcalibrate = "not done"
-RECIPE_LATEST_VERSION_pn-libxcalibrate = "0.0+git0+209d83af61ed38a002c8096377deac292b3e396c"
+RECIPE_LATEST_VERSION_pn-libxcalibrate = "209d83af61ed38a002c8096377deac292b3e396c"
 RECIPE_NO_OF_PATCHES_pn-libxcalibrate = "1"
 RECIPE_PATCH_pn-libxcalibrate+fix-xcb = "There is no extra reply data and if we say not to disgard it, xcb throws fatal asserts. RP - 26/11/09"
 RECIPE_INTEL_SECTION_pn-libxcalibrate = "x11/libs"
index 951e156c256c3f7b00307b5e76c73078b6ea3bf7..a99aba79668578f588e089af502bddaeb3bc7768 100644 (file)
@@ -116,4 +116,4 @@ IMAGE_FEATURES ?= ""
 EXTRAOPKGCONFIG = "poky-feed-config-opkg"
 
 require conf/distro/include/world-broken.inc
-
+require conf/distro/include/distro_tracking_fields.inc