grunt-contrib-copy icon indicating copy to clipboard operation
grunt-contrib-copy copied to clipboard

copy overrides first file copied

Open DJohn001 opened this issue 9 years ago • 2 comments

Hello,

I'm new to Grunt so I'm now following a tutorial. There seems to be a problem with the ''copy'' extension. At first I thought I was doing something wrong, but after the following command: ''grunt copy --verbose'', I discovered it was not my fault but instead it seems to be a bug in ''copy''. I could not find a bug code. I hope someone can help with this.

Thanks in advance,

Here is my grunt config under windows 10:


module.exports = function(grunt)
{

    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),

        chmod: {

            target1:{
                options:{
                    mode: '666'
                },
                src: [
                        'webroot/', 
                        '<%= pkg.webdir%>', 
                        '<%= pkg.webdir%>/*',
                    ]
            },
            target2: {
                options: {
                    mode: '666'
                },
                src: [
                        'webroot', 
                        'webroot/*', 
                        'webroot/resources/assets/js/app/*', 
                        'webroot/resources/assets/js/*',


                            'resources/assets/js/app/**',
                            'resources/assets/js/**',
                            'resources/assets/js/lib/requirejs/*',
                            'resources/assets/js/lib/jquery/dist/*',
                            'resources/assets/js/lib/bootstrap/dist/js/*',
                            'resources/assets/js/lib/bootstrap/js/*'
                    ]
            }
        },
        clean: {
            src: ['<%= pkg.webAssetsDir %>/*']
        },
        copy:{
            scripts: {
                files: [
                    {
                        expend: true,
                        mode: '666',
                        src: ['<%= pkg.srcAssetsDir%>/js/app/*',
                            '<%= pkg.srcAssetsDir%>/js/requirejs.config.js',
                            '<%= pkg.srcAssetsDir%>/js/lib/requirejs/require.js',
                            '<%= pkg.srcAssetsDir%>/js/lib/jquery/dist/jquery.js',
                            '<%= pkg.srcAssetsDir%>/js/lib/bootstrap/dist/js/bootstrap.js',
                            '<%= pkg.srcAssetsDir%>/js/lib/bootstrap/js/*'
                        ],
                        dest: '<%= pkg.webdir%>/'
                    }
                ]
            },
            extra: {
                files: [
                    {
                        expend: true,
                        flatten: true,
                        mode: '666',
                        src: ['<%= pkg.srcAssetsDir%>/images/*'],
                        dest: '<%= pkg.webAssetsDir%>/images/'
                    },
                    {
                        expend: true,
                        flatten: true,
                        mode: '666',
                        src: [
                            '<%= pkg.srcAssetsDir%>/fonts/*',
                            '<%= pkg.srcAssetsDir%>/js/lib/bootstrap/fonts/*'
                            ],
                        dest: '<%= pkg.webAssetsDir%>/fonts/'
                    },
                ]
            }
        },
        uglify:{
            options:{
                preserveComments: false
            },
            build:{
                files:[
                    {
                        expend: true,
                        cwd: '<%= pkg.webAssetsDir%>/js/',
                        src: ['**/*.js'],
                        dest: '<%= pkg.webAssetsDir%>/js/'
                    }
                ]
            }
        },
        less:{
            bootstrap: {
                options: {
                    paths: ['<%= pkg.srcAssetsDir%>/less/']
                },
                files: {
                    '<%= pkg.srcAssetsDir%>/css/bootstrap.css':'<%= pkg.srcAssetsDir%>/less/bootstrap.less'
                }
            }
        },
        cssmin:{
            combine: {
                options: {
                    keepSpecialComments: 0
                },
                files: {
                    '<%= pkg.webAssetsDir%>/css/main.css': [
                        '<%= pkg.srcAssetsDir%>/css/*'
                    ]
                }
            }
        },
        watch: {
            scripts: {
                files: [
                    '<%= pkg.srcAssetsDir%>/js/*',
                    '!<%= pkg.srcAssetsDir%>/js/lib/*'
                ],
                tasks: ['chmod', 'copy:scripts']
            },
            styles: {
                files: [
                    '<%= pkg.srcAssetsDir%>/less/*',
                    '<%= pkg.srcAssetsDir%>/css/*'
                ],
                tasks: ['less', 'cssmin']
            },
            extra: {
                files: [
                    '<%= pkg.srcAssetsDir%>/images/*',
                    '<%= pkg.srcAssetsDir%>/fonts/*'
                ],
                tasks: ['chmod', 'copy:extra']
            }
        }
    });


    grunt.loadNpmTasks('grunt-contrib-copy');
    grunt.loadNpmTasks('grunt-contrib-clean');
    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.loadNpmTasks('grunt-contrib-less');
    grunt.loadNpmTasks('grunt-contrib-cssmin');
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-chmod');

    grunt.registerTask('default', ['clean', 'chmod', 'copy', 'uglify', 'less', 'cssmin']);
};

