X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Fqueue.py;h=f7d999a3da7220135d89d522ac87948775182199;hb=1ef1804c272cf73da57a3e2d1cbf6c7610207ee9;hp=d217d7e4c39a836f7a0530eb402653e4a1e0b2e6;hpb=4c2ec0229b86a4ddb196bb567cf90ea2f94ae84f;p=dak.git diff --git a/daklib/queue.py b/daklib/queue.py index d217d7e4..f7d999a3 100755 --- a/daklib/queue.py +++ b/daklib/queue.py @@ -26,7 +26,6 @@ Queue utility functions for dak ############################################################################### -import cPickle import errno import os import pg @@ -1000,11 +999,6 @@ class Upload(object): for field_name in [ "build-depends", "build-depends-indep" ]: field = self.pkg.dsc.get(field_name) if field: - # Check for broken dpkg-dev lossage... - if field.startswith("ARRAY"): - self.rejects.append("%s: invalid %s field produced by a broken version of dpkg-dev (1.10.11)" % \ - (dsc_filename, field_name.title())) - # Have apt try to parse them... try: apt_pkg.ParseSrcDepends(field) @@ -1031,21 +1025,16 @@ class Upload(object): ########################################################################### - def get_changelog_versions(self, source_dir): - """Extracts a the source package and (optionally) grabs the - version history out of debian/changelog for the BTS.""" - - cnf = Config() + def ensure_all_source_exists(self, dest_dir=None): + """ + Ensure that dest_dir contains all the orig tarballs for the specified + changes. If it does not, symlink them into place. - # Find the .dsc (again) - dsc_filename = None - for f in self.pkg.files.keys(): - if self.pkg.files[f]["type"] == "dsc": - dsc_filename = f + If dest_dir is None, populate the current directory. + """ - # If there isn't one, we have nothing to do. (We have reject()ed the upload already) - if not dsc_filename: - return + if dest_dir is None: + dest_dir = os.getcwd() # Create a symlink mirror of the source files in our temporary directory for f in self.pkg.files.keys(): @@ -1070,12 +1059,32 @@ class Upload(object): dest = os.path.join(os.getcwd(), os.path.basename(orig_file)) os.symlink(self.pkg.orig_files[orig_file]["path"], dest) + ########################################################################### + + def get_changelog_versions(self, source_dir): + """Extracts a the source package and (optionally) grabs the + version history out of debian/changelog for the BTS.""" + + cnf = Config() + + # Find the .dsc (again) + dsc_filename = None + for f in self.pkg.files.keys(): + if self.pkg.files[f]["type"] == "dsc": + dsc_filename = f + + # If there isn't one, we have nothing to do. (We have reject()ed the upload already) + if not dsc_filename: + return + + self.ensure_all_source_exists() + # Extract the source cmd = "dpkg-source -sn -x %s" % (dsc_filename) (result, output) = commands.getstatusoutput(cmd) if (result != 0): self.rejects.append("'dpkg-source -x' failed for %s [return code: %s]." % (dsc_filename, result)) - self.rejects.append(utils.prefix_multi_line_string(output, " [dpkg-source output:] "), "") + self.rejects.append(utils.prefix_multi_line_string(output, " [dpkg-source output:] ")) return if not cnf.Find("Dir::Queue::BTSVersionTrack"): @@ -1213,8 +1222,13 @@ class Upload(object): if not valid_dist: return + self.ensure_all_source_exists() + cnf = Config() - tagfile = cnf("Dinstall::LintianTags") + tagfile = cnf.get("Dinstall::LintianTags") + if tagfile is None: + # We don't have a tagfile, so just don't do anything. + return # Parse the yaml file sourcefile = file(tagfile, 'r') sourcecontent = sourcefile.read() @@ -1243,13 +1257,12 @@ class Upload(object): # So now we should look at running lintian at the .changes file, capturing output # to then parse it. command = "lintian --show-overrides --tags-from-file %s %s" % (temp_filename, self.pkg.changes_file) - (result, output) = commands.getstatusoutput(cmd) + (result, output) = commands.getstatusoutput(command) # We are done with lintian, remove our tempfile os.unlink(temp_filename) - if (result != 0): - self.rejects.append("lintian failed for %s [return code: %s]." % (self.pkg.changes_file, result)) - self.rejects.append(utils.prefix_multi_line_string(output, " [possible output:] "), "") - return + if (result == 2): + utils.warn("lintian failed for %s [return code: %s]." % (self.pkg.changes_file, result)) + utils.warn(utils.prefix_multi_line_string(output, " [possible output:] ")) if len(output) == 0: return @@ -1276,6 +1289,7 @@ class Upload(object): if etag in lintiantags['warning']: # The tag is overriden, and it is allowed to be overriden. # Don't add a reject message. + pass elif etag in lintiantags['error']: # The tag is overriden - but is not allowed to be self.rejects.append("%s: Overriden tag %s found, but this tag may not be overwritten." % (epackage, etag)) @@ -1284,7 +1298,7 @@ class Upload(object): self.rejects.append("%s: Found lintian output: '%s %s', automatically rejected package." % (epackage, etag, etext)) # Now tell if they *might* override it. if etag in lintiantags['warning']: - self.rejects.append("%s: If you have a good reason, you may override this lintian tag. Laziness to fix your crap is NOT A GOOD REASON, sod off" % (epackage)) + self.rejects.append("%s: If you have a good reason, you may override this lintian tag." % (epackage)) ########################################################################### def check_urgency(self): @@ -1739,7 +1753,7 @@ distribution.""" # yes # This routine returns None on success or an error on failure - res = get_queue('accepted').autobuild_upload(self.pkg, cnf["Dir::Queue::Accepted"]) + res = get_or_set_queue('accepted').autobuild_upload(self.pkg, cnf["Dir::Queue::Accepted"]) if res: utils.fubar(res) @@ -1921,7 +1935,7 @@ distribution.""" if not manual: self.Subst["__REJECTOR_ADDRESS__"] = cnf["Dinstall::MyEmailAddress"] self.Subst["__MANUAL_REJECT_MESSAGE__"] = "" - self.Subst["__CC__"] = "X-DAK-Rejection: automatic (moo)\nX-Katie-Rejection: automatic (moo)" + self.Subst["__CC__"] = "X-DAK-Rejection: automatic (moo)" os.write(reason_fd, reject_message) reject_mail_message = utils.TemplateSubst(self.Subst, rej_template) else: @@ -2339,7 +2353,7 @@ distribution.""" self.Subst["__REJECTOR_ADDRESS__"] = cnf["Dinstall::MyEmailAddress"] self.Subst["__REJECT_MESSAGE__"] = self.package_info() self.Subst["__CC__"] = "Cc: " + cnf["Dinstall::MyEmailAddress"] - self.Subst["__BCC__"] = "X-DAK: dak process-accepted\nX-Katie: $Revision: 1.18 $" + self.Subst["__BCC__"] = "X-DAK: dak process-accepted" if cnf.has_key("Dinstall::Bcc"): self.Subst["__BCC__"] += "\nBcc: %s" % (cnf["Dinstall::Bcc"])