12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- /*
- * grunt-contrib-copy
- * http://gruntjs.com/
- *
- * Copyright (c) 2013 Chris Talkington, contributors
- * Licensed under the MIT license.
- * https://github.com/gruntjs/grunt-contrib-copy/blob/master/LICENSE-MIT
- */
- module.exports = function(grunt) {
- 'use strict';
- var path = require('path');
- var fs = require('fs');
- grunt.registerMultiTask('copy', 'Copy files.', function() {
- var kindOf = grunt.util.kindOf;
- var options = this.options({
- encoding: grunt.file.defaultEncoding,
- // processContent/processContentExclude deprecated renamed to process/noProcess
- processContent: false,
- processContentExclude: [],
- mode: false
- });
- var copyOptions = {
- encoding: options.encoding,
- process: options.process || options.processContent,
- noProcess: options.noProcess || options.processContentExclude,
- };
- var dest;
- var isExpandedPair;
- var tally = {
- dirs: 0,
- files: 0
- };
- this.files.forEach(function(filePair) {
- isExpandedPair = filePair.orig.expand || false;
- filePair.src.forEach(function(src) {
- if (detectDestType(filePair.dest) === 'directory') {
- dest = (isExpandedPair) ? filePair.dest : unixifyPath(path.join(filePair.dest, src));
- } else {
- dest = filePair.dest;
- }
- if (grunt.file.isDir(src)) {
- grunt.verbose.writeln('Creating ' + dest.cyan);
- grunt.file.mkdir(dest);
- tally.dirs++;
- } else {
- grunt.verbose.writeln('Copying ' + src.cyan + ' -> ' + dest.cyan);
- grunt.file.copy(src, dest, copyOptions);
- if (options.mode !== false) {
- fs.chmodSync(dest, (options.mode === true) ? fs.lstatSync(src).mode : options.mode);
- }
- tally.files++;
- }
- });
- });
- if (tally.dirs) {
- grunt.log.write('Created ' + tally.dirs.toString().cyan + ' directories');
- }
- if (tally.files) {
- grunt.log.write((tally.dirs ? ', copied ' : 'Copied ') + tally.files.toString().cyan + ' files');
- }
- grunt.log.writeln();
- });
- var detectDestType = function(dest) {
- if (grunt.util._.endsWith(dest, '/')) {
- return 'directory';
- } else {
- return 'file';
- }
- };
- var unixifyPath = function(filepath) {
- if (process.platform === 'win32') {
- return filepath.replace(/\\/g, '/');
- } else {
- return filepath;
- }
- };
- };
|