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