X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=utils.py;h=8058d3bea9b0305477a75ce08e465125c80a7e98;hb=62f80fe886360a984b5225c7aaa7637635335248;hp=54ab406be8cb505f45513a156d66e6e04854a0cb;hpb=e8eacb00ee41d7ab974ba913fff40e5c082b8e1a;p=dak.git diff --git a/utils.py b/utils.py index 54ab406b..8058d3be 100644 --- a/utils.py +++ b/utils.py @@ -1,6 +1,6 @@ # Utility functions # Copyright (C) 2000 James Troup -# $Id: utils.py,v 1.8 2000-12-13 03:18:50 troup Exp $ +# $Id: utils.py,v 1.12 2001-01-25 06:00:07 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." ###################################################################################### @@ -53,6 +54,29 @@ def our_raw_input(): ###################################################################################### +# What a mess. FIXME +def extract_component_from_section(section): + component = ""; + + if string.find(section, '/') != -1: + component = string.split(section, '/')[0]; + 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]; + + if string.lower(section) == "non-us": + component = "non-US/main"; + + if component == "": + component = "main"; + elif string.lower(component) == "non-us": + component = "non-US/main"; + + return (section, component); + +###################################################################################### + def parse_changes(filename): changes_in = open_file(filename,'r'); error = "" @@ -103,30 +127,19 @@ def build_file_list(changes, dsc): if i == "": break s = string.split(i) - section = priority = component = "" - if dsc != "": - (md5, size, name) = s - else: - (md5, size, section, priority, name) = s + section = priority = ""; + try: + if dsc != "": + (md5, size, name) = s + else: + (md5, size, section, priority, name) = s + except ValueError: + raise changes_parse_error_exc, i if section == "": section = "-" if priority == "": priority = "-" - # What a mess. FIXME - if string.find(section, '/') != -1: - component = string.split(section, '/')[0] - 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] - - if string.lower(section) == "non-us": - component = "non-US/main"; - - if component == "": - component = "main"; - elif string.lower(component) == "non-us": - component = "non-US/main"; + (section, component) = extract_component_from_section(section); files[name] = { "md5sum" : md5, "size" : size, @@ -208,9 +221,12 @@ def move (src, dest): os.makedirs(dest_dir, 02775); os.umask(umask); #print "Moving %s to %s..." % (src, dest); - shutil.copy2(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); @@ -224,9 +240,11 @@ def copy (src, dest): os.makedirs(dest_dir, 02775); os.umask(umask); #print "Copying %s to %s..." % (src, dest); - shutil.copy2(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); ###################################################################################### @@ -268,3 +286,12 @@ def regex_safe (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))