From: Mark Hymers Date: Thu, 29 Oct 2009 19:59:42 +0000 (+0000) Subject: Merge commit 'ftpmaster/master' X-Git-Url: https://git.decadent.org.uk/gitweb/?a=commitdiff_plain;h=e90a4dc285d19f8e498fdbd1d94967fa756d830d;hp=63a936065dc2979df325eb34a205c3c97e0cd4ce;p=dak.git Merge commit 'ftpmaster/master' --- diff --git a/config/debian/lintian.tags b/config/debian/lintian.tags index 1c05410c..0dabaf58 100644 --- a/config/debian/lintian.tags +++ b/config/debian/lintian.tags @@ -10,7 +10,11 @@ lintian: - binary-with-bad-dynamic-table - usr-share-doc-symlink-without-dependency - mknod-in-maintainer-script + - package-contains-info-dir-file error: + - wrong-file-owner-uid-or-gid + - bad-relation + - FSSTND-dir-in-usr - binary-in-etc - missing-dependency-on-perlapi - copyright-lists-upstream-authors-with-dh_make-boilerplate diff --git a/dak/dak.py b/dak/dak.py index 19facc55..f9839ea0 100755 --- a/dak/dak.py +++ b/dak/dak.py @@ -39,6 +39,7 @@ import daklib.utils from daklib.daklog import Logger from daklib.config import Config +from daklib.dak_exceptions import CantOpenError ################################################################################ @@ -156,7 +157,11 @@ Available commands:""" def main(): """Launch dak functionality.""" - logger = Logger(Config(), 'dak top-level', print_starting=False) + + try: + logger = Logger(Config(), 'dak top-level', print_starting=False) + except CantOpenError: + logger = None functionality = init() modules = [ command for (command, _) in functionality ] @@ -200,13 +205,15 @@ def main(): except KeyboardInterrupt: msg = 'KeyboardInterrupt caught; exiting' print msg - logger.log([msg]) + if logger: + logger.log([msg]) sys.exit(1) except SystemExit: pass except: - for line in traceback.format_exc().split('\n')[:-1]: - logger.log(['exception', line]) + if logger: + for line in traceback.format_exc().split('\n')[:-1]: + logger.log(['exception', line]) raise ################################################################################ diff --git a/dak/process_new.py b/dak/process_new.py index 1ab3da45..185157ac 100755 --- a/dak/process_new.py +++ b/dak/process_new.py @@ -83,7 +83,7 @@ def recheck(upload, session): if Options["No-Action"] or Options["Automatic"] or Options["Trainee"]: answer = 'S' - print "REJECT\n" + upload.rejects.join("\n"), + print "REJECT\n%s" % '\n'.join(upload.rejects) prompt = "[R]eject, Skip, Quit ?" while prompt.find(answer) == -1: @@ -94,7 +94,7 @@ def recheck(upload, session): answer = answer[:1].upper() if answer == 'R': - upload.do_reject(manual=0, reject_message=upload.rejects.join("\n")) + upload.do_reject(manual=0, reject_message='\n'.join(upload.rejects)) os.unlink(upload.pkg.changes_file[:-8]+".dak") return 0 elif answer == 'S': diff --git a/daklib/queue.py b/daklib/queue.py index e6547f7e..1c5f98eb 100755 --- a/daklib/queue.py +++ b/daklib/queue.py @@ -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,41 @@ class Upload(object): if symlink_if_valid(queuefile_path): break + return symlinked + + ########################################################################### + + 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 + + # 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.