[kernel] r4814 - in people/waldi/linux-2.6/debian: bin lib/python/debian_linux

Bastian Blank waldi at costa.debian.org
Sun Nov 13 17:38:52 UTC 2005


Author: waldi
Date: Sun Nov 13 17:38:50 2005
New Revision: 4814

Modified:
   people/waldi/linux-2.6/debian/bin/gencontrol.py
   people/waldi/linux-2.6/debian/lib/python/debian_linux/debian.py
   people/waldi/linux-2.6/debian/lib/python/debian_linux/gencontrol.py
   people/waldi/linux-2.6/debian/lib/python/debian_linux/utils.py
Log:
* debian/bin/gencontrol.py, debian/lib/python/debian_linux/gencontrol.py,
  debian/lib/python/debian_linux/utils.py: Teach package object how to
  work with list attributes.
* debian/lib/python/debian_linux/debian.py: Don't use utils.entry.


Modified: people/waldi/linux-2.6/debian/bin/gencontrol.py
==============================================================================
--- people/waldi/linux-2.6/debian/bin/gencontrol.py	(original)
+++ people/waldi/linux-2.6/debian/bin/gencontrol.py	Sun Nov 13 17:38:50 2005
@@ -21,9 +21,9 @@
         name = package_headers_arch['Package']
         if packages.has_key(name):
             package_headers_arch = packages.get(name)
-            package_headers_arch['Architecture'][1].append(arch)
+            package_headers_arch['Architecture'].append(arch)
         else:
-            package_headers_arch['Architecture'] = (' ', [arch])
+            package_headers_arch['Architecture'] = [arch]
             packages.append(package_headers_arch)
 
         makeflags_string = ' '.join(["%s='%s'" % i for i in makeflags.iteritems()])
@@ -55,9 +55,9 @@
         name = package_headers['Package']
         if packages.has_key(name):
             package_headers = packages.get(name)
-            package_headers['Architecture'][1].append(arch)
+            package_headers['Architecture'].append(arch)
         else:
-            package_headers['Architecture'] = (' ', [arch])
+            package_headers['Architecture'] = [arch]
             packages.append(package_headers)
 
         makeflags_string = ' '.join(["%s='%s'" % i for i in makeflags.iteritems()])
@@ -99,9 +99,9 @@
             name = package['Package']
             if packages.has_key(name):
                 package = packages.get(name)
-                package['Architecture'][1].append(arch)
+                package['Architecture'].append(arch)
             else:
-                package['Architecture'] = (' ', [arch])
+                package['Architecture'] = [arch]
                 packages.append(package)
 
         extra['headers_arch_depends'].append(packages_own[1]['Package'])
@@ -125,16 +125,11 @@
             in_entry['Description'] += "\n.\n" + vars['desc']
         entry = self.process_package(in_entry, vars)
         for field in (('Depends', 'Provides', 'Suggests', 'Recommends', 'Conflicts')):
-            value = []
-            tmp = entry.get(field, None)
-            if tmp:
-                tmp = tmp.split(',')
-                for t in tmp:
-                    value.append(t.strip())
+            value = entry.get(field, None)
             t = vars.get(field.lower(), None)
             if t is not None:
-                value.append(t)
-            entry[field] = ', '.join(value)
+                value.extend(t)
+            entry[field] = value
         return entry
 
     def process_real_tree(self, in_entry, vars):

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	Sun Nov 13 17:38:50 2005
@@ -34,7 +34,7 @@
         if not match:
             continue
         if match.group('header'):
-            e = utils.entry()
+            e = {}
             e['Distribution'] = match.group('header_distribution')
             e['Source'] = match.group('header_source')
             version = parse_version(match.group('header_version'))

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	Sun Nov 13 17:38:50 2005
@@ -68,7 +68,7 @@
         packages.extend(self.process_packages(templates_extra, {}))
         extra_arches = {}
         for package in templates_extra:
-            arches = package['Architecture'].split(' ')
+            arches = package['Architecture']
             for arch in arches:
                 i = extra_arches.get(arch, [])
                 i.append(package)
@@ -186,17 +186,14 @@
         ret[3] = vars
         return ret
 
-    def process_depends(self, key, e, in_e, vars):
-        in_dep = in_e[key].split(',')
-        dep = []
+    def process_relation(self, key, e, in_e, vars):
+        in_dep = in_e[key]
+        dep = type(in_dep)()
         for d in in_dep:
-            d = d.strip()
             d = self.substitute(d, vars)
             if d:
                 dep.append(d)
-        if dep:
-            t = ', '.join(dep)
-            e[key] = t
+        e[key] = dep
 
     def process_description(self, e, in_e, vars):
         desc = in_e['Description']
@@ -212,7 +209,7 @@
         e = entry()
         for i in in_entry.iterkeys():
             if i in (('Depends', 'Provides', 'Suggests', 'Recommends', 'Conflicts')):
