Skip to contentSkip to conversation

distrodata.bbclass: Get recipes tag info from git repo

PATCH New Mei Lei 1 participant 2 messages Mar 4, 2011

lore
Share & tools
lore

Mei Lei

author
#0 lore raw

cover distrodata.bbclass: Get recipes tag info from git repo

From: Mei Lei <[email protected]>

To reduce a lot of unnecessary upgrade reminader for those recipes which use git repo, we change the version track via tag information instead of commit checksum information.

Pull URL: git://git.pokylinux.org/poky-contrib.git
Branch: lmei3/distrodata.bbclass
Browse: http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=lmei3/distrodata.bbclass

Thanks,
Mei Lei <[email protected]>
---

Mei Lei (1):
distrodata.bbclass: Get git repo tag information

 meta/classes/distrodata.bbclass |   52 ++++++++++++++++++++++++++++++++------
 1 files changed, 43 insertions(+), 9 deletions(-)
author
#1 lore raw

PATCH 1/1 distrodata.bbclass: Get git repo tag information

From: Mei Lei <[email protected]>

For those recipes which use git repo and have tag information, we can use tag to trace the version change. For other no tag recipes, we still use their commit checksum to trace their version change.

---
 meta/classes/distrodata.bbclass |   52 ++++++++++++++++++++++++++++++++------
 1 files changed, 43 insertions(+), 9 deletions(-)
meta/classes/distrodata.bbclass +43 -9
index d84b306..e2cc8fa 100644
@@ -347,7 +347,6 @@ python do_checkpkg() {
 		f = tempfile.NamedTemporaryFile(delete=False, prefix="%s-1-" % pn)
 		status = internal_fetch_wget(url, d, f)
 		fhtml = f.read()
-
 		if status == "SUCC" and len(fhtml):
 			newver = parse_inter(curver)
 
@@ -436,6 +435,10 @@ python do_checkpkg() {
 			else:
 				"""newver still contains a full package name string"""
 				status = re.search("(\d+[\.\-_])*(\d+[0-9a-zA-Z]*)", newver[1]).group()
+				if "_" in status:
+					status = re.sub("_",".",status)
+				elif "-" in status:
+					status = re.sub("-",".",status)
 		elif not len(fhtml):
 			status = "ErrHostNoDir"
 
@@ -531,6 +534,12 @@ python do_checkpkg() {
 	
 			alturi = bb.encodeurl([type, host, altpath, user, pswd, {}])
 			newver = check_new_version(alturi, curname, d)
+			while(newver == "ErrHostNoDir"):
+				if alturi == "/download":
+					break
+				else:
+					alturi = "/".join(alturi.split("/")[0:-2]) + "/download"
+					newver = check_new_version(alturi, curname, d)
 			if not re.match("Err", newver):
 				pupver = newver
 				if pupver != pcurver:
@@ -550,13 +559,38 @@ python do_checkpkg() {
 			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:
+		gitcmd = "git ls-remote %s://%s%s%s *tag* 2>&1" % (gitproto, gituser, host, path)
+		gitcmd2 = "git ls-remote %s://%s%s%s HEAD 2>&1" % (gitproto, gituser, host, path)
+		tmp = os.popen(gitcmd).read()
+		tmp2 = os.popen(gitcmd2).read()
+		#This is for those repo have tag like: refs/tags/1.2.2
+		if tmp:
+			tmpline = tmp.split("\n")
+			verflag = 0
+			for line in tmpline:
+				if len(line)==0:
+					break;
+				puptag = line.split("/")[-1]
+				puptag = re.search("[0-9][0-9|\.|_]+[0-9]", puptag)
+				if puptag == None:
+					continue;
+				puptag = puptag.group()
+				puptag = re.sub("_",".",puptag)
+				plocaltag = pversion.split("+")[0]
+				if "git" in plocaltag:
+					plocaltag = plocaltag.split("-")[0]
+				result = bb.utils.vercmp(("0", puptag, ""), ("0", plocaltag, ""))
+				if result > 0:
+					verflag = 1
+					pstatus = "UPADTE"
+					pupver = puptag
+				elif verflag == 0 :
+					pupver = plocaltag
+					pstatus = "MATCH"
+		#This is for those no tag repo
+		elif tmp2:
+			pupver = tmp2.split("\t")[0]
+			if pupver in pversion:
 				pstatus = "MATCH"
 			else:
 				pstatus = "UPDATE"
@@ -580,7 +614,7 @@ python do_checkpkg() {
 		for line in svninfo.split("\n"):
 			if re.search("^Last Changed Rev:", line):
 				pupver = line.split(" ")[-1]
-				if pcurver == pupver:
+				if pupver in pversion:
 					pstatus = "MATCH"
 				else:
 					pstatus = "UPDATE"
Signature · 1 line
1.6.3.3