and here is the verbose message:

Running "copy:scripts" (copy) task
Verifying property copy.scripts exists in config...OK
Files: resources/assets/js/app/app.js, resources/assets/js/app/index.main.js, resources/assets/js/lib/requirejs/require.js, resources/assets/js/lib/jquery/dist/jquery.js, resources/assets/js/lib/bootstrap/dist/js/bootstrap.js, resources/assets/js/lib/bootstrap/js/affix.js, resources/assets/js/lib/bootstrap/js/alert.js, resources/assets/js/lib/bootstrap/js/button.js, resources/assets/js/lib/bootstrap/js/carousel.js, resources/assets/js/lib/bootstrap/js/collapse.js, resources/assets/js/lib/bootstrap/js/dropdown.js, resources/assets/js/lib/bootstrap/js/modal.js, resources/assets/js/lib/bootstrap/js/popover.js, resources/assets/js/lib/bootstrap/js/scrollspy.js, resources/assets/js/lib/bootstrap/js/tab.js, resources/assets/js/lib/bootstrap/js/tooltip.js, resources/assets/js/lib/bootstrap/js/transition.js -> webroot/
Options: encoding="utf8", processContent=false, processContentExclude=[], timestamp=false, mode=false
Copying resources/assets/js/app/app.js -> webroot\resources\assets\js\app\app.js
Reading resources/assets/js/app/app.js...OK
Writing webroot\resources\assets\js\app\app.js...OK
Copying resources/assets/js/app/index.main.js -> webroot/resources/assets/js/app/app.js
Reading resources/assets/js/app/index.main.js...OK
Writing webroot/resources/assets/js/app/app.js...OK
Copying resources/assets/js/lib/requirejs/require.js -> webroot/resources/assets/js/app/app.js
Reading resources/assets/js/lib/requirejs/require.js...OK
Writing webroot/resources/assets/js/app/app.js...OK
Copying resources/assets/js/lib/jquery/dist/jquery.js -> webroot/resources/assets/js/app/app.js
Reading resources/assets/js/lib/jquery/dist/jquery.js...OK
Writing webroot/resources/assets/js/app/app.js...OK
Copying resources/assets/js/lib/bootstrap/dist/js/bootstrap.js -> webroot/resources/assets/js/app/app.js
Reading resources/assets/js/lib/bootstrap/dist/js/bootstrap.js...OK
Writing webroot/resources/assets/js/app/app.js...OK
Copying resources/assets/js/lib/bootstrap/js/affix.js -> webroot/resources/assets/js/app/app.js
Reading resources/assets/js/lib/bootstrap/js/affix.js...OK
Writing webroot/resources/assets/js/app/app.js...OK
Copying resources/assets/js/lib/bootstrap/js/alert.js -> webroot/resources/assets/js/app/app.js
Reading resources/assets/js/lib/bootstrap/js/alert.js...OK
Writing webroot/resources/assets/js/app/app.js...OK
Copying resources/assets/js/lib/bootstrap/js/button.js -> webroot/resources/assets/js/app/app.js
Reading resources/assets/js/lib/bootstrap/js/button.js...OK
Writing webroot/resources/assets/js/app/app.js...OK
Copying resources/assets/js/lib/bootstrap/js/carousel.js -> webroot/resources/assets/js/app/app.js
Reading resources/assets/js/lib/bootstrap/js/carousel.js...OK
Writing webroot/resources/assets/js/app/app.js...OK
Copying resources/assets/js/lib/bootstrap/js/collapse.js -> webroot/resources/assets/js/app/app.js
Reading resources/assets/js/lib/bootstrap/js/collapse.js...OK
Writing webroot/resources/assets/js/app/app.js...OK
Copying resources/assets/js/lib/bootstrap/js/dropdown.js -> webroot/resources/assets/js/app/app.js
Reading resources/assets/js/lib/bootstrap/js/dropdown.js...OK
Writing webroot/resources/assets/js/app/app.js...OK
Copying resources/assets/js/lib/bootstrap/js/modal.js -> webroot/resources/assets/js/app/app.js
Reading resources/assets/js/lib/bootstrap/js/modal.js...OK
Writing webroot/resources/assets/js/app/app.js...OK
Copying resources/assets/js/lib/bootstrap/js/popover.js -> webroot/resources/assets/js/app/app.js
Reading resources/assets/js/lib/bootstrap/js/popover.js...OK
Writing webroot/resources/assets/js/app/app.js...OK
Copying resources/assets/js/lib/bootstrap/js/scrollspy.js -> webroot/resources/assets/js/app/app.js
Reading resources/assets/js/lib/bootstrap/js/scrollspy.js...OK
Writing webroot/resources/assets/js/app/app.js...OK
Copying resources/assets/js/lib/bootstrap/js/tab.js -> webroot/resources/assets/js/app/app.js
Reading resources/assets/js/lib/bootstrap/js/tab.js...OK
Writing webroot/resources/assets/js/app/app.js...OK
Copying resources/assets/js/lib/bootstrap/js/tooltip.js -> webroot/resources/assets/js/app/app.js
Reading resources/assets/js/lib/bootstrap/js/tooltip.js...OK
Writing webroot/resources/assets/js/app/app.js...OK
Copying resources/assets/js/lib/bootstrap/js/transition.js -> webroot/resources/assets/js/app/app.js
Reading resources/assets/js/lib/bootstrap/js/transition.js...OK
Writing webroot/resources/assets/js/app/app.js...OK
Copied 17 files

