Moving batches of files with Rake

P

Phrogz

I'm comparing Rake and NAnt for our pseudo-build process needs. I've
written the NAnt build file, and now I'm trying to port it (directly
at first) to Rake.

NAnt has a 'move' task for moving batches of files to a new directory.
By default, if you list specific files that don't exist, they are
ignored (not errored). Here's an example of the NAnt section I'm
trying to recreate:

<move todir="${path.intermediate}">
<fileset>
<include name="${dae}" />
<include name="${presentation_name}_org.bgf" />
</fileset>
</move>
<move todir="${path.data}">
<fileset basedir="${path.dae}">
<include name="${presentation_name}.bgf" />
<include name="${presentation_name}.nif" />
<include name="*.bvs" />
<include name="*.lua" />
</fileset>
</move>

Is there a built-in method for doing something like this (using
FileSet perhaps) that I'm not seeing in Rake? If not, does someone
else have a pre-built method that does this?
 
J

Jim Weirich

Gavin said:
I'm comparing Rake and NAnt for our pseudo-build process needs. I've
written the NAnt build file, and now I'm trying to port it (directly
at first) to Rake.

NAnt has a 'move' task for moving batches of files to a new directory.
By default, if you list specific files that don't exist, they are
ignored (not errored). Here's an example of the NAnt section I'm
trying to recreate:

<move todir="${path.intermediate}">
<fileset>
<include name="${dae}" />
<include name="${presentation_name}_org.bgf" />
</fileset>
</move>
<move todir="${path.data}">
<fileset basedir="${path.dae}">
<include name="${presentation_name}.bgf" />
<include name="${presentation_name}.nif" />
<include name="*.bvs" />
<include name="*.lua" />
</fileset>
</move>

Is there a built-in method for doing something like this (using
FileSet perhaps) that I'm not seeing in Rake? If not, does someone
else have a pre-built method that does this?

Use a file list to build up your list of files. Eg.

DAE_FILES = FileList[DAE, "#{PRESENTATION_NAME}_org.pgf"]

Then just use a mv command. Unfortunately, using mv with a file list
seems to require an explicit 'to_a' call. That shouldn't be the case
(I'll see if I can fix that in an update).

Example:

task :move_files do
mv DAE_FILES.to_a, PATH_INTERMEDIATE
end

If you don't want errors on non-existent files, you can filter them out:

task :move_files do
mv DAE_FILES.select { |fn| File.exist?(fn) }.to_a,
PATH_INTERMEDIATE
end

Wordy, but it works.

-- Jim Weirich
 
J

Jim Weirich

Jim Weirich wrote:
[...]
(I'll see if I can fix that in an update).\

I just created a beta version of Rake that supports this. You can now
say:

task :move_files do
mv DAE_FILES.existing, PATH_INTERMEDIATE
end

FileLists now support an 'existing' method which returns a filelist
containing on ly existing file names. (There is also an existing!
method that does the same thing to the existing file list). Also,
FileLists can now be passed directly to FileUtils methods just like
arrays.

If you want to try the beta version, do:

gem install rake --source http://onestepback.org/betagems

-- Jim Weirich
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,982
Messages
2,570,189
Members
46,734
Latest member
manin

Latest Threads

Top