# Utility functions
# Copyright (C) 2000 James Troup <james@nocrew.org>
-# $Id: utils.py,v 1.14 2001-02-04 04:28:34 troup Exp $
+# $Id: utils.py,v 1.22 2001-05-17 01:17:54 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
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-import commands, os, re, socket, shutil, stat, string, sys, tempfile
+import commands, os, pwd, re, socket, shutil, stat, string, sys, tempfile
re_comments = re.compile(r"\#.*")
re_no_epoch = re.compile(r"^\d*\:")
######################################################################################
+def str_isnum (s):
+ for c in s:
+ if c not in string.digits:
+ return 0;
+ return 1;
+
+######################################################################################
+
# What a mess. FIXME
def extract_component_from_section(section):
component = "";
changes = {};
lines = changes_in.readlines();
+ if lines == []:
+ raise changes_parse_error_exc, "[Empty changes file]";
+
# Reindex by line number so we can easily verify the format of
# .dsc files...
index = 0;
if slf:
field = string.lower(slf.groups()[0]);
changes[field] = slf.groups()[1];
+ first = 1;
continue;
mld = re.match(r'^ \.$', line);
if mld:
continue;
mlf = re.match(r'^\s(.*)', line);
if mlf:
+ if first == 1 and changes[field] != "":
+ changes[field] = changes[field] + '\n';
+ first = 0;
changes[field] = changes[field] + mlf.groups()[0] + '\n';
continue;
error = error + line;
else:
raise unknown_hostname_exc, archive
+# FIXME: if the above isn't great, this can't be either :)
+
+def which_apt_conf_file ():
+ archive = where_am_i ();
+ if archive == 'non-US':
+ return '/org/non-us.debian.org/katie/apt.conf-non-US';
+ elif archive == 'ftp-master':
+ return '/org/ftp.debian.org/katie/apt.conf';
+ else:
+ raise unknown_hostname_exc, archive
+
######################################################################################
# Escape characters which have meaning to SQL's regex comparison operator ('~')
def regex_safe (s):
s = string.replace(s, '+', '\\\\+');
+ s = string.replace(s, '.', '\\\\.');
return s
######################################################################################
+# Perform a substition of template
+def TemplateSubst(Map,Template):
+ for x in Map.keys():
+ Template = string.replace(Template,x,Map[x]);
+ return Template;
+
+######################################################################################
+
+def fubar(msg, exit_code=1):
+ sys.stderr.write("E: %s\n" % (msg));
+ sys.exit(exit_code);
+
+def warn(msg):
+ sys.stderr.write("W: %s\n" % (msg));
+
+######################################################################################
+
+# Returns the user name with a laughable attempt at rfc822 conformancy
+# (read: removing stray periods).
+def whoami ():
+ return string.replace(string.split(pwd.getpwuid(os.getuid())[4],',')[0], '.', '');
+
+######################################################################################
+
def size_type (c):
t = " b";
if c > 10000: