2007-12-30 Joerg Jaspert <joerg@debian.org>
- * dak/dak.py (init): add show-new
+ * dak/dak.py (init): add show-new. This is based on a patch
+ submitted by Thomas Viehmann in Bug #408318, but large parts of
+ handling it are rewritten and show-new is done by me.
* dak/queue_report.py (table_row): Add link to generated html page
for NEW package.
(do_lintian): new function
(check_deb): use it
(output_deb_info): Use print_escaped_text, not print_formatted_text.
+ Also import daklib.queue, determine_new now lives there
Also add a variable to see if we want html output. Default is
disabled, show_new enables it for its use.
(check_valid): Moved out of here.
(get_type): Moved out of here.
- * daklib/utils.py (determine_new): Moved here.
+ * daklib/queue.py (determine_new): Moved here.
(check_valid): Moved here.
(get_type): Moved here.
################################################################################
-import errno, os, pg, re, sys, md5, time
+import errno, os, pg, re, sys, md5
import apt_pkg, apt_inst
-import daklib.database, daklib.utils
+import daklib.database, daklib.utils, daklib.queue
################################################################################
def headline(s, level=2):
if use_html:
- print "<h%d>%s</h%d>" % (level,html_escape(s),level)
+ print "<h%d>%s</h%d>" % (level, html_escape(s), level)
else:
print "---- %s ----" % (s)
# Cnf = daklib.utils.get_conf()
Arguments = [('h',"help","Examine-Package::Options::Help"),
- ('H',"Html-output","Examine-Package::Options::Html-Output"),
+ ('H',"html-output","Examine-Package::Options::Html-Output"),
]
for i in [ "Help", "Html-Output", "partial-html" ]:
if not Cnf.has_key("Examine-Package::Options::%s" % (i)):
done = 0
while not done:
# Find out what's new
- new = daklib.utils.determine_new(changes, files, projectB)
+ new = daklib.queue.determine_new(changes, files, projectB)
if not new:
break
################################################################################
-import copy, errno, os, stat, sys, time
-import apt_pkg, apt_inst
+import copy, os, sys, time
+import apt_pkg
import examine_package
import daklib.database
import daklib.queue
changes["suite"] = copy.copy(changes["distribution"])
# Find out what's new
- new = daklib.utils.determine_new(changes, files, projectB, 0)
+ new = daklib.queue.determine_new(changes, files, projectB, 0)
stdout_fd = sys.stdout
re_fdnic = re.compile(r"\n\n")
re_bin_only_nmu = re.compile(r"\+b\d+$")
+################################################################################
+
+# Determine what parts in a .changes are NEW
+
+def determine_new(changes, files, projectB, warn=1):
+ new = {}
+
+ # Build up a list of potentially new things
+ for file in files.keys():
+ f = files[file]
+ # Skip byhand elements
+ if f["type"] == "byhand":
+ continue
+ pkg = f["package"]
+ priority = f["priority"]
+ section = f["section"]
+ type = get_type(f)
+ component = f["component"]
+
+ if type == "dsc":
+ priority = "source"
+ if not new.has_key(pkg):
+ new[pkg] = {}
+ new[pkg]["priority"] = priority
+ new[pkg]["section"] = section
+ new[pkg]["type"] = type
+ new[pkg]["component"] = component
+ new[pkg]["files"] = []
+ else:
+ old_type = new[pkg]["type"]
+ if old_type != type:
+ # source gets trumped by deb or udeb
+ if old_type == "dsc":
+ new[pkg]["priority"] = priority
+ new[pkg]["section"] = section
+ new[pkg]["type"] = type
+ new[pkg]["component"] = component
+ new[pkg]["files"].append(file)
+ if f.has_key("othercomponents"):
+ new[pkg]["othercomponents"] = f["othercomponents"]
+
+ for suite in changes["suite"].keys():
+ suite_id = database.get_suite_id(suite)
+ for pkg in new.keys():
+ component_id = database.get_component_id(new[pkg]["component"])
+ type_id = database.get_override_type_id(new[pkg]["type"])
+ q = projectB.query("SELECT package FROM override WHERE package = '%s' AND suite = %s AND component = %s AND type = %s" % (pkg, suite_id, component_id, type_id))
+ ql = q.getresult()
+ if ql:
+ for file in new[pkg]["files"]:
+ if files[file].has_key("new"):
+ del files[file]["new"]
+ del new[pkg]
+
+ if warn:
+ if changes["suite"].has_key("stable"):
+ print "WARNING: overrides will be added for stable!"
+ if changes["suite"].has_key("oldstable"):
+ print "WARNING: overrides will be added for OLDstable!"
+ for pkg in new.keys():
+ if new[pkg].has_key("othercomponents"):
+ print "WARNING: %s already present in %s distribution." % (pkg, new[pkg]["othercomponents"])
+
+ return new
+
+################################################################################
+
+def get_type(f):
+ # Determine the type
+ if f.has_key("dbtype"):
+ type = f["dbtype"]
+ elif f["type"] in [ "orig.tar.gz", "orig.tar.bz2", "tar.gz", "tar.bz2", "diff.gz", "diff.bz2", "dsc" ]:
+ type = "dsc"
+ else:
+ fubar("invalid type (%s) for new. Dazed, confused and sure as heck not continuing." % (type))
+
+ # Validate the override type
+ type_id = database.get_override_type_id(type)
+ if type_id == -1:
+ fubar("invalid type (%s) for new. Say wha?" % (type))
+
+ return type
+
+################################################################################
+
+# check if section/priority values are valid
+
+def check_valid(new):
+ for pkg in new.keys():
+ section = new[pkg]["section"]
+ priority = new[pkg]["priority"]
+ type = new[pkg]["type"]
+ new[pkg]["section id"] = database.get_section_id(section)
+ new[pkg]["priority id"] = database.get_priority_id(new[pkg]["priority"])
+ # Sanity checks
+ di = section.find("debian-installer") != -1
+ if (di and type != "udeb") or (not di and type == "udeb"):
+ new[pkg]["section id"] = -1
+ if (priority == "source" and type != "dsc") or \
+ (priority != "source" and type == "dsc"):
+ new[pkg]["priority id"] = -1
+
+
###############################################################################
# Convenience wrapper to carry around all the package information in
################################################################################
-# Determine what parts in a .changes are NEW
-
-def determine_new (changes, files, projectB, warn=1):
- new = {}
-
- # Build up a list of potentially new things
- for file in files.keys():
- f = files[file]
- # Skip byhand elements
- if f["type"] == "byhand":
- continue
- pkg = f["package"]
- priority = f["priority"]
- section = f["section"]
- type = get_type(f)
- component = f["component"]
-
- if type == "dsc":
- priority = "source"
- if not new.has_key(pkg):
- new[pkg] = {}
- new[pkg]["priority"] = priority
- new[pkg]["section"] = section
- new[pkg]["type"] = type
- new[pkg]["component"] = component
- new[pkg]["files"] = []
- else:
- old_type = new[pkg]["type"]
- if old_type != type:
- # source gets trumped by deb or udeb
- if old_type == "dsc":
- new[pkg]["priority"] = priority
- new[pkg]["section"] = section
- new[pkg]["type"] = type
- new[pkg]["component"] = component
- new[pkg]["files"].append(file)
- if f.has_key("othercomponents"):
- new[pkg]["othercomponents"] = f["othercomponents"]
-
- for suite in changes["suite"].keys():
- suite_id = database.get_suite_id(suite)
- for pkg in new.keys():
- component_id = database.get_component_id(new[pkg]["component"])
- type_id = database.get_override_type_id(new[pkg]["type"])
- q = projectB.query("SELECT package FROM override WHERE package = '%s' AND suite = %s AND component = %s AND type = %s" % (pkg, suite_id, component_id, type_id))
- ql = q.getresult()
- if ql:
- for file in new[pkg]["files"]:
- if files[file].has_key("new"):
- del files[file]["new"]
- del new[pkg]
-
- if warn:
- if changes["suite"].has_key("stable"):
- print "WARNING: overrides will be added for stable!"
- if changes["suite"].has_key("oldstable"):
- print "WARNING: overrides will be added for OLDstable!"
- for pkg in new.keys():
- if new[pkg].has_key("othercomponents"):
- print "WARNING: %s already present in %s distribution." % (pkg, new[pkg]["othercomponents"])
-
- return new
-
-################################################################################
-
-def get_type (f):
- # Determine the type
- if f.has_key("dbtype"):
- type = f["dbtype"]
- elif f["type"] in [ "orig.tar.gz", "orig.tar.bz2", "tar.gz", "tar.bz2", "diff.gz", "diff.bz2", "dsc" ]:
- type = "dsc"
- else:
- fubar("invalid type (%s) for new. Dazed, confused and sure as heck not continuing." % (type))
-
- # Validate the override type
- type_id = database.get_override_type_id(type)
- if type_id == -1:
- fubar("invalid type (%s) for new. Say wha?" % (type))
-
- return type
-
-################################################################################
-
-# check if section/priority values are valid
-
-def check_valid (new):
- for pkg in new.keys():
- section = new[pkg]["section"]
- priority = new[pkg]["priority"]
- type = new[pkg]["type"]
- new[pkg]["section id"] = database.get_section_id(section)
- new[pkg]["priority id"] = database.get_priority_id(new[pkg]["priority"])
- # Sanity checks
- di = section.find("debian-installer") != -1
- if (di and type != "udeb") or (not di and type == "udeb"):
- new[pkg]["section id"] = -1
- if (priority == "source" and type != "dsc") or \
- (priority != "source" and type == "dsc"):
- new[pkg]["priority id"] = -1
-
-################################################################################
-
# Dropped support for 1.4 and ``buggy dchanges 3.4'' (?!) compared to di.pl
def build_file_list(changes, is_a_dsc=0):