in src/plugman/install.js [485:553]
function installDependency (dep, install, options) {
let opts;
dep.install_dir = path.join(install.plugins_dir, dep.id);
events.emit('verbose', 'Requesting plugin "' + (dep.version ? dep.id + '@' + dep.version : dep.id) + '".');
if (fs.existsSync(dep.install_dir)) {
const pluginInfo = new PluginInfo(dep.install_dir);
const version_installed = pluginInfo.version;
let version_required = dep.version;
if (dep.version) {
if (Number(dep.version.replace('.', ''))) {
version_required = '^' + dep.version;
}
}
// strip -dev from the installed plugin version so it properly passes
// semver.satisfies
let stripped_version;
if (version_installed.includes('-dev')) {
stripped_version = semver.inc(version_installed, 'patch');
}
if (options.force ||
semver.satisfies(version_installed, version_required, /* loose= */true) ||
semver.satisfies(stripped_version, version_required, /* loose= */true) ||
version_required === null ||
version_required === undefined ||
version_required === '') {
events.emit('log', 'Plugin dependency "' + (version_installed ? dep.id + '@' + version_installed : dep.id) + '" already fetched, using that version.');
} else {
const msg = 'Version of installed plugin: "' +
dep.id + '@' + version_installed +
'" does not satisfy dependency plugin requirement "' +
dep.id + '@' + version_required +
'". Try --force to use installed plugin as dependency.';
return Promise.resolve()
.then(function () {
// Remove plugin
return fs.removeSync(path.join(install.plugins_dir, install.top_plugin_id));
}).then(function () {
// Return promise chain and finally reject
return Promise.reject(new CordovaError(msg));
});
}
opts = Object.assign({}, options, {
cli_variables: install.filtered_variables,
is_top_level: false
});
return module.exports.runInstall(install.actions, install.platform, install.project_dir, dep.install_dir, install.plugins_dir, opts);
} else {
events.emit('verbose', 'Plugin dependency "' + dep.id + '" not fetched, retrieving then installing.');
opts = Object.assign({}, options, {
cli_variables: install.filtered_variables,
is_top_level: false,
subdir: dep.subdir,
git_ref: dep.git_ref,
expected_id: dep.id
});
const dep_src = dep.url.length ? dep.url : (dep.version ? dep.id + '@' + dep.version : dep.id);
return possiblyFetch(dep_src, install.plugins_dir, opts)
.then(
function (plugin_dir) {
return module.exports.runInstall(install.actions, install.platform, install.project_dir, plugin_dir, install.plugins_dir, opts);
}
);
}
}