diff --git a/lib/resolve/Resolver.js b/lib/resolve/Resolver.js index 1ca20e2a..0bdf4e65 100644 --- a/lib/resolve/Resolver.js +++ b/lib/resolve/Resolver.js @@ -4,8 +4,6 @@ var Q = require('q'); var tmp = require('tmp'); var mkdirp = require('mkdirp'); var bowerJson = require('bower-json'); -var pathspec = require('pathspec'); -var rimraf = require('rimraf'); var glob = require('glob'); var config = require('../config'); var createError = require('../util/createError'); diff --git a/lib/resolve/resolvers/GitFsResolver.js b/lib/resolve/resolvers/GitFsResolver.js index bbcdbd90..b2c3e978 100644 --- a/lib/resolve/resolvers/GitFsResolver.js +++ b/lib/resolve/resolvers/GitFsResolver.js @@ -1,5 +1,4 @@ var util = require('util'); -var fs = require('fs'); var Q = require('q'); var mout = require('mout'); var GitResolver = require('./GitResolver'); diff --git a/lib/util/copy.js b/lib/util/copy.js index fe624390..a1d9f627 100644 --- a/lib/util/copy.js +++ b/lib/util/copy.js @@ -14,10 +14,10 @@ function copy(reader, writer) { // If we got an error, simply reject the deferred if (err) { - return deferred.reject(err); + deferred.reject(err); + } else { + deferred.resolve(); } - - return deferred.resolve(); }; // Reader diff --git a/lib/util/extract.js b/lib/util/extract.js index 28fc4f6f..426bee44 100644 --- a/lib/util/extract.js +++ b/lib/util/extract.js @@ -77,17 +77,17 @@ function getExtractor(archive) { function isSingleDir(dir) { return Q.nfcall(fs.readdir, dir) .then(function (files) { - var dir; + var singleDir; if (files.length !== 1) { return false; } - dir = files[0]; + singleDir = path.join(dir, files[0]); - return Q.nfcall(fs.stat, dir) + return Q.nfcall(fs.stat, singleDir) .then(function (stat) { - return !stat.isDirectory() ? files[0] : false; + return stat.isDirectory() ? singleDir : false; }); }); } @@ -109,7 +109,7 @@ function moveSingleDirContents(dir) { return Q.all(promises); }) .then(function () { - return Q.rmdir(dir); + return Q.nfcall(fs.rmdir, dir); }); } diff --git a/package.json b/package.json index 86b80c15..7ef80ced 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,6 @@ "mkdirp": "~0.3.5", "nopt": "~2.1.1", "semver": "~1.1.4", - "pathspec": "~0.9.2", "glob": "~3.1.21", "rimraf": "~2.1.4", "chmodr": "~0.1.0", diff --git a/test/assets/package-zip-folder.zip b/test/assets/package-zip-folder.zip new file mode 100644 index 00000000..8d4bd753 Binary files /dev/null and b/test/assets/package-zip-folder.zip differ diff --git a/test/assets/package-zip.zip b/test/assets/package-zip.zip new file mode 100644 index 00000000..a08fd040 Binary files /dev/null and b/test/assets/package-zip.zip differ diff --git a/test/resolve/resolvers/fsResolver.js b/test/resolve/resolvers/fsResolver.js index 6b287c03..b98b23ee 100644 --- a/test/resolve/resolvers/fsResolver.js +++ b/test/resolve/resolvers/fsResolver.js @@ -130,7 +130,7 @@ describe('FsResolver', function () { .done(); }); - it('should not copy ignored paths', function (next) { + it('should not copy ignored paths (to speed up copying)', function (next) { var resolver = new FsResolver(testPackage); // Override the _applyPkgMeta function to prevent it from deleting ignored files @@ -144,5 +144,29 @@ describe('FsResolver', function () { }) .done(); }); + + it('should extract if source is an archive', function (next) { + var resolver = new FsResolver(path.resolve(__dirname, '../../assets/package-zip.zip')); + + resolver.resolve() + .then(function (dir) { + expect(fs.existsSync(path.join(dir, 'foo.js'))).to.be(true); + expect(fs.existsSync(path.join(dir, 'package-zip.zip'))).to.be(false); + next(); + }) + .done(); + }); + + it('should copy extracted folder contents if it\'s single to the root', function (next) { + var resolver = new FsResolver(path.resolve(__dirname, '../../assets/package-zip-folder.zip')); + + resolver.resolve() + .then(function (dir) { + expect(fs.existsSync(path.join(dir, 'foo.js'))).to.be(true); + expect(fs.existsSync(path.join(dir, 'package-zip'))).to.be(false); + next(); + }) + .done(); + }); }); }); \ No newline at end of file diff --git a/test/test.js b/test/test.js index db73f0ff..0ddb8db8 100644 --- a/test/test.js +++ b/test/test.js @@ -1,5 +1,8 @@ // Cleanup the uncaughtException added by the tmp module // It messes with the mocha uncaughtException event to caught errors +// Please note that is the Resolver that calls tmp.setGracefulCleanup() +// so we need to require that before +require('../lib/resolve/Resolver'); process.removeAllListeners('uncaughtException'); require('./resolve/resolver');