[
https://issues.apache.org/jira/browse/CB-11117?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15261723#comment-15261723
]
ASF GitHub Bot commented on CB-11117:
-------------------------------------
Github user vladimir-kotikov commented on a diff in the pull request:
https://github.com/apache/cordova-android/pull/295#discussion_r61388100
--- Diff: bin/templates/cordova/lib/prepare.js ---
@@ -84,29 +101,49 @@ function updateConfigFilesFrom(sourceConfig,
configMunger, locations) {
}
/**
+ * Logs all file operations via the verbose event stream, indented.
+ */
+function logFileOp(message) {
+ events.emit('verbose', ' ' + message);
+}
+
+/**
* Updates platform 'www' directory by replacing it with contents of
* 'platform_www' and app www. Also copies project's overrides' folder
into
* the platform 'www' folder
*
* @param {Object} cordovaProject An object which describes cordova
project.
- * @param {Object} destinations An object that contains destination
- * paths for www files.
*/
-function updateWwwFrom(cordovaProject, destinations) {
- shell.rm('-rf', destinations.www);
- shell.mkdir('-p', destinations.www);
- // Copy source files from project's www directory
- shell.cp('-rf', path.join(cordovaProject.locations.www, '*'),
destinations.www);
- // Override www sources by files in 'platform_www' directory
- shell.cp('-rf', path.join(destinations.platformWww, '*'),
destinations.www);
+function updateWww(cordovaProject) {
+ var sourceDirs = [
+ path.relative(cordovaProject.root, cordovaProject.locations.www),
+ path.relative(cordovaProject.root, this.locations.platformWww)
+ ];
// If project contains 'merges' for our platform, use them as another
overrides
var merges_path = path.join(cordovaProject.root, 'merges', 'android');
if (fs.existsSync(merges_path)) {
events.emit('verbose', 'Found "merges" for android platform.
Copying over existing "www" files.');
- var overrides = path.join(merges_path, '*');
- shell.cp('-rf', overrides, destinations.www);
+ sourceDirs.push(path.join('merges', 'android'));
}
+
+ var targetDir = path.relative(cordovaProject.root, this.locations.www);
+ events.emit(
+ 'verbose', "Merging and updating files from [" +
sourceDirs.join(", ") + "] to " + targetDir);
+ FileUpdater.mergeAndUpdateDir(
+ sourceDirs, targetDir, { rootDir: cordovaProject.root },
logFileOp);
+}
+
+/**
+ * Cleans all files from the platform 'www' directory.
+ */
+function cleanWww(projectRoot) {
+ var targetDir = path.relative(projectRoot, this.locations.www);
+ events.emit('verbose', "Cleaning " + targetDir);
+
+ // No source paths are specified, so mergeAndUpdateDir() will clear
the target directory.
+ FileUpdater.mergeAndUpdateDir(
+ [], targetDir, { rootDir: projectRoot, all: true }, logFileOp);
--- End diff --
Passing logger function here would produce a lot of output if `www`
contains a lot of files. IMO everything that end user would need to know is
that we're going to wipe all `www` contents
> Preparing platforms should skip copying files which haven't changed
> -------------------------------------------------------------------
>
> Key: CB-11117
> URL: https://issues.apache.org/jira/browse/CB-11117
> Project: Apache Cordova
> Issue Type: Improvement
> Components: Android, iOS, Windows
> Reporter: Jason Ginchereau
> Assignee: Jason Ginchereau
>
> Many cordova CLI commands include a "prepare" operation, including 'cordova
> build', 'cordova run', 'cordova plugin add', and more. Every time each of
> those commands runs, the target platform is "prepared", which involves
> copying all files from the [<project>/www,
> <project>/platforms/<platform>/platform_www, <project>/merges/<platform>] to
> the platform's target www folder, as well as copying a bunch of icons and
> splash screens to platform-specific locations.
> For the very first prepare of a platform, all that file copying is necessary.
> But most of the time after that most of the files being copied have not
> changed and therefore don't really need to be copied again. So the typical
> developer inner loop (edit a few source files, build and run the app, repeat)
> is a lot slower than it could be for a Cordova project, especially one that
> includes a significant number of source files or resources.
> Instead, Cordova should be smart enough to skip copying of files that haven't
> changed, based on their last-modified timestamp. (But also there should still
> be a way to force a clean/full/non-incremental build if desired.)
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]