X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Fqueue.py;h=cc1e855ad307a74a1e13b62733fd25f059bfe67b;hb=df610ec6b921b869c4e4a25629a0aff3f13a03ae;hp=e6547f7eab951c9e056e68c847f5701768c65557;hpb=f1ee050ceee00693a9bea2673431291ac480b8b6;p=dak.git diff --git a/daklib/queue.py b/daklib/queue.py index e6547f7e..cc1e855a 100755 --- a/daklib/queue.py +++ b/daklib/queue.py @@ -273,19 +273,20 @@ class Upload(object): self.pkg.reset() def package_info(self): - msg = '' - - if len(self.rejects) > 0: - msg += "Reject Reasons:\n" - msg += "\n".join(self.rejects) + """ + Format various messages from this Upload to send to the maintainer. + """ - if len(self.warnings) > 0: - msg += "Warnings:\n" - msg += "\n".join(self.warnings) + msgs = ( + ('Reject Reasons', self.rejects), + ('Warnings', self.warnings), + ('Notes', self.notes), + ) - if len(self.notes) > 0: - msg += "Notes:\n" - msg += "\n".join(self.notes) + msg = '' + for title, messages in msgs: + if messages: + msg += '\n\n%s:\n%s' % (title, '\n'.join(messages)) return msg @@ -438,9 +439,8 @@ class Upload(object): # Check there isn't already a changes file of the same name in one # of the queue directories. base_filename = os.path.basename(filename) - for d in [ "Accepted", "Byhand", "Done", "New", "ProposedUpdates", "OldProposedUpdates" ]: - if os.path.exists(os.path.join(Cnf["Dir::Queue::%s" % (d) ], base_filename)): - self.rejects.append("%s: a file with this name already exists in the %s directory." % (base_filename, d)) + if get_knownchange(base_filename): + self.rejects.append("%s: a file with this name already exists." % (base_filename)) # Check the .changes is non-empty if not self.pkg.files: @@ -1182,37 +1182,19 @@ class Upload(object): self.ensure_hashes() ########################################################################### - def check_lintian(self): - cnf = Config() - - # Only check some distributions - valid_dist = False - for dist in ('unstable', 'experimental'): - if dist in self.pkg.changes['distribution']: - valid_dist = True - break - if not valid_dist: - return - - tagfile = cnf.get("Dinstall::LintianTags") - if tagfile is None: - # We don't have a tagfile, so just don't do anything. - return + def ensure_orig(self, target_dir='.', session=None): + """ + Ensures that all orig files mentioned in the changes file are present + in target_dir. If they do not exist, they are symlinked into place. - # Parse the yaml file - sourcefile = file(tagfile, 'r') - sourcecontent = sourcefile.read() - sourcefile.close() - try: - lintiantags = yaml.load(sourcecontent)['lintian'] - except yaml.YAMLError, msg: - utils.fubar("Can not read the lintian tags file %s, YAML error: %s." % (tagfile, msg)) - return + An list containing the symlinks that were created are returned (so they + can be removed). + """ - # Try and find all orig mentioned in the .dsc - target_dir = '.' symlinked = [] + cnf = Config() + for filename, entry in self.pkg.dsc_files.iteritems(): if not re_is_orig_source.match(filename): # File is not an orig; ignore @@ -1240,11 +1222,14 @@ class Upload(object): return True - session = DBConn().session() + session_ = session + if session is None: + session_ = DBConn().session() + found = False # Look in the pool - for poolfile in get_poolfile_like_name('/%s' % filename, session): + for poolfile in get_poolfile_like_name('/%s' % filename, session_): poolfile_path = os.path.join( poolfile.location.path, poolfile.filename ) @@ -1253,7 +1238,8 @@ class Upload(object): found = True break - session.close() + if session is None: + session_.close() if found: continue @@ -1263,11 +1249,11 @@ class Upload(object): 'OldProposedUpdates', 'Embargoed', 'Unembargoed') for queue in queues: - if 'Dir::Queue::%s' % directory not in cnf: + if not cnf.get('Dir::Queue::%s' % queue): continue queuefile_path = os.path.join( - cnf['Dir::Queue::%s' % directory], filename + cnf['Dir::Queue::%s' % queue], filename ) if not os.path.exists(queuefile_path): @@ -1277,6 +1263,45 @@ class Upload(object): if symlink_if_valid(queuefile_path): break + return symlinked + + ########################################################################### + + def check_lintian(self): + cnf = Config() + + # Don't reject binary uploads + if not self.pkg.changes['architecture'].has_key('source'): + return + + # Only check some distributions + valid_dist = False + for dist in ('unstable', 'experimental'): + if dist in self.pkg.changes['distribution']: + valid_dist = True + break + + if not valid_dist: + return + + 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() + sourcefile.close() + try: + lintiantags = yaml.load(sourcecontent)['lintian'] + except yaml.YAMLError, msg: + utils.fubar("Can not read the lintian tags file %s, YAML error: %s." % (tagfile, msg)) + return + + # Try and find all orig mentioned in the .dsc + symlinked = self.ensure_orig() + # Now setup the input file for lintian. lintian wants "one tag per line" only, # so put it together like it. We put all types of tags in one file and then sort # through lintians output later to see if its a fatal tag we detected, or not. @@ -1339,14 +1364,16 @@ class Upload(object): 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)) - log("overidden tag is overridden", etag) + log("ftpmaster does not allow tag to be overridable", etag) else: # Tag is known, it is not overriden, direct reject. self.rejects.append("%s: Found lintian output: '%s %s', automatically rejected package." % (epackage, etag, etext)) - log("auto rejecting", etag) # Now tell if they *might* override it. if etag in lintiantags['warning']: + log("auto rejecting", "overridable", etag) self.rejects.append("%s: If you have a good reason, you may override this lintian tag." % (epackage)) + else: + log("auto rejecting", "not overridable", etag) ########################################################################### def check_urgency(self):