diff options
author | Martin Wilke <miwi@FreeBSD.org> | 2012-01-14 19:20:46 +0000 |
---|---|---|
committer | Martin Wilke <miwi@FreeBSD.org> | 2012-01-14 19:20:46 +0000 |
commit | 5c889462afad6c9e4ca7fc7f2402508967335451 (patch) | |
tree | 72a7da0b31e0225f1c4837abda0dae2b271623c8 /www/woof | |
parent | 467a6ff7f143021e5997d8bba956080c88ffac7c (diff) | |
download | ports-5c889462afad6c9e4ca7fc7f2402508967335451.tar.gz ports-5c889462afad6c9e4ca7fc7f2402508967335451.zip |
Notes
Diffstat (limited to 'www/woof')
-rw-r--r-- | www/woof/Makefile | 14 | ||||
-rw-r--r-- | www/woof/files/extra-patch-woof-2009-12-27-python27.diff | 190 |
2 files changed, 202 insertions, 2 deletions
diff --git a/www/woof/Makefile b/www/woof/Makefile index fa6de63f63d6..b85049a12b12 100644 --- a/www/woof/Makefile +++ b/www/woof/Makefile @@ -22,7 +22,17 @@ USE_PYTHON= yes NO_BUILD= yes PLIST_FILES= bin/woof +.include <bsd.port.pre.mk> + +.if ${PYTHON_REL} >= 270 +EXTRA_PATCHES+= ${FILESDIR}/extra-patch-woof-2009-12-27-python27.diff +.endif + +do-extract: + @${MKDIR} ${WRKSRC} + @${CP} ${DISTDIR}/${DISTFILES} ${WRKSRC}/${DISTFILES} + do-install: - ${INSTALL_SCRIPT} ${DISTDIR}/${DISTFILES} ${PREFIX}/bin/woof + ${INSTALL_SCRIPT} ${WRKSRC}/${DISTFILES} ${PREFIX}/bin/woof -.include <bsd.port.mk> +.include <bsd.port.post.mk> diff --git a/www/woof/files/extra-patch-woof-2009-12-27-python27.diff b/www/woof/files/extra-patch-woof-2009-12-27-python27.diff new file mode 100644 index 000000000000..4002e5c783a1 --- /dev/null +++ b/www/woof/files/extra-patch-woof-2009-12-27-python27.diff @@ -0,0 +1,190 @@ +--- woof-2009-12-27.py.orig 2009-12-27 23:47:43.000000000 +0100 ++++ woof-2009-12-27.py 2011-02-08 20:38:51.150000040 +0100 +@@ -28,13 +28,13 @@ + + import sys, os, errno, socket, getopt, commands, tempfile + import cgi, urllib, BaseHTTPServer ++from SocketServer import ThreadingMixIn + import ConfigParser + import shutil, tarfile, zipfile + import struct + + maxdownloads = 1 + TM = object +-cpid = -1 + compressed = 'gz' + upload = False + +@@ -137,6 +137,11 @@ class FileServHTTPRequestHandler (BaseHT + self.send_error (501, "Unsupported method (POST)") + return + ++ maxdownloads -= 1 ++ ++ if maxdownloads < 1: ++ httpd.shutdown() ++ + # taken from + # http://mail.python.org/pipermail/python-list/2006-September/402441.html + +@@ -200,13 +205,11 @@ class FileServHTTPRequestHandler (BaseHT + self.end_headers () + self.wfile.write (txt) + +- maxdownloads -= 1 +- + return + + + def do_GET (self): +- global maxdownloads, cpid, compressed, upload ++ global maxdownloads, compressed, upload + + # Form for uploading a file + if upload: +@@ -260,63 +263,62 @@ class FileServHTTPRequestHandler (BaseHT + + maxdownloads -= 1 + +- # let a separate process handle the actual download, so that +- # multiple downloads can happen simultaneously. ++ if maxdownloads < 1: ++ httpd.shutdown() + +- cpid = os.fork () ++ type = None ++ ++ if os.path.isfile (self.filename): ++ type = "file" ++ elif os.path.isdir (self.filename): ++ type = "dir" + +- if cpid == 0: +- # Child process +- child = None +- type = None +- +- if os.path.isfile (self.filename): +- type = "file" +- elif os.path.isdir (self.filename): +- type = "dir" ++ if not type: ++ print >> sys.stderr, "can only serve files or directories. Aborting." ++ sys.exit (1) + +- if not type: +- print >> sys.stderr, "can only serve files or directories. Aborting." +- sys.exit (1) ++ self.send_response (200) ++ self.send_header ("Content-Type", "application/octet-stream") ++ if os.path.isfile (self.filename): ++ self.send_header ("Content-Length", ++ os.path.getsize (self.filename)) ++ self.end_headers () + +- self.send_response (200) +- self.send_header ("Content-Type", "application/octet-stream") +- if os.path.isfile (self.filename): +- self.send_header ("Content-Length", +- os.path.getsize (self.filename)) +- self.end_headers () ++ try: ++ if type == "file": ++ datafile = file (self.filename) ++ shutil.copyfileobj (datafile, self.wfile) ++ datafile.close () ++ elif type == "dir": ++ if compressed == 'zip': ++ ezfile = EvilZipStreamWrapper (self.wfile) ++ zfile = zipfile.ZipFile (ezfile, 'w', zipfile.ZIP_DEFLATED) ++ stripoff = os.path.dirname (self.filename) + os.sep + +- try: +- if type == "file": +- datafile = file (self.filename) +- shutil.copyfileobj (datafile, self.wfile) +- datafile.close () +- elif type == "dir": +- if compressed == 'zip': +- ezfile = EvilZipStreamWrapper (self.wfile) +- zfile = zipfile.ZipFile (ezfile, 'w', zipfile.ZIP_DEFLATED) +- stripoff = os.path.dirname (self.filename) + os.sep ++ for root, dirs, files in os.walk (self.filename): ++ for f in files: ++ filename = os.path.join (root, f) ++ if filename[:len (stripoff)] != stripoff: ++ raise RuntimeException, "invalid filename assumptions, please report!" ++ zfile.write (filename, filename[len (stripoff):]) ++ zfile.close () ++ else: ++ tfile = tarfile.open (mode=('w|' + compressed), ++ fileobj=self.wfile) ++ tfile.add (self.filename, ++ arcname=os.path.basename(self.filename)) ++ tfile.close () ++ except Exception, e: ++ print e ++ print >>sys.stderr, "Connection broke. Aborting" + +- for root, dirs, files in os.walk (self.filename): +- for f in files: +- filename = os.path.join (root, f) +- if filename[:len (stripoff)] != stripoff: +- raise RuntimeException, "invalid filename assumptions, please report!" +- zfile.write (filename, filename[len (stripoff):]) +- zfile.close () +- else: +- tfile = tarfile.open (mode=('w|' + compressed), +- fileobj=self.wfile) +- tfile.add (self.filename, +- arcname=os.path.basename(self.filename)) +- tfile.close () +- except Exception, e: +- print e +- print >>sys.stderr, "Connection broke. Aborting" ++ ++class ThreadedHTTPServer(ThreadingMixIn, BaseHTTPServer.HTTPServer): ++ """Handle requests in a separate thread""" + + + def serve_files (filename, maxdown = 1, ip_addr = '', port = 8080): +- global maxdownloads ++ global maxdownloads, httpd + + maxdownloads = maxdown + +@@ -326,8 +328,7 @@ def serve_files (filename, maxdown = 1, + FileServHTTPRequestHandler.filename = filename + + try: +- httpd = BaseHTTPServer.HTTPServer ((ip_addr, port), +- FileServHTTPRequestHandler) ++ httpd = ThreadedHTTPServer ((ip_addr, port), FileServHTTPRequestHandler) + except socket.error: + print >>sys.stderr, "cannot bind to IP address '%s' port %d" % (ip_addr, port) + sys.exit (1) +@@ -337,8 +338,7 @@ def serve_files (filename, maxdown = 1, + if ip_addr: + print "Now serving on http://%s:%s/" % (ip_addr, httpd.server_port) + +- while cpid != 0 and maxdownloads > 0: +- httpd.handle_request () ++ httpd.serve_forever () + + + +@@ -488,14 +488,6 @@ def main (): + + serve_files (filename, maxdown, ip_addr, port) + +- # wait for child processes to terminate +- if cpid != 0: +- try: +- while 1: +- os.wait () +- except OSError: +- pass +- + + + if __name__=='__main__': |