]> git.decadent.org.uk Git - dak.git/blobdiff - utils.py
2004-04-01 James Troup <james@nocrew.org> * jennifer (get_changelog_versions):...
[dak.git] / utils.py
index 2b40501cfac2bf6e59298578800cbf7a1a7a45e5..8445fd4d664289f1f6f9ad91335626546a27d2b5 100644 (file)
--- a/utils.py
+++ b/utils.py
@@ -2,7 +2,7 @@
 
 # Utility functions
 # Copyright (C) 2000, 2001, 2002, 2003, 2004  James Troup <james@nocrew.org>
-# $Id: utils.py,v 1.61 2004-01-21 03:20:52 troup Exp $
+# $Id: utils.py,v 1.65 2004-04-01 17:13:10 troup Exp $
 
 ################################################################################
 
@@ -45,7 +45,7 @@ re_parse_maintainer = re.compile(r"^\s*(\S.*\S)\s*\<([^\> \t]+)\>");
 changes_parse_error_exc = "Can't parse line in .changes file";
 invalid_dsc_format_exc = "Invalid .dsc file";
 nk_format_exc = "Unknown Format: in .changes file";
-no_files_exc = "No Files: field in .dsc file.";
+no_files_exc = "No Files: field in .dsc or .changes file.";
 cant_open_exc = "Can't read file.";
 unknown_hostname_exc = "Unknown hostname";
 cant_overwrite_exc = "Permission denied; can't overwrite existent file."
@@ -93,7 +93,7 @@ def extract_component_from_section(section):
 
     if section.find('/') != -1:
         component = section.split('/')[0];
-    if component.lower() == "non-us" and section.count('/') > 0:
+    if component.lower() == "non-us" and section.find('/') != -1:
         s = component + '/' + section.split('/')[1];
         if Cnf.has_key("Component::%s" % s): # Avoid e.g. non-US/libs
             component = s;
@@ -176,8 +176,8 @@ def parse_changes(filename, dsc_whitespace_rules=0):
         if line.startswith("-----BEGIN PGP SIGNATURE"):
             break;
         if line.startswith("-----BEGIN PGP SIGNED MESSAGE"):
+            inside_signature = 1;
             if dsc_whitespace_rules:
-                inside_signature = 1;
                 while index < num_of_lines and line != "":
                     index += 1;
                     line = indexed_lines[index];
@@ -274,7 +274,7 @@ def fix_maintainer (maintainer):
     rfc822 = maintainer;
     name = "";
     email = "";
-    if m != None and len(m.groups()) == 2:
+    if m and len(m.groups()) == 2:
         name = m.group(1);
         email = m.group(2);
         if name.find(',') != -1 or name.find('.') != -1:
@@ -928,6 +928,29 @@ def clean_symlink (src, dest, root):
 
 ################################################################################
 
+def temp_filename(directory=None, dotprefix=None, perms=0700):
+    """Return a secure and unique filename by pre-creating it.
+If 'directory' is non-null, it will be the directory the file is pre-created in.
+If 'dotprefix' is non-null, the filename will be prefixed with a '.'."""
+
+    if directory:
+        old_tempdir = tempfile.tempdir;
+        tempfile.tempdir = directory;
+
+    filename = tempfile.mktemp();
+
+    if dotprefix:
+        filename = "%s/.%s" % (os.path.dirname(filename), os.path.basename(filename));
+    fd = os.open(filename, os.O_RDWR|os.O_CREAT|os.O_EXCL, perms);
+    os.close(fd);
+
+    if directory:
+        tempfile.tempdir = old_tempdir;
+
+    return filename;
+
+################################################################################
+
 apt_pkg.init();
 
 Cnf = apt_pkg.newConfiguration();