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.