]> git.decadent.org.uk Git - dak.git/commitdiff
Merge branch 'merge'
authorJoerg Jaspert <joerg@debian.org>
Thu, 29 Oct 2009 14:59:34 +0000 (15:59 +0100)
committerJoerg Jaspert <joerg@debian.org>
Thu, 29 Oct 2009 14:59:34 +0000 (15:59 +0100)
* merge:
  Some people can't open the log; handle this gracefully.
  Split out symlink creation into Upload.ensure_orig

dak/dak.py
daklib/queue.py

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 61e2df05d5bef723b0b7b713b0f9a56d65599c95..d73b4797732bc278a64996661d9c1934b6783b92 100755 (executable)
@@ -1196,37 +1196,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
@@ -1254,11 +1236,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
                 )
@@ -1267,7 +1252,8 @@ class Upload(object):
                     found = True
                     break
 
-            session.close()
+            if session is None:
+                session_.close()
 
             if found:
                 continue
@@ -1291,6 +1277,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.