[kernel] r10935 - in dists/trunk/linux-2.6/debian: lib/python/debian_linux patches/series templates

Bastian Blank waldi at alioth.debian.org
Sat Mar 22 12:41:26 UTC 2008


Author: waldi
Date: Sat Mar 22 12:41:25 2008
New Revision: 10935

Log:
* debian/lib/python/debian_linux/patches.py: Don't dictify patch data.
* debian/patches/series/1~experimental.1-extra: Convert to new format.
* debian/templates/patch.apply.in: Use debian_linux.patches.PatchSeries.


Modified:
   dists/trunk/linux-2.6/debian/lib/python/debian_linux/patches.py
   dists/trunk/linux-2.6/debian/patches/series/1~experimental.1-extra
   dists/trunk/linux-2.6/debian/templates/patch.apply.in

Modified: dists/trunk/linux-2.6/debian/lib/python/debian_linux/patches.py
==============================================================================
--- dists/trunk/linux-2.6/debian/lib/python/debian_linux/patches.py	(original)
+++ dists/trunk/linux-2.6/debian/lib/python/debian_linux/patches.py	Sat Mar 22 12:41:25 2008
@@ -148,7 +148,7 @@
 
             items = line.split(' ')
             operation, filename = items[:2]
-            data = dict(i.split('=', 1) for i in items[2:])
+            data = items[2:]
 
             if operation in self.operations:
                 f = os.path.join(self.root, filename)

Modified: dists/trunk/linux-2.6/debian/patches/series/1~experimental.1-extra
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/series/1~experimental.1-extra	(original)
+++ dists/trunk/linux-2.6/debian/patches/series/1~experimental.1-extra	Sat Mar 22 12:41:25 2008
@@ -1,35 +1,35 @@
-+ features/all/vserver/vs2.2.0-rc5.patch *_vserver *_xen-vserver
-+ features/all/vserver/bindmount-dev.patch *_vserver *_xen-vserver
++ features/all/vserver/vs2.2.0-rc5.patch featureset=vserver featureset=xen-vserver
++ features/all/vserver/bindmount-dev.patch featureset=vserver featureset=xen-vserver
 # --- submitted
-+ bugfix/m68k/2.6.24/m68k-initrd-fix.diff m68k
++ bugfix/m68k/2.6.24/m68k-initrd-fix.diff arch=m68k
 
 
 # --- pending ---
-+ bugfix/m68k/2.6.24/633-atari_scc.diff m68k
-#+ bugfix/m68k/2.6.24/130-adbraw.diff m68k
-#+ bugfix/m68k/2.6.24/133-arch.diff m68k
-+ bugfix/m68k/2.6.24/134-atari-fat.diff m68k
-+ bugfix/m68k/2.6.24/141-ide.diff m68k
-+ bugfix/m68k/2.6.24/143-ioext.diff m68k
-+ bugfix/m68k/2.6.24/149-mc68681.diff m68k
-+ bugfix/m68k/2.6.24/152-pci.diff m68k
-#+ bugfix/m68k/2.6.24/448-ide.diff m68k
-+ bugfix/m68k/2.6.24/478-serial.diff m68k
-#+ bugfix/m68k/2.6.24/atari-rom-isa.diff m68k
-+ bugfix/m68k/2.6.24/atari-ethernec.diff m68k
-+ bugfix/m68k/2.6.24/atari-aranym.diff m68k
-#+ bugfix/m68k/2.6.24/atari-ethernat.diff m68k
++ bugfix/m68k/2.6.24/633-atari_scc.diff arch=m68k
+#+ bugfix/m68k/2.6.24/130-adbraw.diff arch=m68k
+#+ bugfix/m68k/2.6.24/133-arch.diff arch=m68k
++ bugfix/m68k/2.6.24/134-atari-fat.diff arch=m68k
++ bugfix/m68k/2.6.24/141-ide.diff arch=m68k
++ bugfix/m68k/2.6.24/143-ioext.diff arch=m68k
++ bugfix/m68k/2.6.24/149-mc68681.diff arch=m68k
++ bugfix/m68k/2.6.24/152-pci.diff arch=m68k
+#+ bugfix/m68k/2.6.24/448-ide.diff arch=m68k
++ bugfix/m68k/2.6.24/478-serial.diff arch=m68k
+#+ bugfix/m68k/2.6.24/atari-rom-isa.diff arch=m68k
++ bugfix/m68k/2.6.24/atari-ethernec.diff arch=m68k
++ bugfix/m68k/2.6.24/atari-aranym.diff arch=m68k
+#+ bugfix/m68k/2.6.24/atari-ethernat.diff arch=m68k
 
