aboutsummaryrefslogtreecommitdiffstats
path: root/debian/lib/python/debian_linux/patches.py
diff options
context:
space:
mode:
Diffstat (limited to 'debian/lib/python/debian_linux/patches.py')
-rw-r--r--debian/lib/python/debian_linux/patches.py206
1 files changed, 0 insertions, 206 deletions
diff --git a/debian/lib/python/debian_linux/patches.py b/debian/lib/python/debian_linux/patches.py
deleted file mode 100644
index 9981274d2960..000000000000
--- a/debian/lib/python/debian_linux/patches.py
+++ /dev/null
@@ -1,206 +0,0 @@
-import os, shutil
-
-class Operation(object):
- def __init__(self, name, data):
- self.name, self.data = name, data
-
- def __call__(self, dir = '.', reverse = False):
- try:
- if not reverse:
- self.do(dir)
- else:
- self.do_reverse(dir)
- self._log(True)
- except:
- self._log(False)
- raise
-
- def _log(self, result):
- if result:
- s = "OK"
- else:
- s = "FAIL"
- print """ (%s) %-4s %s""" % (self.operation, s, self.name)
-
- def do(self, dir):
- raise NotImplementedError
-
- def do_reverse(self, dir):
- raise NotImplementedError
-
-class OperationPatch(Operation):
- def __init__(self, name, fp, data):
- super(OperationPatch, self).__init__(name, data)
- self.fp = fp
-
- def _call(self, dir, extraargs):
- cmdline = "cd %s; patch -p1 -f -s -t --no-backup-if-mismatch %s" % (dir, extraargs)
- f = os.popen(cmdline, 'wb')
- shutil.copyfileobj(self.fp, f)
- if f.close():
- raise RuntimeError("Patch failed")
-
- def patch_push(self, dir):
- self._call(dir, '--fuzz=1')
-
- def patch_pop(self, dir):
- self._call(dir, '-R')
-
-class OperationPatchPush(OperationPatch):
- operation = '+'
-
- do = OperationPatch.patch_push
- do_reverse = OperationPatch.patch_pop
-
-class OperationPatchPop(OperationPatch):
- operation = '-'
-
- do = OperationPatch.patch_pop
- do_reverse = OperationPatch.patch_push
-
-class SubOperation(Operation):
- def _log(self, result):
- if result:
- s = "OK"
- else:
- s = "FAIL"
- print """ %-10s %-4s %s""" % ('(%s)' % self.operation, s, self.name)
-
-class SubOperationFilesRemove(SubOperation):
- operation = "remove"
-
- def do(self, dir):
- dir = os.path.join(dir, self.name)
- if os.path.isdir(dir):
- shutil.rmtree(dir)
- else:
- os.unlink(dir)
-
-class SubOperationFilesUnifdef(SubOperation):
- operation = "unifdef"
-
- def do(self, dir):
- filename = os.path.join(dir, self.name)
- cmdline = "unifdef %s %s" % (filename, ' '.join(self.data))
- f = os.popen(cmdline, 'rb')
- data = f.read()
- ret = f.close()
- if ret is None:
- raise RuntimeError("unifdef of %s removed nothing" % self.name)
- elif ret != 256:
- raise RuntimeError("unifdef failed")
- f1 = file(filename, 'wb')
- f1.write(data)
- f1.close()
-
-class OperationFiles(Operation):
- operation = 'X'
-
- suboperations = {
- 'remove': SubOperationFilesRemove,
- 'rm': SubOperationFilesRemove,
- 'unifdef': SubOperationFilesUnifdef,
- }
-
- def __init__(self, name, fp, data):
- super(OperationFiles, self).__init__(name, data)
-
- ops = []
-
- for line in fp:
- line = line.strip()
- if not line or line[0] == '#':
- continue
-
- items = line.split()
- operation, filename = items[:2]
- data = items[2:]
-
- if operation not in self.suboperations:
- raise RuntimeError('Undefined operation "%s" in series %s' % (operation, name))
-
- ops.append(self.suboperations[operation](filename, data))
-
- self.ops = ops
-
- def do(self, dir):
- for i in self.ops:
- i(dir = dir)
-
-class PatchSeries(list):
- operations = {
- '+': OperationPatchPush,
- '-': OperationPatchPop,
- 'X': OperationFiles,
- }
-
- def __init__(self, name, root, fp):
- self.name, self.root = name, root
-
- from gzip import GzipFile
- from bz2 import BZ2File
-
- for line in fp:
- line = line.strip()
-
- if not len(line) or line[0] == '#':
- continue
-
- items = line.split(' ')
- operation, filename = items[:2]
- data = items[2:]
-
- if operation in self.operations:
- f = os.path.join(self.root, filename)
- for suffix, cls in (('', file), ('.bz2', BZ2File), ('.gz', GzipFile)):
- f1 = f + suffix
- if os.path.exists(f1):
- fp = cls(f1)
- break
- else:
- raise RuntimeError("Can't find patch %s for series %s" % (filename, self.name))
- else:
- raise RuntimeError('Undefined operation "%s" in series %s' % (operation, name))
-
- self.append(self.operations[operation](filename, fp, data))
-
- def __call__(self, cond = bool, dir = '.', reverse = False):
- if not reverse:
- l = self
- else:
- l = self[::-1]
- for i in l:
- if cond(i):
- i(dir = dir, reverse = reverse)
-
- def __repr__(self):
- return '<%s object for %s>' % (self.__class__.__name__, self.name)
-
-class PatchSeriesList(list):
- def __call__(self, cond = bool, reverse = False):
- if not reverse:
- l = self
- else:
- l = self[::-1]
- for i in self:
- if reverse:
- print "--> Try to unapply %s." % i.name
- else:
- print "--> Try to apply %s." % i.name
- i(cond = cond, reverse = reverse)
- if reverse:
- print "--> %s fully unapplied." % i.name
- else:
- print "--> %s fully applied." % i.name
-
- @classmethod
- def read(cls, home, files):
- ret = cls()
- for i in files:
- try:
- fp = file(os.path.join(home, 'series', i))
- ret.append(PatchSeries(i, home, fp))
- except IOError:
- pass
- return ret
-