Steve Appling wrote:
I worked for a couple of days on adding copy to FileCollections, but
I'm not going to have time to do what I originally intended. There
are a couple of issues:
1) FileCollections in general don't have access to an appropriate
FileResolver to resolve the relative paths that might be used as the
destination of a copy. I handled this in FileSet by making a
Project.fileSet method (like the files method).
I think we should do this, regardless of what we do with copy. Any
chance you could check that in?
I think we need to work on our terminology:
- A FileCollection is really a set of files. I called it FileCollection
because FileSet was already taken.
- A FileSet is really a hierarchy or tree of files. We called it a
FileSet because Ant does.
- I recently added a FileTree interface to represent the concept of a
file hierarchy. I'm not really happy with this name.
I wonder if we should:
- Rename FileCollection to FileSet
- Rename Project.fileSet() to fileTree() or even tree()
- Move what is FileSet into the internal packages and rename it to
DefaultFileTree
- Do something with the name of FileTree
It could construct a FileSet with the project's FileResolver.
Changing the path of construction for all the other types of
FileCollections was more involved and I don't have time right now.
2) Copying a FileCollection generically is a little difficult just
because of the nature of the FileCollection interface. I think this
interface may need to work a little differently to have these
collections combine and nest properly.
For example:
def fs= fileSet(from:'src', include:'**/*.java')
fs.copy(into:'dest')
You would expect this to copy a tree from under 'src' to a tree under
'dest'.
If you copy a general FileCollection, however, it will be flattened
into the destination:
files('src/a.java', 'src/org/gradle/b.java').copy(into:'dest')
What would you expect if these were combined?
files('src/a.java', 'src/org/gradle/b.java', fs).copy(into:'dest').
I would like to be able to copy the tree structure from the FileSet
into the destination even if it is accessed as part of a
FileCollection, but I'm not sure how to accomplish this now.
In this instance, something like: PathResolvingFileCollection.copy()
should delegate to the copy() method of any nested FileCollections it
contains. Similarly, CompositeFileCollection should do the same, and
FileSet should have its own copy() method which maintains the hierarchy.
Or, more generically, move the visiting from CopyActionImpl to
FileCollection, and do something like the above for the various visit()
implementations (I think this would be really useful).
It needs some more thought, so I am going to shelve some of the
changes I made to work towards this.
I do have a working implementation of FileSet.copy, but I don't know
how useful that would be. You can already do the same things with
AbstractProject.copy. Should I check this in?
I would like to make AbstractProject.copy official and move it up to
Project. Is this OK?
I think so.
Adam
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email