-+ bugfix/m68k/2.6.24/falconide_intr_lock-ratelimit.diff m68k
-+ bugfix/m68k/2.6.24/zorro-module-device-table.diff m68k
-+ bugfix/m68k/2.6.24/m68k-q40ints.c-needs-asm-floppy.h.diff m68k
-+ bugfix/m68k/2.6.24/blinux-list-is-subscribers-only.diff m68k
-+ bugfix/m68k/2.6.24/b43-depends-on-HAS_DMA.diff m68k
-+ bugfix/m68k/2.6.24/amiga-debug=mem.diff m68k
-+ bugfix/m68k/2.6.24/m68k-scsi-HOST_C-cleanup.diff m68k
-+ bugfix/m68k/2.6.24/amiga-platform-device.diff m68k
-+ bugfix/m68k/2.6.24/atari-platform-device.diff m68k
-+ bugfix/m68k/2.6.24/mac-platform-device.diff m68k
-#+ bugfix/m68k/2.6.24/checkpatch-print-filenames.diff m68k
-#+ bugfix/m68k/2.6.24/m68k-replace-linux-68k-by-linux-m68k.diff m68k
-+ bugfix/m68k/2.6.24/amiga-platform-device2.diff m68k
++ bugfix/m68k/2.6.24/falconide_intr_lock-ratelimit.diff arch=m68k
++ bugfix/m68k/2.6.24/zorro-module-device-table.diff arch=m68k
++ bugfix/m68k/2.6.24/m68k-q40ints.c-needs-asm-floppy.h.diff arch=m68k
++ bugfix/m68k/2.6.24/blinux-list-is-subscribers-only.diff arch=m68k
++ bugfix/m68k/2.6.24/b43-depends-on-HAS_DMA.diff arch=m68k
++ bugfix/m68k/2.6.24/amiga-debug=mem.diff arch=m68k
++ bugfix/m68k/2.6.24/m68k-scsi-HOST_C-cleanup.diff arch=m68k
++ bugfix/m68k/2.6.24/amiga-platform-device.diff arch=m68k
++ bugfix/m68k/2.6.24/atari-platform-device.diff arch=m68k
++ bugfix/m68k/2.6.24/mac-platform-device.diff arch=m68k
+#+ bugfix/m68k/2.6.24/checkpatch-print-filenames.diff arch=m68k
+#+ bugfix/m68k/2.6.24/m68k-replace-linux-68k-by-linux-m68k.diff arch=m68k
++ bugfix/m68k/2.6.24/amiga-platform-device2.diff arch=m68k

Modified: dists/trunk/linux-2.6/debian/templates/patch.apply.in
==============================================================================
--- dists/trunk/linux-2.6/debian/templates/patch.apply.in	(original)
+++ dists/trunk/linux-2.6/debian/templates/patch.apply.in	Sat Mar 22 12:41:25 2008
@@ -3,198 +3,84 @@
 import os, os.path, re, sys
 from warnings import warn
 
+from debian_linux.patches import PatchSeries
+
 _default_home = "@home@"
 _default_revisions = "@revisions@"
 _default_source = "@source@"
 
