Stefan wrote = /* I'm trying to write a custom copy task using scriptdef & ruby but I don't find the documentation I need. The script should (as an example) do the same as the copy task. How do I access the original file and the mapped file ? Like in this skeleton:
<scriptdef name="mycopy" language="ruby"> ??? </scriptdef> <mycopy> <fileset dir="." casesensitive="false"> <include name="MyFiles.*"/> </fileset> <mapper> <globmapper handledirsep="true" from="MyFiles.*" to="MyMappedFiles.*"/> </mapper> </mycopy> */ i did some quick hack and came up with = <?xml version="1.0" encoding="UTF-8"?> <project name="project" default="main"> <target name="depends"> <scriptdef name="mycopy" language="ruby"> <attribute name="fromdir"/> <attribute name="includes"/> <attribute name="destdir"/> <attribute name="namefrom"/> <attribute name="nameto"/> <![CDATA[ require 'fileutils' require 'find' fromdir=$attributes.get("fromdir") includes=$attributes.get("includes") destdir=$attributes.get("destdir") namefrom=$attributes.get("namefrom") nameto=$attributes.get("nameto") FileUtils.mkdir(destdir) unless File.exists?(destdir) # you need Dir.glob ... for use of include patterns # if you just want a recursive copy you simply use # FileUtils.cp_r("#{fromdir}/.", "#{destdir"}) Dir.glob("#{fromdir}/#{includes}").each do |source| file_name = File.basename(source) target_dir = File.dirname(source).sub(/#{fromdir}/,"#{destdir}") FileUtils.makedirs target_dir, :verbose => true FileUtils.cp source,target_dir +'/'+ file_name,:verbose => true end # the rename action goes here regexp = Regexp.new(namefrom) Find.find(destdir) do |file| # assuming you want to rename files only # instead when renaming dirs also just use # File.rename (file, ....) unless File.directory?(file) if file =~ /#{regexp}/ # testing with puts # puts "File = " + file.sub(/#{regexp}/, nameto) #the real work File.rename(file,file.sub(/#{regexp}/, nameto)) end end end ]]> </scriptdef> </target> <target name="main" depends="depends"> <mycopy fromdir="/home/gilreb/temp" includes="**/commons*" destdir="/home/gilreb/temp2" namefrom="commons" nameto="foobar" /> </target> </project> Maybe this snippet is enough to get you going. *** i used the jruby-complete-1.1.4.jar to have all the stuff at my fingertips, maybe the smaller jruby.jar is enough, don't know if fileutils/find are contained *** The recursive copy works fine, the rename actions has to be adapted to your needs, f.e. use another regexp or when up/downcase has to be fixed you go with File.rename(file,file.downcase)) ... etc. If you need more help, just let me/us know and provide more details. Regards, Gilbert [1] jruby-complete http://repository.codehaus.org/org/jruby/jruby-complete/1.1.4/jruby-complete-1.1.4.jar --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]