Author: fw Date: 2007-10-17 10:15:30 +0000 (Wed, 17 Oct 2007) New Revision: 6994 Modified: lib/python/debian_support.py Log: * lib/python/debian_support.py: Remove fallback for missing python-apt These days, we need the APT algorithm, not the one described in policy. Requiring python-apt leads to a clear error message up front, instead of an obscure one much later in the process. Modified: lib/python/debian_support.py ==================================================================--- lib/python/debian_support.py 2007-10-17 07:00:00 UTC (rev 6993) +++ lib/python/debian_support.py 2007-10-17 10:15:30 UTC (rev 6994) @@ -22,11 +22,8 @@ import sha import types -try: - import apt_pkg - __have_apt_pkg = True -except ImportError: - __have_apt_pkg = False +import apt_pkg +apt_pkg.init() class ParseError(Exception): """An exception which is used to signal a parse failure. @@ -58,105 +55,31 @@ file.write("%s:%d: %s\n" % (self.filename, self.lineno, self.msg)) file.flush() -if __have_apt_pkg: - class Version: - """Version class which uses the original APT comparison algorithm.""" +class Version: + """Version class which uses the original APT comparison algorithm.""" - def __init__(self, version): - """Creates a new Version object.""" - t = type(version) - if t == types.UnicodeType: - version = version.encode(''UTF-8'') - else: - assert t == types.StringType, `version` - assert version <> "" - self.__asString = version + def __init__(self, version): + """Creates a new Version object.""" + t = type(version) + if t == types.UnicodeType: + version = version.encode(''UTF-8'') + else: + assert t == types.StringType, `version` + assert version <> "" + self.__asString = version - def __str__(self): - return self.__asString + def __str__(self): + return self.__asString - def __repr__(self): - return ''Version(%s)'' % `self.__asString` + def __repr__(self): + return ''Version(%s)'' % `self.__asString` - def __cmp__(self, other): - return apt_pkg.VersionCompare(self.__asString, other.__asString) + def __cmp__(self, other): + return apt_pkg.VersionCompare(self.__asString, other.__asString) - version_compare = apt_pkg.VersionCompare - apt_pkg.init() +version_compare = apt_pkg.VersionCompare -else: - letterValue = [None] * 256 - def initLetterValue(): - c = 0 - for x in range(ord(''A''), ord(''Z'') + 1): - letterValue[x] = chr(c) - c += 1 - for x in range(ord(''a''), ord(''z'') + 1): - letterValue[x] = chr(c) - c += 1 - for x in "+-.:": - letterValue[ord(x)] = chr(c) - c += 1 - initLetterValue() - del initLetterValue - - class Version: - """This class implements Debian version numbers.""" - - def __init__(self, version): - """Creates a new Version object.""" - assert type(version) == types.StringType, `version` - assert version <> "" - self.__asString = version - self.__parsed = self.__parse(version) - - def __str__(self): - return self.__asString - - def __repr__(self): - return ''Version(%s)'' % `self.__asString` - - def __cmp__(self, other): - """Compares two versions. - - This method implements the algorithm in the Debian Policy.""" - return cmp(self.__parsed, other.__parsed) - - def __parse(self, v, regexp=\ - re.compile(r''^(?:(\d+):)?([A-Za-z0-9.+~:-]+?)'' - + r''(?:-([A-Za-z0-9.+~]+))?$'')): - match = regexp.match(v) - if match is None: - raise ValueError, "invalid Debian version string" - (epoch, upstream, debian) = match.groups() - if epoch is None: - epoch = 0 - else: - epoch = int(epoch) - return (epoch, self.__parse_1(upstream), self.__parse_1(debian)) - - def __parse_1(self, x, non_digits=re.compile(r''^([^0-9]*)(.*)$''), - digits=re.compile(r''^([0-9]*)(.*)$'')): - l = [] - while x is not None and x <> '''': - (nd, x) = non_digits.match(x).groups() - (d, x) = digits.match(x).groups() - nd_l = [] - for ch in nd: - nd_l.append(letterValue[ord(ch)]) - nd = ''''.join(nd_l) - if d == '''': - d = 0 - else: - d = int(d) - l.append(nd) - l.append(d) - return l - - def version_compare(a,b): - return cmp(Version(a), Version(b)) - class PackageFile: """A Debian package file.