]> git.decadent.org.uk Git - dak.git/commitdiff
Merge commit 'ftpmaster/master'
authorMark Hymers <mhy@debian.org>
Thu, 29 Oct 2009 19:59:42 +0000 (19:59 +0000)
committerMark Hymers <mhy@debian.org>
Thu, 29 Oct 2009 19:59:42 +0000 (19:59 +0000)
config/debian/lintian.tags
dak/dak.py
dak/process_new.py
daklib/queue.py

index 1c05410ce2b63a3066c078f1d8e4186fb2854362..0dabaf58e9684760c1e648a4dc00bb7ae184b090 100644 (file)
@@ -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
index 19facc5592ef853fe36769720f7c8749d9d48d24..f9839ea0052d9f4d4fab1b0a846555b40734a5db 100755 (executable)
@@ -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
 
 ################################################################################
index 1ab3da45915de5240a956c971e66a65c57c3ea07..185157ac27290002961ebd4693e9c50fa94ff1de 100755 (executable)
@@ -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':
index e6547f7eab951c9e056e68c847f5701768c65557..1c5f98eb73101bd6775d634dc9df0b3132215c61 100755 (executable)
@@ -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.