[ 
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]

Reply via email to