Skip to content

Commit

Permalink
Merge pull request #88 from tschoartschi/master
Browse files Browse the repository at this point in the history
Check tar.gz urls if they are specified in _from in package.json
  • Loading branch information
quaertym committed Jun 6, 2018
2 parents f03e0f9 + 24f7ee6 commit 90b33ac
Show file tree
Hide file tree
Showing 9 changed files with 94 additions and 5 deletions.
19 changes: 14 additions & 5 deletions lib/dependency-checker.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ var readDir = fs.readdirSync;
var fileExists = fs.existsSync;
var Package = require('./package');
var buildBowerPackagePath = require('./utils/build-bower-package-path');
var isTarGz = require('./utils/is-tar-gz');
var unknownVersion = require('./utils/unknown-version');

var alreadyChecked = false;

Expand Down Expand Up @@ -84,10 +86,10 @@ EmberCLIDependencyChecker.prototype.readShrinkwrapDeps = function() {
}
};

EmberCLIDependencyChecker.prototype.lookupNodeModule = function(name) {
EmberCLIDependencyChecker.prototype.lookupNodeModule = function(name, versionSpecified) {
try {
var nodePackage = resolve.sync(path.join(name, 'package.json'), { basedir: this.project.root });
var version = this.lookupPackageVersion(nodePackage);
var version = this.lookupPackageVersion(nodePackage, versionSpecified);
return { version: version, path: path.dirname(nodePackage) };
} catch(err) {
return { version: null, path: null };
Expand All @@ -108,12 +110,16 @@ EmberCLIDependencyChecker.prototype.lookupBowerPackageVersion = function(name) {
return version;
};

EmberCLIDependencyChecker.prototype.lookupPackageVersion = function(path) {
EmberCLIDependencyChecker.prototype.lookupPackageVersion = function(path, versionSpecified) {
if (fileExists(path)) {
var pkg = readFile(path);
var version = null;
try {
version = JSON.parse(pkg).version || null;
var pkgContent = JSON.parse(pkg);
version = pkgContent.version || null;
if (isTarGz(versionSpecified)) {
version = pkgContent._from || unknownVersion;
}
} catch(e) {
// JSON parse error
}
Expand All @@ -135,10 +141,13 @@ EmberCLIDependencyChecker.prototype.readDependencies = function(dependencies, ty
return Object.keys(dependencies).map(function(name) {
var versionSpecified = dependencies[name];
if (type === 'npm') {
var result = this.lookupNodeModule(name);
var result = this.lookupNodeModule(name, versionSpecified);
return new Package(name, versionSpecified, result.version, result.path);
} else {
var versionInstalled = this.lookupBowerPackageVersion(name);
if (isTarGz(versionSpecified)) {
versionInstalled = unknownVersion;
}
var path = buildBowerPackagePath(this.project, name);
return new Package(name, versionSpecified, versionInstalled, path);
}
Expand Down
5 changes: 5 additions & 0 deletions lib/utils/is-tar-gz.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
const regex = /((\.tar(\.gz)?)|(\.tgz))$/;

module.exports = function isTarGz(str) {
return regex.test(str);
};
1 change: 1 addition & 0 deletions lib/utils/unknown-version.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
module.exports = '__UNKNOWN_VERSION__';
4 changes: 4 additions & 0 deletions lib/version-checker.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ VersionChecker.satisfies = function(versionSpecified, versionInstalled) {
var version = versionSpecified;
var isGitRepo = require('is-git-url');
var semver = require('semver');
var isTarGz = require('./utils/is-tar-gz');
var unknownVersion = require('./utils/unknown-version');

if (version === '*') {
return true;
Expand All @@ -22,6 +24,8 @@ VersionChecker.satisfies = function(versionSpecified, versionInstalled) {
return true;
}
}
} else if (isTarGz(version) && versionInstalled !== unknownVersion) {
return version === versionInstalled;
}

if (!semver.validRange(version)) {
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Empty file.
15 changes: 15 additions & 0 deletions tests/unit/dependency-checker-package-manager-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,16 @@ describe('EmberCLIDependencyChecker', function() {
var project = createProject({ 'ember-cli': 'git://github.com/stefanpenner/ember-cli.git#v0.1.0' });
assertPackageManagerError(project);
});

it('when the version specified is a url to a tar.gz and a _from is provided in the package.json and does not match', function() {
var project = createProject({ 'example-tar-gz': 'http://ember-cli.com/example-3.0.0.tar.gz' }, { root: 'tests/fixtures/project-'+ packageManagerName + '-tar-gz-check' });
assertPackageManagerError(project);
});

it('when the version specified is a url to a tar.gz and no package is installed', function() {
var project = createProject({ 'example-2-tar-gz': 'http://ember-cli.com/example-2-2.0.0.tar.gz' }, { root: 'tests/fixtures/project-'+ packageManagerName + '-tar-gz-check' });
assertPackageManagerError(project);
});
});

describe('does not report satisfied ' + packageManagerName + ' dependencies', function() {
Expand Down Expand Up @@ -96,6 +106,11 @@ describe('EmberCLIDependencyChecker', function() {
var project = createProject({ 'example-package': '1.2.3' }, { root: 'tests/fixtures/outside-root-' + packageManagerName + '-project/project' });
assertNoPackageManagerError(project);
});

it('when the version specified is a url to a tar.gz and a _from is provided in the package.json and urls match', function() {
var project = createProject({ 'example-tar-gz': 'http://ember-cli.com/example-2.0.0.tar.gz' }, { root: 'tests/fixtures/project-'+ packageManagerName + '-tar-gz-check' });
assertNoPackageManagerError(project);
});
});

describe('sibling node_modules/ directory', function() {
Expand Down
45 changes: 45 additions & 0 deletions tests/unit/is-tar-gz-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
var assert = require('chai').assert;
var isTarGz = require('../../lib/utils/is-tar-gz');

describe('IsTarGz', function () {
describe('recognizes tar ball', function () {

it('when url ends with .tar', function () {
var url = 'http://ember-cli.com/example-2.0.0.tar';
assert.ok(isTarGz(url));
});

it('when url ends with .tar.gz', function () {
var url = 'http://ember-cli.com/example-2.0.0.tar.gz';
assert.ok(isTarGz(url));
});

it('when url ends with .tgz', function () {
var url = 'http://ember-cli.com/example-2.0.0.tgz';
assert.ok(isTarGz(url));
});
});

describe('recognizes that url is not a tar ball', function () {
it('when url contains .tar somewhere', function () {
var url = 'http://ember-cli.com/example-2.0.0.tar.zip';
assert.notOk(isTarGz(url));
});

it('when url contains .tar.gz somewhere', function () {
var url = 'http://ember-cli.com/example-2.0.0.tar.gz.zip';
assert.notOk(isTarGz(url));
});

it('when url contains .tgz somewhere', function () {
var url = 'http://ember-cli.com/example-2.0.0.tgz.zip';
assert.notOk(isTarGz(url));
});

it('when url contains no .tar, .tar.gz or .tgz', function () {
var url = 'http://ember-cli.com/example-2.0.0.zip';
assert.notOk(isTarGz(url));
});
});

});

0 comments on commit 90b33ac

Please sign in to comment.