[GRADLE-3397] Copy spec source order not preserved when mixing root and child specs Created: 10/Feb/16  Updated: 10/Feb/17  Resolved: 10/Feb/17

Status: Resolved
Project: Gradle
Affects Version/s: None
Fix Version/s: None

Type: Bug
Reporter: Mark Vieira (Inactive) Assignee: Unassigned
Resolution: Won't Fix Votes: 0


 Description   

This issue was originally reported on the forums: https://discuss.gradle.org/t/multiple-from-statements-in-copy-not-evaluated-in-order/14246

Hello, I am trying to merge multiple files from different directories into one target location (excluding duplicates.. the first one copied should win). I've noticed that if you include a closure within your from method, the order of from statements may execute randomly.

The following is a code example. When I run the 'debug' task, I would expect all the outputs to have the file from folder a. Curiously though.. out2 has the file from folder b. So it appears within out2, folder b is copied before folder a (even though a is specified first).

FYI... I am using gradle version 2.10

*Output:*
out1: I am file a!
out2: I am file b!
out3: I am file a!
out4: I am file a!

    task init << {
            mkdir('a')
            def file1 = file('a/test.txt')
            file1.text = "I am file a!"

            mkdir('b')
            def file2 = file('b/test.txt')
            file2.text = "I am file b!"
    }

    task run(dependsOn: 'init') << {

            copy {
                    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
                    from('a')
                    from('b')
                    into 'out1'
            }

            copy {
                    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
                    from('a') {
                            include "test.txt"
                    }
                    from('b')
                    into 'out2'
            }

            copy {
                    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
                    from('a')
                    from('b') {
                            include "test.txt"
                    }
                    into 'out3'
            }

            copy {
                    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
                    from('a') {
                            include "test.txt"
                    }
                    from('b') {
                            include "test.txt"
                    }
                    into 'out4'
            }
     }

    task debug(dependsOn: 'run') << {
            println "out1: " + file('out1/test.txt').text
            println "out2: " + file('out2/test.txt').text
            println "out3: " + file('out3/test.txt').text
            println "out4: " + file('out4/test.txt').text
    }


 Comments   
Comment by Benjamin Muschko [ 15/Nov/16 ]

As announced on the Gradle blog we are planning to completely migrate issues from JIRA to GitHub.

We intend to prioritize issues that are actionable and impactful while working more closely with the community. Many of our JIRA issues are inactionable or irrelevant. We would like to request your help to ensure we can appropriately prioritize JIRA issues you’ve contributed to.

Please confirm that you still advocate for your JIRA issue before December 10th, 2016 by:

  • Checking that your issues contain requisite context, impact, behaviors, and examples as described in our published guidelines.
  • Leave a comment on the JIRA issue or open a new GitHub issue confirming that the above is complete.

We look forward to collaborating with you more closely on GitHub. Thank you for your contribution to Gradle!

Comment by Benjamin Muschko [ 10/Feb/17 ]

Thanks again for reporting this issue. We haven't heard back from you after our inquiry from November 15th. We are closing this issue now. Please create an issue on GitHub if you still feel passionate about getting it resolved.

Generated at Wed Jun 30 12:47:44 CDT 2021 using Jira 8.4.2#804003-sha1:d21414fc212e3af190e92c2d2ac41299b89402cf.