aboutsummaryrefslogtreecommitdiffstats
path: root/debian/lib/python/debian_linux/debian.py
diff options
context:
space:
mode:
Diffstat (limited to 'debian/lib/python/debian_linux/debian.py')
-rw-r--r--debian/lib/python/debian_linux/debian.py348
1 files changed, 0 insertions, 348 deletions
diff --git a/debian/lib/python/debian_linux/debian.py b/debian/lib/python/debian_linux/debian.py
deleted file mode 100644
index 8783d090cb1f..000000000000
--- a/debian/lib/python/debian_linux/debian.py
+++ /dev/null
@@ -1,348 +0,0 @@
-import itertools, os.path, re, utils
-
-class Changelog(list):
- _rules = r"""
-^
-(?P<source>
- \w[-+0-9a-z.]+
-)
-\
-\(
-(?P<version>
- [^\(\)\ \t]+
-)
-\)
-\s+
-(?P<distribution>
- [-+0-9a-zA-Z.]+
-)
-\;
-"""
- _re = re.compile(_rules, re.X)
-
- class Entry(object):
- __slot__ = 'distribution', 'source', 'version'
-
- def __init__(self, distribution, source, version):
- self.distribution, self.source, self.version = distribution, source, version
-
- def __init__(self, dir = '', version = None):
- if version is None:
- version = Version
- f = file(os.path.join(dir, "debian/changelog"))
- while True:
- line = f.readline()
- if not line:
- break
- match = self._re.match(line)
- if not match:
- continue
- try:
- v = version(match.group('version'))
- except Exception:
- if not len(self):
- raise
- v = Version(match.group('version'))
- self.append(self.Entry(match.group('distribution'), match.group('source'), v))
-
-class Version(object):
- _version_rules = ur"""
-^
-(?:
- (?P<epoch>
- \d+
- )
- :
-)?
-(?P<upstream>
- .+?
-)
-(?:
- -
- (?P<revision>[^-]+)
-)?
-$
-"""
- _version_re = re.compile(_version_rules, re.X)
-
- def __init__(self, version):
- match = self._version_re.match(version)
- if match is None:
- raise RuntimeError, "Invalid debian version"
- self.epoch = None
- if match.group("epoch") is not None:
- self.epoch = int(match.group("epoch"))
- self.upstream = match.group("upstream")
- self.revision = match.group("revision")
-
- def __str__(self):
- return self.complete
-
- @property
- def complete(self):
- if self.epoch is not None:
- return "%d:%s" % (self.epoch, self.complete_noepoch)
- return self.complete_noepoch
-
- @property
- def complete_noepoch(self):
- if self.revision is not None:
- return "%s-%s" % (self.upstream, self.revision)
- return self.upstream
-
- @property
- def debian(self):
- from warnings import warn
- warn("debian argument was replaced by revision", DeprecationWarning, stacklevel = 2)
- return self.revision
-
-class VersionLinux(Version):
- _version_linux_rules = ur"""
-^
-(?P<version>
- (?P<major>\d+\.\d+)
- \.
- \d+
-)
-(?:
- ~
- (?P<modifier>
- .+?
- )
-)?
-(?:
- \.dfsg\.
- (?P<dfsg>
- \d+
- )
-)?
--
-(?:[^-]+)
-$
-"""
- _version_linux_re = re.compile(_version_linux_rules, re.X)
-
- def __init__(self, version):
- super(VersionLinux, self).__init__(version)
- match = self._version_linux_re.match(version)
- if match is None:
- raise RuntimeError, "Invalid debian linux version"
- d = match.groupdict()
- self.linux_major = d['major']
- self.linux_modifier = d['modifier']
- self.linux_version = d['version']
- if d['modifier'] is not None:
- self.linux_upstream = '-'.join((d['version'], d['modifier']))
- else:
- self.linux_upstream = d['version']
- self.linux_dfsg = d['dfsg']
-
-class PackageFieldList(list):
- def __init__(self, value = None):
- self.extend(value)
-
- def __str__(self):
- return ' '.join(self)
-
- def _extend(self, value):
- if value is not None:
- self.extend([j.strip() for j in re.split('\s', value.strip())])
-
- def extend(self, value):
- if isinstance(value, str):
- self._extend(value)
- else:
- super(PackageFieldList, self).extend(value)
-
-class PackageDescription(object):
- __slots__ = "short", "long"
-
- def __init__(self, value = None):
- self.long = []
- if value is not None:
- self.short, long = value.split("\n", 1)
- self.append(long)
- else:
- self.short = None
-
- def __str__(self):
- ret = self.short + '\n'
- w = utils.TextWrapper(width = 74, fix_sentence_endings = True)
- pars = []
- for i in self.long:
- pars.append('\n '.join(w.wrap(i)))
- return self.short + '\n ' + '\n .\n '.join(pars)
-
- def append(self, str):
- str = str.strip()
- if str:
- self.long.extend(str.split("\n.\n"))
-
-class PackageRelation(list):
- def __init__(self, value = None):
- if value is not None:
- self.extend(value)
-
- def __str__(self):
- return ', '.join([str(i) for i in self])
-
- def _match(self, value):
- for i in self:
- if i._match(value):
- return i
- return None
-
- def append(self, value):
- if isinstance(value, basestring):
- value = PackageRelationGroup(value)
- elif not isinstance(value, PackageRelationGroup):
- raise ValueError, "got %s" % type(value)
- j = self._match(value)
- if j:
- j._updateArches(value)
- else:
- super(PackageRelation, self).append(value)
-
- def extend(self, value):
- if isinstance(value, basestring):
- value = [j.strip() for j in re.split(',', value.strip())]
- elif not isinstance(value, (list, tuple)):
- raise ValueError, "got %s" % type(value)
- for i in value:
- self.append(i)
-
-class PackageRelationGroup(list):
- def __init__(self, value = None):
- if value is not None:
- self.extend(value)
-
- def __str__(self):
- return ' | '.join([str(i) for i in self])
-
- def _match(self, value):
- for i, j in itertools.izip(self, value):
- if i.name != j.name or i.version != j.version:
- return None
- return self
-
- def _updateArches(self, value):
- for i, j in itertools.izip(self, value):
- if i.arches:
- for arch in j.arches:
- if arch not in i.arches:
- i.arches.append(arch)
-
- def append(self, value):
- if isinstance(value, basestring):
- value = PackageRelationEntry(value)
- elif not isinstance(value, PackageRelationEntry):
- raise ValueError
- super(PackageRelationGroup, self).append(value)
-
- def extend(self, value):
- if isinstance(value, basestring):
- value = [j.strip() for j in re.split('\|', value.strip())]
- elif not isinstance(value, (list, tuple)):
- raise ValueError
- for i in value:
- self.append(i)
-
-class PackageRelationEntry(object):
- __slots__ = "name", "operator", "version", "arches"
-
- _re = re.compile(r'^(\S+)(?: \((<<|<=|=|!=|>=|>>)\s*([^)]+)\))?(?: \[([^]]+)\])?$')
-
- class _operator(object):
- OP_LT = 1; OP_LE = 2; OP_EQ = 3; OP_NE = 4; OP_GE = 5; OP_GT = 6
- operators = { '<<': OP_LT, '<=': OP_LE, '=': OP_EQ, '!=': OP_NE, '>=': OP_GE, '>>': OP_GT }
- operators_neg = { OP_LT: OP_GE, OP_LE: OP_GT, OP_EQ: OP_NE, OP_NE: OP_EQ, OP_GE: OP_LT, OP_GT: OP_LE }
- operators_text = dict([(b, a) for a, b in operators.iteritems()])
-
- __slots__ = '_op',
-
- def __init__(self, value):
- self._op = self.operators[value]
-
- def __neg__(self):
- return self.__class__(self.operators_text[self.operators_neg[self._op]])
-
- def __str__(self):
- return self.operators_text[self._op]
-
- def __init__(self, value = None):
- if isinstance(value, basestring):
- self.parse(value)
- else:
- raise ValueError
-
- def __str__(self):
- ret = [self.name]
- if self.operator is not None and self.version is not None:
- ret.extend([' (', str(self.operator), ' ', self.version, ')'])
- if self.arches:
- ret.extend([' [', ' '.join(self.arches), ']'])
- return ''.join(ret)
-
- def parse(self, value):
- match = self._re.match(value)
- if match is None:
- raise RuntimeError, "Can't parse dependency %s" % value
- match = match.groups()
- self.name = match[0]
- if match[1] is not None:
- self.operator = self._operator(match[1])
- else:
- self.operator = None
- self.version = match[2]
- if match[3] is not None:
- self.arches = re.split('\s+', match[3])
- else:
- self.arches = []
-
-class Package(dict):
- _fields = utils.SortedDict((
- ('Package', str),
- ('Source', str),
- ('Architecture', PackageFieldList),
- ('Section', str),
- ('Priority', str),
- ('Maintainer', str),
- ('Uploaders', str),
- ('Standards-Version', str),
- ('Build-Depends', PackageRelation),
- ('Build-Depends-Indep', PackageRelation),
- ('Provides', PackageRelation),
- ('Pre-Depends', PackageRelation),
- ('Depends', PackageRelation),
- ('Recommends', PackageRelation),
- ('Suggests', PackageRelation),
- ('Replaces', PackageRelation),
- ('Conflicts', PackageRelation),
- ('Description', PackageDescription),
- ))
-
- def __setitem__(self, key, value):
- try:
- cls = self._fields[key]
- if not isinstance(value, cls):
- value = cls(value)
- except KeyError: pass
- super(Package, self).__setitem__(key, value)
-
- def iterkeys(self):
- keys = set(self.keys())
- for i in self._fields.iterkeys():
- if self.has_key(i):
- keys.remove(i)
- yield i
- for i in keys:
- yield i
-
- def iteritems(self):
- for i in self.iterkeys():
- yield (i, self[i])
-
- def itervalues(self):
- for i in self.iterkeys():
- yield self[i]
-