From 7699b2bbc7d4f50905b9a52dbca4272818eef43e Mon Sep 17 00:00:00 2001 From: Xavier Cambar Date: Wed, 6 Jul 2016 17:18:22 +0200 Subject: [PATCH 1/4] [BUGFIX] access to the app for nested addons --- lib/models/addon.js | 30 ++++++++-- .../nested-addons-smoke-test-slow.js | 59 +++++++++++++++++++ .../node_modules/ember-top-addon/index.js | 6 ++ .../node_modules/ember-inner-addon/index.js | 8 +++ .../ember-inner-addon/package.json | 12 ++++ .../ember-inner-addon/vendor/inner.js | 1 + .../node_modules/ember-inner-addon2/index.js | 8 +++ .../ember-inner-addon2/package.json | 12 ++++ .../ember-inner-addon2/vendor/inner2.js | 1 + .../node_modules/ember-top-addon/package.json | 12 ++++ 10 files changed, 145 insertions(+), 4 deletions(-) create mode 100644 tests/acceptance/nested-addons-smoke-test-slow.js create mode 100644 tests/fixtures/addon/with-nested-addons/node_modules/ember-top-addon/index.js create mode 100644 tests/fixtures/addon/with-nested-addons/node_modules/ember-top-addon/node_modules/ember-inner-addon/index.js create mode 100644 tests/fixtures/addon/with-nested-addons/node_modules/ember-top-addon/node_modules/ember-inner-addon/package.json create mode 100644 tests/fixtures/addon/with-nested-addons/node_modules/ember-top-addon/node_modules/ember-inner-addon/vendor/inner.js create mode 100644 tests/fixtures/addon/with-nested-addons/node_modules/ember-top-addon/node_modules/ember-inner-addon2/index.js create mode 100644 tests/fixtures/addon/with-nested-addons/node_modules/ember-top-addon/node_modules/ember-inner-addon2/package.json create mode 100644 tests/fixtures/addon/with-nested-addons/node_modules/ember-top-addon/node_modules/ember-inner-addon2/vendor/inner2.js create mode 100644 tests/fixtures/addon/with-nested-addons/node_modules/ember-top-addon/package.json diff --git a/lib/models/addon.js b/lib/models/addon.js index 9790e0bbb2..4d63cdb162 100644 --- a/lib/models/addon.js +++ b/lib/models/addon.js @@ -376,6 +376,31 @@ var Addon = CoreObject.extend({ return tree; }, + /** + This method climbs up the hierarchy of addons + up to the host application. + + This prevents previous addons (prior to `this.import`, ca 2.7.0) + to break at importing assets when they are used nested in other addons. + + @private + @method _findHost + ``` + */ + _findHost: function() { + var app = this.app; + var parent = this.parent; + while (parent.parent) { + if (parent.app) { + app = parent.app; + break; + } + + parent = parent.parent; + } + return app; + }, + /** This method is called when the addon is included in a build. You would typically use this hook to perform additional imports @@ -420,10 +445,7 @@ var Addon = CoreObject.extend({ @param {String} [options.destDir] Destination directory, defaults to the name of the directory the asset is in */ import: function(asset, options) { - var app = this.app; - while (app.app) { - app = app.app; - } + var app = this._findHost(); app.import(asset, options); }, diff --git a/tests/acceptance/nested-addons-smoke-test-slow.js b/tests/acceptance/nested-addons-smoke-test-slow.js new file mode 100644 index 0000000000..7cbba802d0 --- /dev/null +++ b/tests/acceptance/nested-addons-smoke-test-slow.js @@ -0,0 +1,59 @@ +'use strict'; + +var path = require('path'); +var fs = require('fs-extra'); + +var runCommand = require('../helpers/run-command'); +var acceptance = require('../helpers/acceptance'); +var copyFixtureFiles = require('../helpers/copy-fixture-files'); +var createTestTargets = acceptance.createTestTargets; +var teardownTestTargets = acceptance.teardownTestTargets; +var linkDependencies = acceptance.linkDependencies; +var cleanupRun = acceptance.cleanupRun; + +var chai = require('../chai'); +var expect = chai.expect; +var file = chai.file; +var dir = chai.dir; + +var appName = 'some-cool-app'; + +describe('Acceptance: nested-addons-smoke-test', function() { + this.timeout(360000); + + before(function() { + return createTestTargets(appName); + }); + + after(function() { + return teardownTestTargets(); + }); + + beforeEach(function() { + return linkDependencies(appName); + }); + + afterEach(function() { + return cleanupRun(appName).then(function() { + expect(dir('tmp/' + appName)).to.not.exist; + }); + }); + + it('addons with nested addons compile correctly', function() { + return copyFixtureFiles('addon/with-nested-addons') + .then(function() { + var packageJsonPath = path.join(__dirname, '..', '..', 'tmp', appName, 'package.json'); + var packageJson = fs.readJsonSync(packageJsonPath); + packageJson.devDependencies['ember-top-addon'] = 'latest'; + + return fs.writeJsonSync(packageJsonPath, packageJson); + }) + .then(function() { + return runCommand(path.join('.', 'node_modules', 'ember-cli', 'bin', 'ember'), 'build'); + }) + .then(function() { + expect(file('dist/assets/vendor.js')).to.contain('INNER_ADDON_IMPORT_WITH_APP_IMPORT'); + expect(file('dist/assets/vendor.js')).to.contain('INNER_ADDON_IMPORT_WITH_THIS_IMPORT'); + }); + }); +}); diff --git a/tests/fixtures/addon/with-nested-addons/node_modules/ember-top-addon/index.js b/tests/fixtures/addon/with-nested-addons/node_modules/ember-top-addon/index.js new file mode 100644 index 0000000000..ed2a7848ce --- /dev/null +++ b/tests/fixtures/addon/with-nested-addons/node_modules/ember-top-addon/index.js @@ -0,0 +1,6 @@ +'use strict'; + +module.exports = { + name: 'ember-top-addon' +}; + diff --git a/tests/fixtures/addon/with-nested-addons/node_modules/ember-top-addon/node_modules/ember-inner-addon/index.js b/tests/fixtures/addon/with-nested-addons/node_modules/ember-top-addon/node_modules/ember-inner-addon/index.js new file mode 100644 index 0000000000..6d3c93dd22 --- /dev/null +++ b/tests/fixtures/addon/with-nested-addons/node_modules/ember-top-addon/node_modules/ember-inner-addon/index.js @@ -0,0 +1,8 @@ +'use strict'; + +module.exports = { + name: 'Ember Inner Addon', + included: function(app) { + app.import('vendor/inner.js'); + } +}; diff --git a/tests/fixtures/addon/with-nested-addons/node_modules/ember-top-addon/node_modules/ember-inner-addon/package.json b/tests/fixtures/addon/with-nested-addons/node_modules/ember-top-addon/node_modules/ember-inner-addon/package.json new file mode 100644 index 0000000000..1cebfe85df --- /dev/null +++ b/tests/fixtures/addon/with-nested-addons/node_modules/ember-top-addon/node_modules/ember-inner-addon/package.json @@ -0,0 +1,12 @@ +{ + "name": "ember-inner-addon", + "version": "0.0.0", + "private": true, + "keywords": [ + "ember-addon" + ], + "devDependencies": { + "loader.js": "latest" + } +} + diff --git a/tests/fixtures/addon/with-nested-addons/node_modules/ember-top-addon/node_modules/ember-inner-addon/vendor/inner.js b/tests/fixtures/addon/with-nested-addons/node_modules/ember-top-addon/node_modules/ember-inner-addon/vendor/inner.js new file mode 100644 index 0000000000..072e547f74 --- /dev/null +++ b/tests/fixtures/addon/with-nested-addons/node_modules/ember-top-addon/node_modules/ember-inner-addon/vendor/inner.js @@ -0,0 +1 @@ +//INNER_ADDON_IMPORT_WITH_APP_IMPORT diff --git a/tests/fixtures/addon/with-nested-addons/node_modules/ember-top-addon/node_modules/ember-inner-addon2/index.js b/tests/fixtures/addon/with-nested-addons/node_modules/ember-top-addon/node_modules/ember-inner-addon2/index.js new file mode 100644 index 0000000000..bb3949c4a6 --- /dev/null +++ b/tests/fixtures/addon/with-nested-addons/node_modules/ember-top-addon/node_modules/ember-inner-addon2/index.js @@ -0,0 +1,8 @@ +'use strict'; + +module.exports = { + name: 'Ember Inner Addon 2', + included: function() { + this.import('vendor/inner2.js'); + } +}; diff --git a/tests/fixtures/addon/with-nested-addons/node_modules/ember-top-addon/node_modules/ember-inner-addon2/package.json b/tests/fixtures/addon/with-nested-addons/node_modules/ember-top-addon/node_modules/ember-inner-addon2/package.json new file mode 100644 index 0000000000..3053a3ae92 --- /dev/null +++ b/tests/fixtures/addon/with-nested-addons/node_modules/ember-top-addon/node_modules/ember-inner-addon2/package.json @@ -0,0 +1,12 @@ +{ + "name": "ember-inner-addon2", + "version": "0.0.0", + "private": true, + "keywords": [ + "ember-addon" + ], + "devDependencies": { + "loader.js": "latest" + } +} + diff --git a/tests/fixtures/addon/with-nested-addons/node_modules/ember-top-addon/node_modules/ember-inner-addon2/vendor/inner2.js b/tests/fixtures/addon/with-nested-addons/node_modules/ember-top-addon/node_modules/ember-inner-addon2/vendor/inner2.js new file mode 100644 index 0000000000..f04a321e29 --- /dev/null +++ b/tests/fixtures/addon/with-nested-addons/node_modules/ember-top-addon/node_modules/ember-inner-addon2/vendor/inner2.js @@ -0,0 +1 @@ +//INNER_ADDON_IMPORT_WITH_THIS_IMPORT diff --git a/tests/fixtures/addon/with-nested-addons/node_modules/ember-top-addon/package.json b/tests/fixtures/addon/with-nested-addons/node_modules/ember-top-addon/package.json new file mode 100644 index 0000000000..8b82da4d62 --- /dev/null +++ b/tests/fixtures/addon/with-nested-addons/node_modules/ember-top-addon/package.json @@ -0,0 +1,12 @@ +{ + "name": "ember-top-addon", + "version": "0.0.0", + "private": true, + "keywords": [ + "ember-addon" + ], + "dependencies": { + "ember-inner-addon": "latest", + "ember-inner-addon2": "latest" + } +} From a95367b81254107d84713a6961ab4016460f3935 Mon Sep 17 00:00:00 2001 From: Nathan Hammond Date: Mon, 11 Jul 2016 18:03:18 -0700 Subject: [PATCH 2/4] Ember & Ember Data beta version bumps. --- blueprints/app/files/bower.json | 2 +- blueprints/app/files/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/blueprints/app/files/bower.json b/blueprints/app/files/bower.json index 6dcfd41f3a..147990be41 100644 --- a/blueprints/app/files/bower.json +++ b/blueprints/app/files/bower.json @@ -1,7 +1,7 @@ { "name": "<%= name %>", "dependencies": { - "ember": "~2.7.0-beta.3", + "ember": "~2.7.0-beta.4", "ember-cli-shims": "0.1.1", "ember-qunit-notifications": "0.1.0" } diff --git a/blueprints/app/files/package.json b/blueprints/app/files/package.json index d17c1c3be1..2d7465dcde 100644 --- a/blueprints/app/files/package.json +++ b/blueprints/app/files/package.json @@ -34,7 +34,7 @@ "ember-cli-sri": "^2.1.0", "ember-cli-test-loader": "^1.1.0", "ember-cli-uglify": "^1.2.0", - "ember-data": "^2.7.0-beta.1", + "ember-data": "^2.7.0-beta.3", "ember-export-application-global": "^1.0.5", "ember-load-initializers": "^0.5.1", "ember-resolver": "^2.0.3", From 1032820aa107888c57d4f98f265cc67fe4a1b76e Mon Sep 17 00:00:00 2001 From: kellyselden Date: Thu, 7 Jul 2016 11:23:56 -0700 Subject: [PATCH 3/4] port output scripts to dev folder --- RELEASE.md | 5 ++++- dev/add-to-output-repos.sh | 40 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100755 dev/add-to-output-repos.sh diff --git a/RELEASE.md b/RELEASE.md index cdf5ea0971..4539ff434e 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -60,7 +60,10 @@ $ npm --version ### Update Artifacts -[Update ember-new-output and ember-addon-output.](https://gist.github.com/nathanhammond/e0a55b4d0328b45b8ef5) Make sure to include the tag links in CHANGELOG.md. +* if normal release + * run `./dev/add-to-output-repos.sh` +* if beta release + * run `./dev/add-to-output-repos.sh beta` ### Publish diff --git a/dev/add-to-output-repos.sh b/dev/add-to-output-repos.sh new file mode 100755 index 0000000000..7e1383f494 --- /dev/null +++ b/dev/add-to-output-repos.sh @@ -0,0 +1,40 @@ +# so you can run this script from any folder and it will find the tmp dir +cd "`git rev-parse --show-toplevel`" + +mkdir -p tmp +cd tmp + +branch=stable +if [ "$1" = "beta" ]; then + branch=master +fi + +EMBERVERSION=`ember version | grep "ember-cli:" | cut -d' ' -f2` + +commands=(new addon) + +for i in ${commands[@]}; do + command=$i + repo_folder=ember-$command-output + + local_folder=my-$command + if [ $command = new ]; then + local_folder=my-app + fi + + git clone https://github.com/ember-cli/$repo_folder.git --branch $branch + pushd $repo_folder + git rm -rf . + ember new $local_folder -sb -sn -sg + cp -r $local_folder/ . + rm -r $local_folder + + git add --all + git commit -m $EMBERVERSION + git tag "v"$EMBERVERSION + git push + git push --tags + + popd + rm -rf $repo_folder +done From a639f6fa6af2edd136d0073601ace6dc3d0040de Mon Sep 17 00:00:00 2001 From: kellyselden Date: Tue, 12 Jul 2016 21:28:20 -0700 Subject: [PATCH 4/4] Release v2.7.0-beta.6 --- CHANGELOG.md | 21 +++++++++++++++++++++ package.json | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 32dbcdb8f8..9762e8b396 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,26 @@ # ember-cli Changelog +### 2.7.0-beta.6 + +The following changes are required if you are upgrading from the previous +version: + +- Users + + [`ember new` diff](https://github.com/ember-cli/ember-new-output/compare/v2.7.0-beta.5...v2.7.0-beta.6) + + Upgrade your project's ember-cli version - [docs](http://ember-cli.com/user-guide/#upgrading) +- Addon Developers + + [`ember addon` diff](https://github.com/ember-cli/ember-addon-output/compare/v2.7.0-beta.5...v2.7.0-beta.6) + + No changes required +- Core Contributors + + No changes required + +#### Community Contributions + +- [#6057](https://github.com/ember-cli/ember-cli/pull/6057) Ember & Ember Data beta version bumps. [@nathanhammond](https://github.com/nathanhammond) + +Thank you to all who took the time to contribute! + + ### 2.7.0-beta.5 The following changes are required if you are upgrading from the previous diff --git a/package.json b/package.json index 91f794c497..fc1a8ea9f1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ember-cli", - "version": "2.7.0-beta.5", + "version": "2.7.0-beta.6", "main": "lib/cli/index.js", "description": "Command line tool for developing ambitious ember.js apps", "homepage": "http://ember-cli.com/",