-                self.process_depends(i, e, in_entry, vars)
+                self.process_relation(i, e, in_entry, vars)
             elif i == 'Description':
                 self.process_description(e, in_entry, vars)
             elif i[:2] == 'X-':
@@ -228,6 +225,10 @@
         return entries
 
     def substitute(self, s, vars):
+        if isinstance(s, (list, tuple)):
+            for i in xrange(len(s)):
+                s[i] = self.substitute(s[i], vars)
+            return s
         def subst(match):
             return vars[match.group(1)]
         return re.sub(r'@([a-z_]+)@', subst, s)
@@ -252,10 +253,8 @@
         for entry in list:
             for key, value in entry.iteritems():
                 f.write("%s:" % key)
-                if isinstance(value, tuple):
-                    value = value[0].join(value[1])
-                for k in value.split('\n'):
-                  f.write(" %s\n" % k)
+                print key, type(value), repr(value)
+                f.write(" %s\n" % value)
             f.write('\n')
 
 

Modified: people/waldi/linux-2.6/debian/lib/python/debian_linux/utils.py
==============================================================================
--- people/waldi/linux-2.6/debian/lib/python/debian_linux/utils.py	(original)
+++ people/waldi/linux-2.6/debian/lib/python/debian_linux/utils.py	Sun Nov 13 17:38:50 2005
@@ -3,9 +3,12 @@
 class _sorted_dict(dict):
     __slots__ = ('_list')
 
-    def __init__(self):
+    def __init__(self, entries = None):
         super(_sorted_dict, self).__init__()
         self._list = []
+        if entries is not None:
+            for key, value in entries:
+                self[key] = value
 
     def __delitem__(self, key):
         super(_sorted_dict, self).__delitem__(key)
@@ -31,16 +34,92 @@
         if key not in self._list:
             self._list.append(key)
 
-class entry(_sorted_dict):
-    __slots__ = ()
+class field_list(list):
+    TYPE_WHITESPACE = object()
+    TYPE_COMMATA = object()
+
+    def __init__(self, value = None, type = TYPE_WHITESPACE):
+        self.type = type
+        if isinstance(value, field_list):
+            self.type = value.type
+            self.extend(value)
+        elif isinstance(value, (list, tuple)):
+            self.extend(value)
+        else:
+            self._extend(value)
+
+    def __str__(self):
+        if self.type is self.TYPE_WHITESPACE:
+            type = ' '
+        elif self.type is self.TYPE_COMMATA:
+            type = ', '
+        return type.join(self)
+
+    def _extend(self, value):
+        if self.type is self.TYPE_WHITESPACE:
+            type = '\s'
+        elif self.type is self.TYPE_COMMATA:
+            type = ','
+        if value is not None:
+            self.extend([j.strip() for j in re.split(type, value.strip())])
+
+    def extend(self, value):
+        if isinstance(value, str):
+            self._extend(value)
+        else:
+            super(field_list, self).extend(value)
+
+class field_list_commata(field_list):
+    def __init__(self, value = None):
+        super(field_list_commata, self).__init__(value, field_list.TYPE_COMMATA)
+
+class field_string(str):
+    def __str__(self):
+        return '\n '.join(self.split('\n'))
+
+class package(dict):
+    _fields = sorted_dict((
+        ('Package', str),
+        ('Source', str),
+        ('Architecture', field_list),
+        ('Section', str),
+        ('Priority', str),
+        ('Maintainer', str),
+        ('Uploaders', str),
+        ('Standards-Version', str),
+        ('Build-Depends', str),
+        ('Build-Depends-Indep', str),
+        ('Provides', field_list_commata),
+        ('Depends', field_list_commata),
+        ('Recommends', field_list_commata),
+        ('Suggests', field_list_commata),
+        ('Replaces', field_list_commata),
+        ('Conflicts', field_list_commata),
+        ('Description', field_string),
+    ))
 
     def __setitem__(self, key, value):
-        super(entry, self).__setitem__(key, value)
-        if key not in self._list:
-            if 'Description' in self._list:
-                self._list.insert(len(self._list)-1, key)
-            else:
-                self._list.append(key)
+        try:
+            value = self._fields[key](value)
+        except KeyError: pass
+        super(package, self).__setitem__(key, value)
+
+    def iterkeys(self):
+        for i in self._fields.iterkeys():
+            if self.has_key(i):
+                yield i
+
+    def iteritems(self):
+        for i in self._fields.iterkeys():
+            if self.has_key(i):
+                yield (i, self[i])
+
+    def itervalues(self):
+        for i in self._fields.iterkeys():
+            if self.has_key(i):
+                yield self[i]
+
+entry = package
 
 class templates(dict):
     def __init__(self, dir = None):



More information about the Kernel-svn-changes mailing list