diff options
author | Sean Finney <seanius@debian.org> | 2010-05-13 19:44:10 +0200 |
---|---|---|
committer | Sean Finney <seanius@debian.org> | 2010-05-13 19:44:10 +0200 |
commit | 111d00872efd9a6a88435748c2f3b740fba38c2f (patch) | |
tree | 424066e57e741e7a460d3b60709c569e6beeb02a /patchtracker | |
parent | e3e23ba7197588bb98ea589f693f7fc59cc5eb2a (diff) | |
download | patch-tracker-111d00872efd9a6a88435748c2f3b740fba38c2f.tar.gz |
Move the diffhandlers into the Patch library.
Diffstat (limited to 'patchtracker')
-rw-r--r-- | patchtracker/DebTarHandler.py | 27 | ||||
-rw-r--r-- | patchtracker/DiffGzHandler.py | 74 | ||||
-rw-r--r-- | patchtracker/Patch.py | 64 | ||||
-rw-r--r-- | patchtracker/PtsIndex.py | 4 | ||||
-rw-r--r-- | patchtracker/models.py | 6 |
5 files changed, 67 insertions, 108 deletions
diff --git a/patchtracker/DebTarHandler.py b/patchtracker/DebTarHandler.py deleted file mode 100644 index 311e39b..0000000 --- a/patchtracker/DebTarHandler.py +++ /dev/null @@ -1,27 +0,0 @@ -import os -import stat -import sys - -import Patch - -class DebTarHandler: - diff = None - def __init__(self,fname): - self.tarfile = fname - self.size = os.stat(fname)[stat.ST_SIZE] - - def series(self): - return Patch.Quilt30PatchSeries(self.tarfile) - -if __name__ == "__main__": - print "DebTarHandler testing" - try: - dh = DebTarHandler(sys.argv[1]) - except IndexError: - print "usage: %s <diffgz>"%(sys.argv[0]) - sys.exit(1) - - print "series:" - for f,p in dh.series(): - print f - print p diff --git a/patchtracker/DiffGzHandler.py b/patchtracker/DiffGzHandler.py deleted file mode 100644 index 84be827..0000000 --- a/patchtracker/DiffGzHandler.py +++ /dev/null @@ -1,74 +0,0 @@ -import tempfile -import sys -import os -import stat - -from Patch import Patch, PatchSeries - -class DiffGzException(Exception): - pass - -class DiffGzHandler: - diff = None - def __init__(self,fname): - self.diff = fname - self.size = os.stat(fname)[stat.ST_SIZE] - - def filterdiff(self, include=None, exclude=None): - cmd = ["filterdiff","-z","-p","1"] - if include: - cmd += [ "-i", include] - elif exclude: - cmd += [ "-x", exclude] - else: - raise Exception("DiffGzHandler.filterdiff called w/o include/exclude") - i,o,e=os.popen3(cmd+[self.diff]) - i.close() - p = Patch(o) - err = e.read() - if len(err): - raise DiffGzException("filterdiff gave errors: "+err) - return p - - def debiandir(self): - return self.filterdiff(include='debian/*') - - def nondebiandir(self): - return self.filterdiff(exclude='debian/*') - - def series(self): - patches = None - embedded = self.filterdiff(include='debian/patches*') - - # XXX *cough* cache *cough* - if embedded.lines(): - td = tempfile.mkdtemp() - i,o,e=os.popen3("patch -d %s -p3"%(td)) - i.write(str(embedded)) - i.close() - err = e.read() - if len(err): - raise Exception("unable to extract series patches:\n"+err) - patches = PatchSeries(td) - os.system("rm -rf %s"%(td)) - - return patches - -if __name__ == "__main__": - print "DiffGzHandler testing" - try: - dh = DiffGzHandler(sys.argv[1]) - except IndexError: - print "usage: %s <diffgz>"%(sys.argv[0]) - sys.exit(1) - - print "debian dir:" - print dh.debiandir().diffstat() - print "nondebian dir:" - print dh.nondebiandir().diffstat() - print "series:" - s = dh.series() - print s - for name,patch in s.iterpatches(): - print "patch:",name - print patch.diffstat() diff --git a/patchtracker/Patch.py b/patchtracker/Patch.py index 09f4911..c872d1c 100644 --- a/patchtracker/Patch.py +++ b/patchtracker/Patch.py @@ -1,6 +1,8 @@ -import sys -import os import errno +import os +import stat +import sys +import tempfile from glob import glob import pygments import pygments.lexers @@ -175,6 +177,64 @@ class Quilt30PatchSeries (GenericPatchSeries): for name in self.names: self.patches[name] = Patch(self.tarfh.extractfile("debian/patches/"+name)) +class DebTarHandler: + diff = None + def __init__(self,fname): + self.tarfile = fname + self.size = os.stat(fname)[stat.ST_SIZE] + + def series(self): + return Quilt30PatchSeries(self.tarfile) + +class DiffGzException(Exception): + pass + +class DiffGzHandler: + diff = None + def __init__(self,fname): + self.diff = fname + self.size = os.stat(fname)[stat.ST_SIZE] + + def filterdiff(self, include=None, exclude=None): + cmd = ["filterdiff","-z","-p","1"] + if include: + cmd += [ "-i", include] + elif exclude: + cmd += [ "-x", exclude] + else: + raise Exception("DiffGzHandler.filterdiff called w/o include/exclude") + i,o,e=os.popen3(cmd+[self.diff]) + i.close() + p = Patch(o) + err = e.read() + if len(err): + raise DiffGzException("filterdiff gave errors: "+err) + return p + + def debiandir(self): + return self.filterdiff(include='debian/*') + + def nondebiandir(self): + return self.filterdiff(exclude='debian/*') + + def series(self): + patches = None + embedded = self.filterdiff(include='debian/patches*') + + # XXX *cough* cache *cough* + if embedded.lines(): + td = tempfile.mkdtemp() + i,o,e=os.popen3("patch -d %s -p3"%(td)) + i.write(str(embedded)) + i.close() + err = e.read() + if len(err): + raise Exception("unable to extract series patches:\n"+err) + patches = PatchSeries(td) + os.system("rm -rf %s"%(td)) + + return patches + if __name__ == "__main__": print "Patch.py testing" try: diff --git a/patchtracker/PtsIndex.py b/patchtracker/PtsIndex.py index 08a6e68..831b4b6 100644 --- a/patchtracker/PtsIndex.py +++ b/patchtracker/PtsIndex.py @@ -1,7 +1,7 @@ import os import Conf -from DiffGzHandler import DiffGzHandler +import Patch class PtsIndexPackageInfo ( dict ): def __init__ (self, srcpkg): @@ -11,7 +11,7 @@ class PtsIndexPackageInfo ( dict ): if srcpkg.diffgz_name: diffgz = os.sep.join([Conf.archive_root,srcpkg.loc,srcpkg.diffgz_name]) - dh = DiffGzHandler( diffgz ) + dh = Patch.DiffGzHandler( diffgz ) ser = dh.series() if ser: self['series-patches'] = len(ser) diff --git a/patchtracker/models.py b/patchtracker/models.py index 3d4f582..819a857 100644 --- a/patchtracker/models.py +++ b/patchtracker/models.py @@ -2,7 +2,7 @@ import os import re import Conf -import DiffGzHandler, DebTarHandler +import Patch from django.db import models from django.contrib import admin @@ -32,10 +32,10 @@ class SourcePackage (models.Model): """ Return a diffhandler object too the caller """ if self.diffgz_name: dgz = os.sep.join([Conf.archive_root, self.loc, self.diffgz_name]) - return DiffGzHandler.DiffGzHandler(dgz) + return Patch.DiffGzHandler(dgz) elif self.debtar_name: dtar = os.sep.join([Conf.archive_root, self.loc, self.debtar_name]) - return DebTarHandler.DebTarHandler(dtar) + return Patch.DebTarHandler(dtar) def anchor_name(self): """ output a version of the package name suitable for use as an |