Running "copy:extra" (copy) task
Verifying property copy.extra exists in config...OK
Files: [no src] -> webroot/resources/assets/images/
Files: resources/assets/js/lib/bootstrap/fonts/glyphicons-halflings-regular.eot, resources/assets/js/lib/bootstrap/fonts/glyphicons-halflings-regular.svg, resources/assets/js/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf, resources/assets/js/lib/bootstrap/fonts/glyphicons-halflings-regular.woff, resources/assets/js/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2 -> webroot/resources/assets/fonts/
Options: encoding="utf8", processContent=false, processContentExclude=[], timestamp=false, mode=false
Copying resources/assets/js/lib/bootstrap/fonts/glyphicons-halflings-regular.eot -> webroot\resources\assets\fonts\resources\assets\js\lib\bootstrap\fonts\glyphicons-halflings-regular.eot
Reading resources/assets/js/lib/bootstrap/fonts/glyphicons-halflings-regular.eot...OK
Writing webroot\resources\assets\fonts\resources\assets\js\lib\bootstrap\fonts\glyphicons-halflings-regular.eot...OK
Copying resources/assets/js/lib/bootstrap/fonts/glyphicons-halflings-regular.svg -> webroot/resources/assets/fonts/resources/assets/js/lib/bootstrap/fonts/glyphicons-halflings-regular.eot
Reading resources/assets/js/lib/bootstrap/fonts/glyphicons-halflings-regular.svg...OK
Writing webroot/resources/assets/fonts/resources/assets/js/lib/bootstrap/fonts/glyphicons-halflings-regular.eot...OK
Copying resources/assets/js/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf -> webroot/resources/assets/fonts/resources/assets/js/lib/bootstrap/fonts/glyphicons-halflings-regular.eot
Reading resources/assets/js/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf...OK
Writing webroot/resources/assets/fonts/resources/assets/js/lib/bootstrap/fonts/glyphicons-halflings-regular.eot...OK
Copying resources/assets/js/lib/bootstrap/fonts/glyphicons-halflings-regular.woff -> webroot/resources/assets/fonts/resources/assets/js/lib/bootstrap/fonts/glyphicons-halflings-regular.eot
Reading resources/assets/js/lib/bootstrap/fonts/glyphicons-halflings-regular.woff...OK
Writing webroot/resources/assets/fonts/resources/assets/js/lib/bootstrap/fonts/glyphicons-halflings-regular.eot...OK
Copying resources/assets/js/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2 -> webroot/resources/assets/fonts/resources/assets/js/lib/bootstrap/fonts/glyphicons-halflings-regular.eot
Reading resources/assets/js/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2...OK
Writing webroot/resources/assets/fonts/resources/assets/js/lib/bootstrap/fonts/glyphicons-halflings-regular.eot...OK
Copied 5 files

Done, without errors.

DJohn001 avatar Jul 31 '15 17:07 DJohn001

hello guys,

I've created a fix:

change copy.js line @44 to @54

      var dest = filePair.dest;
      isExpandedPair = filePair.orig.expand || false;

      filePair.src.forEach(function(src) {
        src = unixifyPath(src);
        dest = unixifyPath(dest);

        if (detectDestType(dest) === 'directory') {
          dest = (isExpandedPair) ? dest : path.join(dest, src);
        }

to this:

        _dest = unixifyPath(_dest);

        var dest = (isExpandedPair) ? dest : path.join(_dest, src);

DJohn001 avatar Jul 31 '15 21:07 DJohn001

Not just that but for me the content of the first file is copied to the second file. Going back to 0.7.0 fixes it.

reppners avatar Aug 12 '15 07:08 reppners