-class series(list):
-    def __init__(self, name, home, reverse = False):
-        self.name = name
-        self.reverse = reverse
-
-        filename = os.path.join(home, 'series', name)
-        if not os.path.exists(filename):
-            raise RuntimeError, "Can't find series file for %s" % name
-
-        f = file(filename)
-        for line in f.readlines():
-            line = line.strip()
-
-            if len(line) == 0 or line[0] == '#':
-                continue
-
-            items = line.split(' ')
-            if len(items) != 2:
-                raise RuntimeError, "Line '%s' in file %s malformed." % (line, filename)
-            else:
-                operation, patch = items
-
-            if operation in ('+', '-'):
-                patchfile = os.path.join(home, patch)
-                for suffix, type in (('', 0), ('.bz2', 1), ('.gz', 2)):
-                    if os.path.exists(patchfile + suffix):
-                        patchinfo = patchfile + suffix, type
-                        break
-                else:
-                    raise RuntimeError, "Can't find patch %s for series %s" % (patchfile, name)
-            else:
-                raise RuntimeError, 'Undefined operation "%s" in series %s' % (operation, name)
-
-            self.append((operation, patch, patchinfo))
-
-    def __repr__(self):
-        return '<%s object for %s>' % (self.__class__.__name__, self.name)
-
-    def apply(self):
-        if self.reverse:
-            for operation, patch, patchinfo in self[::-1]:
-                if operation == '.':
-                    print """\
-  (.) IGNORED   %s\
-""" % patch
-                elif operation == '+':
-                    self.patch_deapply(patch, patchinfo)
-                elif operation == '-':
-                    self.patch_apply(patch, patchinfo)
-            print "--> %s fully unapplied." % self.name
-
-        else:
-            for operation, patch, patchinfo in self:
-                if operation == '.':
-                    print """\
-  (.) IGNORED   %s\
-""" % patch
-                elif operation == '+':
-                    self.patch_apply(patch, patchinfo)
-                elif operation == '-':
-                    self.patch_deapply(patch, patchinfo)
-            print "--> %s fully applied." % self.name
-
-    def patch_apply(self, patch, patchinfo):
-        ret = self.patch_call(patchinfo, '--fuzz=1')
-        if ret == 0:
-            print """\
-  (+) OK        %s\
-""" % patch
-        else:
-            print """\
-  (+) FAIL      %s\
-""" % patch
-            raise SystemExit, 1
-
-    def patch_call(self, patchinfo, patchargs):
-        patchfile, type = patchinfo
-        cmdline = []
-        if type == 0:
-            cmdline.append('cat')
-        elif type == 1:
-            cmdline.append('bzcat')
-        elif type == 2:
-            cmdline.append('zcat')
-        cmdline.append(patchfile + ' | patch -p1 -f -s -t --no-backup-if-mismatch')
-        cmdline.append(patchargs)
-        return os.spawnv(os.P_WAIT, '/bin/sh', ['sh', '-c', ' '.join(cmdline)])
-
-    def patch_deapply(self, patch, patchinfo):
-        ret = self.patch_call(patchinfo, '-R')
-        if ret == 0:
-            print """\
-  (-) OK        %s\
-""" % patch
-        else:
-            print """\
-  (-) FAIL      %s\
-""" % patch
-            raise SystemExit, 1
-
-    @staticmethod
-    def read_all(s, home, reverse = False):
-        ret = []
-
-        for name in s:
-            filename = os.path.join(home, 'series', name)
-            if not os.path.exists(filename):
-                warn("Can't find series file for %s" % name)
+class MatchExtra(object):
+    def __init__(self, arch, featureset):
+        self.arch, self.featureset = arch, featureset
+
+        self.matched_arch = self.matched_featureset = False
+
+    def __call__(self, obj):
+        data = obj.data
+
+        match_arch = []
+        match_featureset = []
+        for i in data:
+            if i.startswith("arch="):
+                match_arch.append(i[5:])
+            elif i.startswith("featureset="):
+                match_featureset.append(i[11:])
+
+        ret_arch = ret_featureset = False
+
+        if self.arch is not None:
+            if match_arch:
+                if self.arch in match_arch:
+                    self.matched_arch = True
+                    ret_arch = True
             else:
