[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