[ https://issues.apache.org/jira/browse/CB-11117?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15248690#comment-15248690 ]
ASF GitHub Bot commented on CB-11117: ------------------------------------- Github user omefire commented on a diff in the pull request: https://github.com/apache/cordova-lib/pull/429#discussion_r60314872 --- Diff: cordova-common/src/FileUpdater.js --- @@ -0,0 +1,389 @@ +/** + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +"use strict"; + +var fs = require("fs"); +var path = require("path"); +var shell = require("shelljs"); +var minimatch = require("minimatch"); + +/** + * Updates a target file or directory with a source file or directory. (Directory updates are + * not recursive.) Stats for target and source items must be passed in. This is an internal + * helper function used by other methods in this module. + * + * @param {string|null} rootDir Root directory (such as a project) to which target and source + * path parameters are relative, or null if the paths are absolute. The rootDir is omitted + * from any logged paths, to make the logs easier to read. + * @param {string} targetPath Destination file or directory to be updated. If it does not exist, + * it will be created. + * @param {fs.Stats|null} targetStats An instance of fs.Stats for the target path, or null if + * the target does not exist. + * @param {string|null} sourcePath Source file or directory to be used to update the + * destination. If the source is null, then the destination is deleted if it exists. + * @param {fs.Stats|null} sourceStats An instance of fs.Stats for the source path, or null if + * the source does not exist. + * @param {boolean} force If target and source are both files, and the force flag is not + * set, then the file will not be copied unless the source is newer than the target. + * @param {function} [log] Optional logging callback that takes a string message describing any + * file operations that are performed. + * @return {boolean} true if any changes were made, or false if the force flag is not set + * and everything was up to date + */ +function updatePathWithStats( + rootDir, targetPath, targetStats, sourcePath, sourceStats, force, log) { + log = log || function(message) { }; --- End diff -- If no 'log' is specified, we should log to the console. > 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: issues-unsubscr...@cordova.apache.org For additional commands, e-mail: issues-h...@cordova.apache.org