[
https://issues.apache.org/jira/browse/CB-12021?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15872815#comment-15872815
]
ASF GitHub Bot commented on CB-12021:
-------------------------------------
Github user audreyso commented on a diff in the pull request:
https://github.com/apache/cordova-lib/pull/518#discussion_r101875939
--- Diff: cordova-lib/src/cordova/plugin.js ---
@@ -388,26 +384,54 @@ module.exports = function plugin(command, targets,
opts) {
function determinePluginTarget(projectRoot, cfg, target, fetchOptions) {
var parsedSpec = pluginSpec.parse(target);
-
var id = parsedSpec.package || target;
-
// CB-10975 We need to resolve relative path to plugin dir from app's
root before checking whether if it exists
var maybeDir = cordova_util.fixRelativePath(id);
if (parsedSpec.version || cordova_util.isUrl(id) ||
cordova_util.isDirectory(maybeDir)) {
return Q(target);
}
+ // Require project pkgJson.
+ var pkgJsonPath = path.join(projectRoot, 'package.json');
+ if(fs.existsSync(pkgJsonPath)) {
+ delete require.cache[require.resolve(pkgJsonPath)];
+ pkgJson = require(pkgJsonPath);
+ }
- // If no version is specified, retrieve the version (or source) from
config.xml
- events.emit('verbose', 'No version specified for ' +
parsedSpec.package + ', retrieving version from config.xml');
- var ver = getVersionFromConfigFile(id, cfg);
+ // If no parsedSpec.version, use the one from pkg.json or config.xml.
+ if (!parsedSpec.version) {
+ // Retrieve from pkg.json.
+ if(pkgJson && pkgJson.dependencies && pkgJson.dependencies[id]) {
+ events.emit('verbose', 'No version specified for ' + id + ',
retrieving version from package.json');
+ parsedSpec.version = pkgJson.dependencies[id];
+ } else {
+ // If no version is specified, retrieve the version (or
source) from config.xml.
+ events.emit('verbose', 'No version specified for ' + id + ',
retrieving version from config.xml');
+ parsedSpec.version = getVersionFromConfigFile(id, cfg);
+ }
+ }
+
+ // If parsedSpec.version satisfies pkgJson version, no writing to
pkg.json. Only write when
+ // it does not satisfy.
+ if(parsedSpec.version) {
+ if(pkgJson && pkgJson.dependencies &&
pkgJson.dependencies[parsedSpec.package]) {
+ var noSymbolVersion;
+ if (parsedSpec.version.charAt(0) === '^' ||
parsedSpec.version.charAt(0) === '~') {
+ noSymbolVersion = parsedSpec.version.slice(1);
+ }
+ if (!semver.satisfies(noSymbolVersion,
pkgJson.dependencies[parsedSpec.package])) {
--- End diff --
How does this look?
```// If parsedSpec.version satisfies pkgJson version, no writing to
pkg.json. Only write when
// it does not satisfy.
if(parsedSpec.version) {
if(pkgJson && pkgJson.dependencies &&
pkgJson.dependencies[parsedSpec.package]) {
var noSymbolVersion = parsedSpec.version;
if (parsedSpec.version.charAt(0) === '^' ||
parsedSpec.version.charAt(0) === '~') {
noSymbolVersion = parsedSpec.version.slice(1);
}
if (pkgJson.dependencies[parsedSpec.package] ===
parsedSpec.version) {
pkgJson.dependencies[parsedSpec.package] =
parsedSpec.version;
if (fetchOptions.save === true) {
fs.writeFileSync(pkgJsonPath, JSON.stringify(pkgJson,
null, 4), 'utf8');
}
}
}
}
if (cordova_util.isUrl(parsedSpec.version) ||
cordova_util.isDirectory(parsedSpec.version) ||
pluginSpec.parse(parsedSpec.version).scope) {
return Q(parsedSpec.version);
}```
> --fetch should use dependency version saved in package.json before default
> cordova version when adding/restoring
> ----------------------------------------------------------------------------------------------------------------
>
> Key: CB-12021
> URL: https://issues.apache.org/jira/browse/CB-12021
> Project: Apache Cordova
> Issue Type: Bug
> Components: cordova-fetch, CordovaLib
> Reporter: Steve Gill
> Assignee: Audrey So
> Labels: cordova-7.0.0
> Fix For: 7.0.0
>
>
> cordova platform add android --save --fetch should use the version of
> cordova-android already saved in package.json instead of the version from
> platformsConfig.json
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]