[
https://issues.apache.org/jira/browse/CB-11117?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15263040#comment-15263040
]
ASF GitHub Bot commented on CB-11117:
-------------------------------------
Github user jasongin commented on a diff in the pull request:
https://github.com/apache/cordova-android/pull/295#discussion_r61504885
--- 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 --
I was mostly going for consistent logging: why log some file operations but
not others? Our customer feedback indicates they would like more visibility
into the cordova build process, and this kind of verbose logging will help with
that.
Anyway this is going away now that I'm removing the clean function.
> 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]