Blob Blame History Raw
commit 7041a6e9292890a2bf09c97b6316ed670f9c2765
Author: Tom Hughes <tom@compton.nu>
Date:   Sun Feb 10 20:40:18 2013 +0000

    Update to use v2.x of generic-pool

diff --git a/lib/millstone.js b/lib/millstone.js
index 7d393a9..1620770 100644
--- a/lib/millstone.js
+++ b/lib/millstone.js
@@ -107,71 +107,75 @@ function download(url, options, callback) {
         return downloads[url].once('done', callback);
     } else {
         downloads[url] = new EventEmitter();
-        pool.acquire(function(obj) {
-            pool.release(obj);
-            if (env == 'development') console.error("[millstone] downloading: '" + url + "'");
-            var make_message = function() {
-                var msg = "Unable to download '" + url + "'";
-                if (options.name)
-                    msg += " for '" + options.name + "'";
-                return msg;
-            };
-            var req;
-            try {
-            req = request({
-                url: url,
-                proxy: process.env.HTTP_PROXY
-            });
-            } catch (err) {
-                // catch Invalid URI error
-                downloads[url].emit('done', err);
-                delete downloads[url];
-                err.message =  make_message() + " ("+err.message+")";
+        pool.acquire(function(err, obj) {
+            if (err) {
                 return callback(err);
-            }
-            req.on('error', function(err) {
-                downloads[url].emit('done', err);
-                delete downloads[url];
-                err.message =  make_message() + " ("+err.message+")";
-                return callback(err);
-            });
-            req.pipe(fs.createWriteStream(dl)).on('error', function(err) {
-                downloads[url].emit('done', err);
-                delete downloads[url];
-                err.message =  make_message() + " ("+err.message+")";
-                return callback(err);
-            }).on('close', function() {
-                if (!req.response || (req.response && req.response.statusCode >= 400)) {
-                    var err = new Error(make_message() + ' (server returned ' + req.response.statusCode + ')');
+            } else {
+                pool.release(obj);
+                if (env == 'development') console.error("[millstone] downloading: '" + url + "'");
+                var make_message = function() {
+                    var msg = "Unable to download '" + url + "'";
+                    if (options.name)
+                        msg += " for '" + options.name + "'";
+                    return msg;
+                };
+                var req;
+                try {
+                req = request({
+                    url: url,
+                    proxy: process.env.HTTP_PROXY
+                });
+                } catch (err) {
+                    // catch Invalid URI error
                     downloads[url].emit('done', err);
                     delete downloads[url];
+                    err.message =  make_message() + " ("+err.message+")";
                     return callback(err);
-                } else {
-                    fs.rename(dl, options.filepath, function(err) {
-                        if (err) {
-                          downloads[url].emit('done', err);
-                          delete downloads[url];
-                          return callback(err);
-                        } else {
-                            if (env == 'development') console.error("[millstone] finished downloading '" + options.filepath + "'");
-                            // We store the headers from the download in a hidden file
-                            // alongside the data for future reference. Currently, we
-                            // only use the `content-disposition` header to determine
-                            // what kind of file we downloaded if it doesn't have an
-                            // extension.
-                            var req_meta = _(req.req.res.headers).clone();
-                            if (req.req.res.request && req.req.res.request.path) {
-                                req_meta.path = req.req.res.request.path;
-                            }
-                            fs.writeFile(metapath(options.filepath), JSON.stringify(req_meta), 'utf-8', function(err) {
-                                downloads[url].emit('done', err, options.filepath);
-                                delete downloads[url];
-                                return callback(err, options.filepath);
-                            });
-                        }
-                    });
                 }
-            });
+                req.on('error', function(err) {
+                    downloads[url].emit('done', err);
+                    delete downloads[url];
+                    err.message =  make_message() + " ("+err.message+")";
+                    return callback(err);
+                });
+                req.pipe(fs.createWriteStream(dl)).on('error', function(err) {
+                    downloads[url].emit('done', err);
+                    delete downloads[url];
+                    err.message =  make_message() + " ("+err.message+")";
+                    return callback(err);
+                }).on('close', function() {
+                    if (!req.response || (req.response && req.response.statusCode >= 400)) {
+                        var err = new Error(make_message() + ' (server returned ' + req.response.statusCode + ')');
+                        downloads[url].emit('done', err);
+                        delete downloads[url];
+                        return callback(err);
+                    } else {
+                        fs.rename(dl, options.filepath, function(err) {
+                            if (err) {
+                              downloads[url].emit('done', err);
+                              delete downloads[url];
+                              return callback(err);
+                            } else {
+                                if (env == 'development') console.error("[millstone] finished downloading '" + options.filepath + "'");
+                                // We store the headers from the download in a hidden file
+                                // alongside the data for future reference. Currently, we
+                                // only use the `content-disposition` header to determine
+                                // what kind of file we downloaded if it doesn't have an
+                                // extension.
+                                var req_meta = _(req.req.res.headers).clone();
+                                if (req.req.res.request && req.req.res.request.path) {
+                                    req_meta.path = req.req.res.request.path;
+                                }
+                                fs.writeFile(metapath(options.filepath), JSON.stringify(req_meta), 'utf-8', function(err) {
+                                    downloads[url].emit('done', err, options.filepath);
+                                    delete downloads[url];
+                                    return callback(err, options.filepath);
+                                });
+                            }
+                        });
+                    }
+                });
+            }
         });
     }
 }
diff --git a/package.json b/package.json
index e8b2607..cd20f04 100644
--- a/package.json
+++ b/package.json
@@ -17,7 +17,7 @@
     "dependencies": {
         "underscore": "~1.3.3",
         "step": "~0.0.5",
-        "generic-pool": "1.0.x",
+        "generic-pool": "~2.0.3",
         "request": "~2.11.4",
         "srs": "~0.2.20",
         "zipfile": "0.x",