Adam Murdoch wrote:
Adam Murdoch wrote:
- hide quoted text -- show quoted text -
Hi,
Would you expect the following to pass?
given:
file("a/b.txt") << "\$foo"
when:
buildScript """
task c(type: Copy) {
from("a") {
filesMatching("b.txt") {
expand foo: "bar"
}
into "nested"
}
into "out"
}
"""
then:
succeeds "c"
and:
file("out/nested/b.txt").text == "bar"
It doesn't. It turns out that filesMatching matches the relative
destination path, so it needs to be filesMatching("nested/b.txt"). I
find this a little surprising.
It seems like it would be more predictable to use the relative path
to the file from the nearest 'from' statement. What's the rationale
for the current behaviour?
It’s just a bug, I would think. The pattern should be relative to the
source path, not the destination path. An interesting question is
what to do with those files whose name is transformed in some way (eg
using rename()) - is the pattern applied before or after transformation?
Looks like we explicitly wanted post rename:
https://github.com/gradle/gradle/blob/master/subprojects/core/src/integTest/groovy/org/gradle/api/tasks/CopyTaskIntegrationTest.groovy#L490
I think this is the wrong way to go. I can see that in some cases it
is useful, but I find it far harder to reason about than just applying
to the source path. Using the source location seems less surprising to
me too.
Ok, now I'm not so sure. To break it down:
Source path matching:
* pro: predictable, easier to reason about
* pro: makes sense in nested specs
* con: doesn't chain
* con: can cause duplication if pulling files from multiple locations
* con: breaking change
Destination path matching:
* pro: supports chaining
* pro: simpler if destination is determining factor
* con: makes little sense in nested specs
* con: impossible to use source location as determining factor
* con: not the least surprising behaviour
I think the decisive factor for me is that using destination path
matching, using filesMatching in a nested spec is weird. Also, using
source path matching is more flexible.
I've got the change ready to go to move to source path matching, but
need some confirmation that we want to make the switch.
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email