]> git.decadent.org.uk Git - dak.git/blobdiff - utils.py
Hopefully fix permissions problems.
[dak.git] / utils.py
index 40e36cd9c6a1c79111550a616a72ccb095e6320c..122b8dd7ff16ef484450f5aed07a0431915ce1d2 100644 (file)
--- a/utils.py
+++ b/utils.py
@@ -1,6 +1,6 @@
 # Utility functions
 # Copyright (C) 2000  James Troup <james@nocrew.org>
-# $Id: utils.py,v 1.4 2000-11-27 03:15:26 troup Exp $
+# $Id: utils.py,v 1.10 2000-12-19 17:23:03 troup Exp $
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -29,6 +29,7 @@ nk_format_exc = "Unknown Format: in .changes file";
 no_files_exc = "No Files: field in .dsc file.";
 cant_open_exc = "Can't read file.";
 unknown_hostname_exc = "Unknown hostname";
+cant_overwrite_exc = "Permission denied; can't overwrite existent file."
        
 ######################################################################################
 
@@ -115,7 +116,7 @@ def build_file_list(changes, dsc):
         # What a mess.  FIXME
         if string.find(section, '/') != -1: 
            component = string.split(section, '/')[0]
-       if string.lower(component) == "non-us" and string.count(section, '/') > 1:
+       if string.lower(component) == "non-us" and string.count(section, '/') > 0:
             s = string.split(section, '/')[1]
             if s == "main" or s == "non-free" or s == "contrib": # Avoid e.g. non-US/libs
                 component = string.split(section, '/')[0]+ '/' + string.split(section, '/')[1]
@@ -188,6 +189,9 @@ def send_mail (message, filename):
 def poolify (source, component):
     if component != "":
        component = component + '/';
+    # FIXME: this is nasty
+    component = string.lower(component);
+    component = string.replace(component, 'non-us/', 'non-US/');
     if source[:3] == "lib":
        return component + source[:4] + '/' + source + '/'
     else:
@@ -196,7 +200,7 @@ def poolify (source, component):
 ######################################################################################
 
 def move (src, dest):
-    if os.path.exists(dest) and stat.S_ISDIR(os.stat(dest)[stat.ST_MODE]):
+    if os.path.exists(dest) and os.path.isdir(dest):
        dest_dir = dest;
     else:
        dest_dir = os.path.dirname(dest);
@@ -205,12 +209,17 @@ def move (src, dest):
        os.makedirs(dest_dir, 02775);
        os.umask(umask);
     #print "Moving %s to %s..." % (src, dest);
+    if os.path.exists(dest) and os.path.isdir(dest):
+       dest = dest + '/' + os.path.basename(src);
+    # Check for overwrite permission on existent files
+    if os.path.exists(dest) and not os.access(dest, os.W_OK):
+        raise cant_overwrite_exc
     shutil.copy2(src, dest);
     os.chmod(dest, 0664);
     os.unlink(src);
 
 def copy (src, dest):
-    if os.path.exists(dest) and stat.S_ISDIR(os.stat(dest)[stat.ST_MODE]):
+    if os.path.exists(dest) and os.path.isdir(dest):
        dest_dir = dest;
     else:
        dest_dir = os.path.dirname(dest);
@@ -219,6 +228,10 @@ def copy (src, dest):
        os.makedirs(dest_dir, 02775);
        os.umask(umask);
     #print "Copying %s to %s..." % (src, dest);
+    if os.path.exists(dest) and os.path.isdir(dest):
+       dest = dest + '/' + os.path.basename(src);
+    if os.path.exists(dest) and not os.access(dest, os.W_OK):
+        raise cant_overwrite_exc
     shutil.copy2(src, dest);
     os.chmod(dest, 0664);
 
@@ -252,3 +265,21 @@ def which_conf_file ():
 
 ######################################################################################
 
+# Escape characters which have meaning to SQL's regex comparison operator ('~')
+# (woefully incomplete)
+
+def regex_safe (s):
+    s = string.replace(s, '+', '\\\\+');
+    return s
+
+######################################################################################
+
+def size_type (c):
+    t  = " b";
+    if c > 10000:
+        c = c / 1000;
+        t = " Kb";
+    if c > 10000:
+        c = c / 1000;
+        t = " Mb";
+    return ("%d%s" % (c, t))