-                i = series(name, home, reverse)
-                ret.append(i)
+                ret_arch = True
 
-        return ret
+            if not match_featureset:
+                ret_featureset = ret_arch
 
-class series_extra(series):
-    def __init__(self, name, home, extra, reverse = False):
-        self.extra = extra
-        self.extra_used = ()
-        self.name = name
-        self.reverse = reverse
-
-        filename = os.path.join(home, 'series', name + '-extra')
-        if not os.path.exists(filename):
-            raise RuntimeError, "Can't find series file for %s" % name
-
-        f = file(filename)
-        for line in f.readlines():
-            line = line.strip()
-
-            if len(line) == 0 or line[0] == '#':
-                continue
-
-            items = line.split(' ')
-            operation, patch = items[:2]
-
-            if operation in ('+', '-'):
-                patchfile = os.path.join(home, patch)
-                for suffix, type in (('', 0), ('.bz2', 1), ('.gz', 2)):
-                    if os.path.exists(patchfile + suffix):
-                        patchinfo = patchfile + suffix, type
-                        break
-                else:
-                    raise RuntimeError, "Can't find patch %s for series %s" % (patchfile, name)
+        if self.featureset is not None:
+            if match_featureset:
+                if self.featureset in match_featureset:
+                    self.matched_featureset = True
+                    ret_featureset = True
             else:
-                raise RuntimeError, 'Undefined operation "%s" in series %s' % (operation, name)
+                ret_featureset = True
 
-            extra = {}
-            for s in items[2:]:
-                s = tuple(s.split('_'))
-                if len(s) > 3:
-                    raise RuntimeError, "parse error"
-                if len(s) == 3:
-                    raise RuntimeError, "Patch per flavour is not supported currently"
-                extra[s] = True
-            if not self._check_extra(extra):
-                operation = '.'
-
-            self.append((operation, patch, patchinfo))
-
-    def _check_extra(self, extra):
-        for i in (1, 2, 3):
-            t = self.extra[:i]
-            if extra.has_key(t):
-                if i > len(self.extra_used):
-                    self.extra_used = t
-                return True
-        for i in (2, 3):
-            t = ('*',) + self.extra[1:i]
-            if extra.has_key(t):
-                if i > len(self.extra_used):
-                    self.extra_used = t
-                return True
-        return False
+        return ret_arch and ret_featureset
 
-    @staticmethod
-    def read_all(s, home, extra, reverse = False):
+    def info(self):
         ret = []
+        if self.matched_arch:
+            ret.append("arch=%s" % self.arch)
+        if self.matched_featureset:
+            ret.append("featureset=%s" % self.featureset)
+        return ret
 
-        for name in s:
-            filename = os.path.join(home, 'series', name + '-extra')
-            if not os.path.exists(filename):
-                warn("Can't find series file for %s" % name)
+class SeriesList(list):
+    def __call__(self, cond = bool, reverse = False):
+        for i in self:
+            i(cond = cond, reverse = reverse)
+            if reverse:
+                print "--> %s fully unapplied." % i.name
             else:
-                i = series_extra(name, home, extra, reverse)
-                ret.append(i)
+                print "--> %s fully applied." % i.name
 
+    @classmethod
+    def read(cls, revisions, home):
+        ret = cls()
+        for i in revisions:
+            try:
+                fp = file(os.path.join(home, 'series', i))
+                ret.append(PatchSeries(i, home, fp))
+            except IOError:
+                pass
         return ret
 
