[
https://issues.apache.org/jira/browse/CB-10654?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15157529#comment-15157529
]
ASF GitHub Bot commented on CB-10654:
-------------------------------------
Github user tony-- commented on a diff in the pull request:
https://github.com/apache/cordova-lib/pull/395#discussion_r53677145
--- Diff: cordova-lib/src/cordova/platform.js ---
@@ -79,148 +79,156 @@ function addHelper(cmd, hooksRunner, projectRoot,
targets, opts) {
var platformsDir = path.join(projectRoot, 'platforms');
shell.mkdir('-p', platformsDir);
- return hooksRunner.fire('before_platform_' + cmd, opts)
- .then(function() {
- return promiseutil.Q_chainmap(targets, function(target) {
- // For each platform, download it and call its helper script.
- var parts = target.split('@');
- var platform = parts[0];
- var spec = parts[1];
-
- return Q.when().then(function() {
- if (!(platform in platforms)) {
- spec = platform;
- platform = null;
- }
+ return promiseutil.Q_chainmap(targets, function(target) {
+ // For each platform, download it and call its helper script.
+ var parts = target.split('@');
+ var platform = parts[0];
+ var spec = parts[1];
+ var platDetails = '';
+
+ return Q.when().then(function() {
+ if (!(platform in platforms)) {
+ spec = platform;
+ platform = null;
+ }
- if(platform === 'amazon-fireos') {
- events.emit('warn', 'amazon-fireos has been
deprecated. Please use android instead.');
- }
- if(platform === 'wp8') {
- events.emit('warn', 'wp8 has been deprecated. Please
use windows instead.');
- }
- if (platform && !spec && cmd == 'add') {
- events.emit('verbose', 'No version supplied.
Retrieving version from config.xml...');
- spec = getVersionFromConfigFile(platform, cfg);
- }
+ if(platform === 'amazon-fireos') {
+ events.emit('warn', 'amazon-fireos has been deprecated.
Please use android instead.');
+ }
+ if(platform === 'wp8') {
+ events.emit('warn', 'wp8 has been deprecated. Please use
windows instead.');
+ }
+ if (platform && !spec && cmd == 'add') {
+ events.emit('verbose', 'No version supplied. Retrieving
version from config.xml...');
+ spec = getVersionFromConfigFile(platform, cfg);
+ }
+
+ // If --save/autosave on && no version specified, use the
pinned version
+ // e.g: 'cordova platform add android --save', 'cordova
platform update android --save'
+ if( (opts.save || autosave) && !spec ){
+ spec = platforms[platform].version;
+ }
- // If --save/autosave on && no version specified, use the
pinned version
- // e.g: 'cordova platform add android --save', 'cordova
platform update android --save'
- if( (opts.save || autosave) && !spec ){
- spec = platforms[platform].version;
+ if (spec) {
+ var maybeDir = cordova_util.fixRelativePath(spec);
+ if (cordova_util.isDirectory(maybeDir)) {
+ return getPlatformDetailsFromDir(maybeDir, platform);
+ }
+ }
+ return downloadPlatform(projectRoot, platform, spec, opts);
+ }).then(function(platformDetails) {
+ platDetails = platformDetails;
+ var hookOpts = {
+ platforms :[platDetails.platform],
+ nohooks :[opts.nohooks]
+ };
+ return hooksRunner.fire('before_platform_' + cmd, hookOpts);
--- End diff --
I was only providing the opts that are used by HooksRunner and
scriptFinder, but I was planning to switch to cloning opts and replacing the
platform in my copy. Seems less brittle than my current approach.
> _platform_add hooks not executed when platform added from repo or directory
> ---------------------------------------------------------------------------
>
> Key: CB-10654
> URL: https://issues.apache.org/jira/browse/CB-10654
> Project: Apache Cordova
> Issue Type: Bug
> Components: CordovaLib
> Affects Versions: Master
> Reporter: Tony Homer
> Assignee: Tony Homer
> Labels: pendingPR, triaged
> Attachments: CB-10654.zip
>
>
> platform-specific before_platform_add and after_platform_add hooks are not
> executed when platforms are added from directory or repo.
> e.g., hooks defined in config.xml as follows
> {code}
> <platform name="android">
> <hook type="before_platform_add"
> src="scripts/before_platform_add/android/001_test.js" />
> <hook type="after_platform_add"
> src="scripts/after_platform_add/android/001_test.js" />
> </platform>
> {code}
> This is because the matching logic in platform.js depends on the targets
> specified in command line arguments.
> It seems that the matching logic should be deferred until the platform can be
> determined via getPlatformDetailsFromDir.
> This would require that the before_platform_add hook not be executed until
> after the platform has been downloaded.
> Steps to reproduce
> # create a project with platform-specific hooks for before_platform_add
> and/or after_platform_add defined in config.xml
> # add platform from npm, e.g.
> {code}
> cordova platform add android
> {code}
> # hooks get executed
> # add platform from repo or local dir, e.g.
> {code}
> cordova platform add https://github.com/apache/cordova-android
> cordova platform add my-local-copy-of-cordova-android
> {code}
> # hooks do not get executed
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]