summaryrefslogtreecommitdiff
path: root/patchtracker
diff options
context:
space:
mode:
authorSean Finney <seanius@debian.org>2010-05-13 19:44:10 +0200
committerSean Finney <seanius@debian.org>2010-05-13 19:44:10 +0200
commit111d00872efd9a6a88435748c2f3b740fba38c2f (patch)
tree424066e57e741e7a460d3b60709c569e6beeb02a /patchtracker
parente3e23ba7197588bb98ea589f693f7fc59cc5eb2a (diff)
downloadpatch-tracker-111d00872efd9a6a88435748c2f3b740fba38c2f.tar.gz
Move the diffhandlers into the Patch library.
Diffstat (limited to 'patchtracker')
-rw-r--r--patchtracker/DebTarHandler.py27
-rw-r--r--patchtracker/DiffGzHandler.py74
-rw-r--r--patchtracker/Patch.py64
-rw-r--r--patchtracker/PtsIndex.py4
-rw-r--r--patchtracker/models.py6
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