Author: glondu-guest Date: Sat Mar 22 11:09:59 2008 New Revision: 5360 URL: http://svn.debian.org/wsvn/?sc=1&rev=5360 Log: Various improvements to gen-binNMU-request.py * Use urllib (which is http_proxy-aware) instead of httplib. * Separate output for packages that have at least one ABI-dependent, arch-independent binary package.
Modified: trunk/tools/gen-binNMU-request/gen-binNMU-request.py Modified: trunk/tools/gen-binNMU-request/gen-binNMU-request.py URL: http://svn.debian.org/wsvn/trunk/tools/gen-binNMU-request/gen-binNMU-request.py?rev=5360&op=diff ============================================================================== --- trunk/tools/gen-binNMU-request/gen-binNMU-request.py (original) +++ trunk/tools/gen-binNMU-request/gen-binNMU-request.py Sat Mar 22 11:09:59 2008 @@ -12,12 +12,13 @@ from commands import getoutput, getstatusoutput from debian_bundle.debian_support import version_compare from xml.dom.minidom import parseString -from httplib import HTTPConnection +from urllib import urlopen node_re = sre.compile('^node[ "]*([^ "]+)[ "]*[0-9.]+ *([0-9.]+).*$') edge_re = sre.compile('^edge[ "]*([^ "]+)[ "]*([^ "]+).*$') rmadison_re = sre.compile("[ |,\n]+") binNMU_re = sre.compile("\+b([0-9]+)$") +ocamlABI_re = sre.compile(r">ocaml-[a-z-]*\d[0-9.]*\d</a>") excluded_archs = ("source", "all", "hurd-i386", "kfreebsd-i386", "kfreebsd-amd64") reference_arch = "i386" @@ -30,6 +31,13 @@ return 1 else: return int(max(x))+1 + +def abi_dependent(pkg): + """Checks whether pkg is ocaml-ABI-dependent.""" + c = urlopen("http://packages.debian.org/sid/%s" % pkg) + r = c.read() + c.close() + return bool(ocamlABI_re.search(r)) def rmadison(pkg): """Returns source_version, numNMU, some_binary_package, archs, archall_binary_packages""" @@ -44,7 +52,7 @@ binary_package_name = l[0] version = l[1] available_archs = l[3:] - if "all" in available_archs: + if "all" in available_archs and abi_dependent(binary_package_name): indep_packages.append(binary_package_name) elif reference_arch in available_archs: binary_package = binary_package_name @@ -57,13 +65,13 @@ if arch == "source" and version_compare(version, source_version) > 0: source_version = version archs.sort() - if numNMU and archs: + if (numNMU and archs) or indep_packages: return source_version, numNMU, binary_package, archs, indep_packages else: return None def get_up_to_date(status): - """Takes DOM, returns last_version_of_ocaml, list_of_up_to_date_packages""" + """Takes DOM, returns last_version_of_ocaml, dict_of_up_to_date_packages""" # Takes only run-time dependencies # All packages with build-time only dependencies will be asked for binNMU deps = status.getElementsByTagName("table")[0] @@ -72,19 +80,18 @@ if last_version_elt.attributes["class"].value != "version": raise ValueError("Unexpected Error. Check html file.") last_version = last_version_elt.firstChild.nodeValue - up_to_date = [] + up_to_date = {} for line in lines[1:]: cols = line.getElementsByTagName("td") pkg = cols[0].getElementsByTagName("span")[0].firstChild.nodeValue if cols[-1].attributes["class"].value != "none": - up_to_date.append(pkg) + up_to_date[pkg] = True return last_version, up_to_date def download(f): """Returns the contents of http://pkg-ocaml-maint.alioth.debian.org/f""" - c = HTTPConnection("pkg-ocaml-maint.alioth.debian.org") - c.request("GET", "/%s" % f) - r = c.getresponse().read() + c = urlopen("http://pkg-ocaml-maint.alioth.debian.org/%s" % f) + r = c.read() c.close() return r @@ -124,21 +131,24 @@ next_dict = {} indep_dict = {} + print "= Packages that can be binNMU'ed =\n" for pkg, deps in pkg_list: x = None - if pkg not in up_to_date: + if not up_to_date.get(pkg, False): x = rmadison(pkg) if x: source_version, numNMU, binary_package, archs, indep_packages = x - print "%s_%s, Rebuild with ocaml %s, %d, %s" % \ - (pkg, source_version, last_version, numNMU, " ".join(archs)) - for dep in deps: - binpkg, dep_ver = next_dict.get(dep, (None, None)) - if dep_ver: - print "%s dep-wait %s (>= %s)" % (pkg, binpkg, dep_ver) - next_dict[pkg] = (binary_package, source_version + "+b%d" % numNMU) if indep_packages: indep_dict[pkg] = indep_packages - print "\nBinary packages that need special attention:" + else: + # This package has no binary-indep, ABI-dep package + print "%s_%s, Rebuild with ocaml %s, %d, %s" % \ + (pkg, source_version, last_version, numNMU, " ".join(archs)) + for dep in deps: + binpkg, dep_ver = next_dict.get(dep, (None, None)) + if dep_ver: + print "%s dep-wait %s (>= %s)" % (pkg, binpkg, dep_ver) + next_dict[pkg] = (binary_package, source_version + "+b%d" % numNMU) + print "\n\n= Packages that need a sourceful upload =\n" for pkg in indep_dict: - print " in %s: %s" % (pkg, ' '.join(indep_dict[pkg])) + print "%s (because of %s)" % (pkg, ' '.join(indep_dict[pkg])) _______________________________________________ Pkg-ocaml-maint-commits mailing list Pkg-ocaml-maint-commits@lists.alioth.debian.org http://lists.alioth.debian.org/mailman/listinfo/pkg-ocaml-maint-commits