]> git.decadent.org.uk Git - dak.git/commitdiff
parse_changes
authorJoerg Jaspert <joerg@debian.org>
Sat, 30 Jan 2010 14:02:44 +0000 (15:02 +0100)
committerJoerg Jaspert <joerg@debian.org>
Sat, 30 Jan 2010 14:02:44 +0000 (15:02 +0100)
as we also parse dsc files here, only do the rejection on missing keywords
when we parse a changes file.
adjust all calls for dsc files to tell us they are dsc, by default we do
the check, caller has to turn it off...

Signed-off-by: Joerg Jaspert <joerg@debian.org>
dak/check_archive.py
dak/clean_queues.py
dak/examine_package.py
dak/rm.py
daklib/queue.py
daklib/utils.py

index b9837d3049d529da66db95423e8ab023b0d610aa..8982ea4e414e8440a48ce687dfbe3854bd7e9834 100755 (executable)
@@ -162,7 +162,7 @@ def check_dscs():
         for line in list_file.readlines():
             f = line[:-1]
             try:
-                utils.parse_changes(f, signing_rules=1)
+                utils.parse_changes(f, signing_rules=1, dsc_file=1)
             except InvalidDscError, line:
                 utils.warn("syntax error in .dsc file '%s', line %s." % (f, line))
                 count += 1
@@ -339,7 +339,7 @@ def check_files_in_dsc():
 
         try:
             # NB: don't enforce .dsc syntax
-            dsc = utils.parse_changes(filename)
+            dsc = utils.parse_changes(filename, dsc_file=1)
         except:
             utils.fubar("error parsing .dsc file '%s'." % (filename))
 
@@ -461,7 +461,7 @@ def chk_bd_process_dir (unused, dirname, filenames):
         if not name.endswith(".dsc"):
             continue
         filename = os.path.abspath(dirname+'/'+name)
-        dsc = utils.parse_changes(filename)
+        dsc = utils.parse_changes(filename, dsc_file=1)
         for field_name in [ "build-depends", "build-depends-indep" ]:
             field = dsc.get(field_name)
             if field:
index f30d7f12d7bb030239e2e9c8e80da20758ac1c2b..f6964508a5b7e76a71f0c7347e5a0d441cdf44a1 100755 (executable)
@@ -143,7 +143,7 @@ def flush_orphans ():
         for f in files.keys():
             if f.endswith(".dsc"):
                 try:
-                    dsc = utils.parse_changes(f)
+                    dsc = utils.parse_changes(f, dsc_file=1)
                     dsc_files = utils.build_file_list(dsc, is_a_dsc=1)
                 except:
                     utils.warn("error processing '%s'; skipping it. [Got %s]" % (f, sys.exc_type))
index ea865ed839f38e44ee5726351e38fffcf47439d6..2961111450a275a27f76c6042b62a88ff7abefcc 100755 (executable)
@@ -272,7 +272,7 @@ def read_changes_or_dsc (suite, filename):
 
     dsc_file = utils.open_file(filename)
     try:
-        dsc = utils.parse_changes(filename)
+        dsc = utils.parse_changes(filename, dsc_file=1)
     except:
         return formatted_text("can't parse .dsc control info")
     dsc_file.close()
index 69b35971db1c0d223d5b560c1e82e9c9804355de..62c5f98052b844b4d994314fedcdd829095b4329 100755 (executable)
--- a/dak/rm.py
+++ b/dak/rm.py
@@ -399,7 +399,7 @@ def main ():
             for i in source_packages.keys():
                 filename = "/".join(source_packages[i])
                 try:
-                    dsc = utils.parse_changes(filename)
+                    dsc = utils.parse_changes(filename, dsc_file=1)
                 except CantOpenError:
                     utils.warn("couldn't open '%s'." % (filename))
                     continue
index 58a8783442f70a87281dc96ffabdadae6d4e05ae..c177602c3c55bf627af9258048419ecfc6f03861 100755 (executable)
@@ -929,7 +929,7 @@ class Upload(object):
 
         # Parse the .dsc file
         try:
-            self.pkg.dsc.update(utils.parse_changes(dsc_filename, signing_rules=1))
+            self.pkg.dsc.update(utils.parse_changes(dsc_filename, signing_rules=1, dsc_file=1))
         except CantOpenError:
             # if not -n copy_to_holding() will have done this for us...
             if not action:
index 8c96dc0637d7955cf6afad5c49a6d6dcd07e7a85..b1a34c92c9f26ba23f0415abf0f3633253cb6395 100755 (executable)
@@ -239,7 +239,7 @@ def parse_deb822(contents, signing_rules=0):
 
 ################################################################################
 
-def parse_changes(filename, signing_rules=0):
+def parse_changes(filename, signing_rules=0, dsc_file=0):
     """
     Parses a changes file and returns a dictionary where each field is a
     key.  The mandatory first argument is the filename of the .changes
@@ -270,17 +270,19 @@ def parse_changes(filename, signing_rules=0):
         raise ChangesUnicodeError, "Changes file not proper utf-8"
     changes = parse_deb822(content, signing_rules)
 
-    # Finally ensure that everything needed is there
-    must_keywords = ('Format', 'Date', 'Source', 'Binary', 'Architecture', 'Version',
-                     'Distribution', 'Maintainer', 'Description', 'Changes', 'Files')
 
-    missingfields=[]
-    for keyword in must_keywords:
-        if not changes.has_key(keyword.lower()):
-            missingfields.append(keyword)
+    if not dsc_file:
+        # Finally ensure that everything needed for .changes is there
+        must_keywords = ('Format', 'Date', 'Source', 'Binary', 'Architecture', 'Version',
+                         'Distribution', 'Maintainer', 'Description', 'Changes', 'Files')
 
-    if len(missingfields):
-        raise ParseChangesError, "Missing mandantory field(s) in changes file (policy 5.5): %s" % (missingfields)
+        missingfields=[]
+        for keyword in must_keywords:
+            if not changes.has_key(keyword.lower()):
+                missingfields.append(keyword)
+
+                if len(missingfields):
+                    raise ParseChangesError, "Missing mandantory field(s) in changes file (policy 5.5): %s" % (missingfields)
 
     return changes
 
@@ -394,7 +396,7 @@ def check_dsc_files(dsc_filename, dsc=None, dsc_files=None):
 
     # Parse the file if needed
     if dsc is None:
-        dsc = parse_changes(dsc_filename, signing_rules=1);
+        dsc = parse_changes(dsc_filename, signing_rules=1, dsc_file=1);
 
     if dsc_files is None:
         dsc_files = build_file_list(dsc, is_a_dsc=1)