[kernel] r5277 -
people/waldi/linux-2.6/debian/lib/python/debian_linux
Bastian Blank
waldi at costa.debian.org
Thu Jan 5 13:41:46 UTC 2006
Author: waldi
Date: Thu Jan 5 13:41:45 2006
New Revision: 5277
Modified:
people/waldi/linux-2.6/debian/lib/python/debian_linux/debian.py
people/waldi/linux-2.6/debian/lib/python/debian_linux/gencontrol.py
Log:
* debian/lib/python/debian_linux/debian.py
- Add package_relation, package_relation_list and package_relation_group
classes.
- Use them in the package class.
* debian/lib/python/debian_linux/gencontrol.py
- Support new relation classes.
Modified: people/waldi/linux-2.6/debian/lib/python/debian_linux/debian.py
==============================================================================
--- people/waldi/linux-2.6/debian/lib/python/debian_linux/debian.py (original)
+++ people/waldi/linux-2.6/debian/lib/python/debian_linux/debian.py Thu Jan 5 13:41:45 2006
@@ -81,6 +81,64 @@
ret['source_upstream'] = ret['upstream']
return ret
+class package_relation(object):
+ __slots__ = "name", "version", "arches"
+
+ _re = re.compile(r'^(\S+)(?: \(([^)]+)\))?(?: \[([^]]+)\])?$')
+
+ def __init__(self, value = None):
+ if value is not None:
+ match = self._re.match(value)
+ if match is None:
+ raise RuntimeError, "Can't parse dependency %s" % value
+ match = match.groups()
+ self.name = match[0]
+ self.version = match[1]
+ if match[2] is not None:
+ self.arches = re.split('\s+', match[2])
+ else:
+ self.arches = []
+ else:
+ self.name = None
+ self.version = None
+ self.arches = []
+
+ def __str__(self):
+ ret = [self.name]
+ if self.version is not None:
+ ret.extend([' (', self.version, ')'])
+ if self.arches:
+ ret.extend([' [', ' '.join(self.arches), ']'])
+ return ''.join(ret)
+
+class package_relation_list(list):
+ def __init__(self, value = None):
+ if isinstance(value, (list, tuple)):
+ self.extend(value)
+ elif value is not None:
+ self.extend(value)
+
+ def __str__(self):
+ return ', '.join([str(i) for i in self])
+
+ def extend(self, value):
+ if isinstance(value, basestring):
+ value = [package_relation_group(j.strip()) for j in re.split(',', value.strip())]
+ super(package_relation_list, self).extend(value)
+
+class package_relation_group(list):
+ def __init__(self, value = None):
+ if isinstance(value, package_relation_list):
+ self.extend(value)
+ elif value is not None:
+ self._extend(value)
+
+ def __str__(self):
+ return ' | '.join([str(i) for i in self])
+
+ def _extend(self, value):
+ self.extend([package_relation(j.strip()) for j in re.split('\|', value.strip())])
+
class package(dict):
_fields = utils.sorted_dict((
('Package', str),
@@ -91,14 +149,14 @@
('Maintainer', str),
('Uploaders', str),
('Standards-Version', str),
- ('Build-Depends', str),
- ('Build-Depends-Indep', str),
- ('Provides', utils.field_list_commata),
- ('Depends', utils.field_list_commata),
- ('Recommends', utils.field_list_commata),
- ('Suggests', utils.field_list_commata),
- ('Replaces', utils.field_list_commata),
- ('Conflicts', utils.field_list_commata),
+ ('Build-Depends', package_relation_list),
+ ('Build-Depends-Indep', package_relation_list),
+ ('Provides', package_relation_list),
+ ('Depends', package_relation_list),
+ ('Recommends', package_relation_list),
+ ('Suggests', package_relation_list),
+ ('Replaces', package_relation_list),
+ ('Conflicts', package_relation_list),
('Description', utils.field_string),
))
Modified: people/waldi/linux-2.6/debian/lib/python/debian_linux/gencontrol.py
==============================================================================
--- people/waldi/linux-2.6/debian/lib/python/debian_linux/gencontrol.py (original)
+++ people/waldi/linux-2.6/debian/lib/python/debian_linux/gencontrol.py Thu Jan 5 13:41:45 2006
@@ -188,11 +188,17 @@
def process_relation(self, key, e, in_e, vars):
in_dep = in_e[key]
- dep = type(in_dep)()
- for d in in_dep:
- d = self.substitute(d, vars)
- if d:
- dep.append(d)
+ dep = package_relation_list()
+ for in_groups in in_dep:
+ groups = package_relation_group()
+ for in_item in in_groups:
+ item = package_relation()
+ item.name = self.substitute(in_item.name, vars)
+ if in_item.version is not None:
+ item.version = self.substitute(in_item.version, vars)
+ item.arches = in_item.arches
+ groups.append(item)
+ dep.append(groups)
e[key] = dep
def process_description(self, e, in_e, vars):
@@ -207,15 +213,15 @@
def process_package(self, in_entry, vars):
e = package()
- for key in in_entry.iterkeys():
- if key in (('Depends', 'Provides', 'Suggests', 'Recommends', 'Conflicts')):
+ for key, value in in_entry.iteritems():
+ if isinstance(value, package_relation_list):
self.process_relation(key, e, in_entry, vars)
elif key == 'Description':
self.process_description(e, in_entry, vars)
elif key[:2] == 'X-':
pass
else:
- e[key] = self.substitute(in_entry[key], vars)
+ e[key] = self.substitute(value, vars)
return e
def process_packages(self, in_entries, vars):
More information about the Kernel-svn-changes
mailing list