Skip to content

Commit

Permalink
Cordova refactoring and change of runner behavior
Browse files Browse the repository at this point in the history
- Refactored code in tools/cordova and introduced CordovaBuilder and
CordovaRunTarget classes
- CordovaRunner now builds and runs the project as part of the main
runner loop
- Some code cleanup and ES2015 conversions
  • Loading branch information
martijnwalraven committed Aug 26, 2015
1 parent d21bdde commit 87b11bd
Show file tree
Hide file tree
Showing 22 changed files with 1,427 additions and 1,530 deletions.
20 changes: 11 additions & 9 deletions tools/cli/commands-cordova.js
Expand Up @@ -6,8 +6,8 @@ import { ProjectContext, PlatformList } from '../project-context.js';
import buildmessage from '../utils/buildmessage.js';
import files from '../fs/files.js';

import { AVAILABLE_PLATFORMS, ensureCordovaPlatformsAreSynchronized, checkPlatformRequirements } from '../cordova/platforms.js';
import { createCordovaProjectIfNecessary } from '../cordova/project.js';
import * as cordova from '../cordova';
import { CordovaProject } from '../cordova/project.js';

function createProjectContext(appDir) {
const projectContext = new ProjectContext({
Expand Down Expand Up @@ -42,25 +42,26 @@ main.registerCommand({
for (platform of platformsToAdd) {
if (_.contains(installedPlatforms, platform)) {
buildmessage.error(`${platform}: platform is already added`);
} else if (!_.contains(AVAILABLE_PLATFORMS, platform)) {
} else if (!_.contains(cordova.AVAILABLE_PLATFORMS, platform)) {
buildmessage.error(`${platform}: no such platform`);
}
}

if (buildmessage.jobHasMessages()) return;

const cordovaProject = createCordovaProjectIfNecessary(projectContext);
const cordovaProject = new CordovaProject(projectContext);

installedPlatforms = installedPlatforms.concat(platformsToAdd)
ensureCordovaPlatformsAreSynchronized(cordovaProject, installedPlatforms);
const cordovaPlatforms = cordova.filterPlatforms(installedPlatforms);
cordovaProject.ensurePlatformsAreSynchronized(cordovaPlatforms);

if (buildmessage.jobHasMessages()) return;

projectContext.platformList.write(installedPlatforms);

for (platform of platformsToAdd) {
Console.info(`${platform}: added platform`);
checkPlatformRequirements(cordovaProject, platform);
cordovaProject.checkPlatformRequirements(platform);
}
});

Expand Down Expand Up @@ -96,10 +97,11 @@ main.registerCommand({

if (buildmessage.jobHasMessages()) return;

installedPlatforms = _.without(installedPlatforms, ...platformsToRemove);
const cordovaProject = new CordovaProject(projectContext);

const cordovaProject = createCordovaProjectIfNecessary(projectContext);
ensureCordovaPlatformsAreSynchronized(cordovaProject, installedPlatforms);
installedPlatforms = _.without(installedPlatforms, ...platformsToRemove);
const cordovaPlatforms = cordova.filterPlatforms(installedPlatforms);
cordovaProject.ensurePlatformsAreSynchronized(cordovaPlatforms);

if (buildmessage.jobHasMessages()) return;

Expand Down
45 changes: 21 additions & 24 deletions tools/cli/commands-packages.js
Expand Up @@ -11,7 +11,6 @@ var catalog = require('../packaging/catalog/catalog.js');
var catalogRemote = require('../packaging/catalog/catalog-remote.js');
var isopack = require('../isobuild/isopack.js');
var updater = require('../packaging/updater.js');
import { filterCordovaPackages } from '../cordova/plugins.js';
var Console = require('../console/console.js').Console;
var projectContextModule = require('../project-context.js');
var colonConverter = require('../utils/colon-converter.js');
Expand All @@ -24,6 +23,8 @@ var packageMapModule = require('../packaging/package-map.js');
var packageClient = require('../packaging/package-client.js');
var tropohouse = require('../packaging/tropohouse.js');

import * as cordova from '../cordova';

// For each release (or package), we store a meta-record with its name,
// maintainers, etc. This function takes in a name, figures out if
// it is a release or a package, and fetches the correct record.
Expand Down Expand Up @@ -1810,14 +1811,14 @@ main.registerCommand({

var exitCode = 0;

var filteredPackages = filterCordovaPackages(options.args);
var pluginsToAdd = filteredPackages.plugins;
const { plugins: pluginsToAdd, packages: packagesToAdd } =
cordova.splitPluginsAndPackages(options.args);

if (pluginsToAdd.length) {
var plugins = projectContext.cordovaPluginsFile.getPluginVersions();
var changed = false;
_.each(pluginsToAdd, function (pluginSpec) {
var parts = pluginSpec.split('@');
let plugins = projectContext.cordovaPluginsFile.getPluginVersions();
let changed = false;
for (pluginSpec of pluginsToAdd) {
let parts = pluginSpec.split('@');
if (parts.length !== 2) {
Console.error(
pluginSpec + ': exact version or tarball url is required');
Expand All @@ -1831,13 +1832,11 @@ main.registerCommand({
changed = true;
Console.info("added cordova plugin " + parts[0]);
}
});
}
changed && projectContext.cordovaPluginsFile.write(plugins);
}

var args = filteredPackages.rest;

if (_.isEmpty(args))
if (_.isEmpty(packagesToAdd))
return exitCode;

// Messages that we should print if we make any changes, but that don't count
Expand All @@ -1849,7 +1848,7 @@ main.registerCommand({
// them -- add should be an atomic operation regardless of the package
// order.
var messages = buildmessage.capture(function () {
_.each(args, function (packageReq) {
_.each(packagesToAdd, function (packageReq) {
buildmessage.enterJob("adding package " + packageReq, function () {
var constraint = utils.parsePackageConstraint(packageReq, {
useBuildmessage: true
Expand Down Expand Up @@ -1993,16 +1992,16 @@ main.registerCommand({
});

// Special case on reserved package namespaces, such as 'cordova'
var filteredPackages = filterCordovaPackages(options.args);
var pluginsToRemove = filteredPackages.plugins;
const { plugins: pluginsToRemove, packages } =
cordova.splitPluginsAndPackages(options.args);

var exitCode = 0;
let exitCode = 0;

// Update the plugins list
if (pluginsToRemove.length) {
var plugins = projectContext.cordovaPluginsFile.getPluginVersions();
var changed = false;
_.each(pluginsToRemove, function (pluginName) {
let plugins = projectContext.cordovaPluginsFile.getPluginVersions();
let changed = false;
for (pluginName of pluginsToRemove) {
if (/@/.test(pluginName)) {
Console.error(pluginName + ": do not specify version constraints.");
exitCode = 1;
Expand All @@ -2015,21 +2014,19 @@ main.registerCommand({
" is not in this project.");
exitCode = 1;
}
});
}
changed && projectContext.cordovaPluginsFile.write(plugins);
}

var args = filteredPackages.rest;

if (_.isEmpty(args))
if (_.isEmpty(packages))
return exitCode;

// For each package name specified, check if we already have it and warn the
// user. Because removing each package is a completely atomic operation that
// has no chance of failure, this is just a warning message, it doesn't cause
// us to stop.
var packagesToRemove = [];
_.each(args, function (packageName) {
let packagesToRemove = [];
_.each(packages, function (packageName) {
if (/@/.test(packageName)) {
Console.error(packageName + ": do not specify version constraints.");
exitCode = 1;
Expand Down

0 comments on commit 87b11bd

Please sign in to comment.