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",