[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