+    @classmethod
+    def read_extra(cls, revisions, home):
+        return cls.read((i + '-extra' for i in revisions), home)
+
 class version(object):
     __slots__ = "upstream", "revision"
 
@@ -226,7 +112,7 @@
 
 class version_file(object):
     _file = 'version.Debian'
-    extra = ()
+    extra = None
     in_progress = False
 
     def __init__(self, ver = None, overwrite = False):
@@ -246,20 +132,26 @@
     def __str__(self):
         if self.in_progress:
             return "unstable"
-        if self.extra:
-            return "%s %s" % (self.version, '_'.join(self.extra))
+        if self.extra is not None:
+            return ' '.join([str(self.version)] +  self.extra.info())
         return str(self.version)
 
     def _read(self, s):
-        list = s.split(' ')
-        if len(list) > 2:
-            raise RuntimeError, "Can't parse %s" % self._file
+        list = s.split()
         try:
             self.version = version(list[0])
         except ValueError:
             raise RuntimeError, 'Can\'t read version in %s: "%s"' % (self._file, list[0])
-        if len(list) == 2:
-            self.extra = tuple(list[1].split('_'))
+
+        arch = featureset = None
+        for i in list[1:]:
+            if i.startswith("arch="):
+                arch = i[5:]
+            elif i.startswith("featureset="):
+                featureset = i[11:]
+            else:
+                raise RuntimeError("Can't parse extra information")
+        self.extra = MatchExtra(arch, featureset)
 
     def _write(self):
         if os.path.lexists(self._file):
@@ -300,11 +192,7 @@
     current = vfile.version
     current_extra = vfile.extra
 
-    target_extra = []
-    if options.arch: target_extra.append(options.arch)
-    if options.subarch: target_extra.append(options.subarch)
-    if options.flavour: target_extra.append(options.flavour)
-    target_extra = tuple(target_extra)
+    target_extra = MatchExtra(options.arch, options.subarch)
 
     if current.revision not in revisions:
         raise RuntimeError, "Current revision is not in our list of revisions"
@@ -322,40 +210,31 @@
     if current_extra:
         if current_index != source_index:
             raise RuntimeError, "Can't patch from %s with options %s" % (current, ' '.join(current_extra))
-        consider = revisions[current_index:0:-1]
-        s = series_extra.read_all(consider, home, current_extra, reverse = True)
+        consider = revisions[1:current_index + 1]
+        s = SeriesList.read_extra(consider, home)
         vfile.begin()
-        for i in s:
-            i.apply()
-        vfile.commit(current, ())
+        s(cond = current_extra, reverse = True)
+        vfile.commit(current)
 
     if current_index < target_index:
         consider = revisions[current_index + 1:target_index + 1]
-        s = series.read_all(consider, home)
+        s = SeriesList.read(consider, home)
         vfile.begin()
-        for i in s:
-            i.apply()
-        vfile.commit(target, ())
+        s()
+        vfile.commit(target)
     elif current_index > target_index:
-        consider = revisions[current_index:target_index:-1]
-        s = series.read_all(consider, home, reverse = True)
+        consider = revisions[current_index + 1:target_index + 1]
+        s = SeriesList.read(consider, home)
         vfile.begin()
-        for i in s:
-            i.apply()
-        vfile.commit(target, ())
+        s(reverse = True)
+        vfile.commit(target)
 
     if target_extra:
         consider = revisions[1:target_index + 1]
-        s = series_extra.read_all(consider, home, target_extra)
-        real_extra = ()
-        for i in s:
-            t = i.extra_used
-            if len(t) > len(real_extra):
-                real_extra = t
+        s = SeriesList.read_extra(consider, home)
         vfile.begin()
-        for i in s:
-            i.apply()
-        vfile.commit(target, real_extra)
+        s(cond = target_extra)
+        vfile.commit(target, target_extra)
 
 def parse_options():
     from optparse import OptionParser



More information about the Kernel-svn-changes mailing list