¿Cómo obtener llamadas de FileUtils para generar sus acciones en un filtro de rastrillo?
Pregunta
Tengo un filtro de rastrillo que, en mi propia instalación de Ruby 1.9.3, genera correctamente el equivalente de shell Unix cuando uso un método FileUtils como cp
, mkdir
etc.
Sin embargo, en el stock Ruby que se envía con Mac OS X (específicamente 10.5), que es la versión 1.8.6, no hacen esto.
Me gustaría que emitieran los comandos a medida que se realizan. ¿Hay alguna forma de habilitar esto en el 1.8.6 Ruby de OS X, sin agregar? :verbose => true
a cada llamada? (Que puede que ni siquiera funcione).
El filtro de rastrillo en cuestión es: https://github.com/dpkendal/tools-osx/blob/master/rakefile
Solución
Eso no tiene sentido. 1.9.3 no debe hacer :verbose
a menos que se le digas explícitamente que lo haga. Puede ver la implementación de mkdir
En el 1.9.3 lib, por ejemplo:
def mkdir(list, options = {})
fu_check_options options, OPT_TABLE['mkdir']
list = fu_list(list)
fu_output_message "mkdir #{options[:mode] ? ('-m %03o ' % options[:mode]) : ''}#{list.join ' '}" if options[:verbose]
return if options[:noop]
list.each do |dir|
fu_mkdir dir, options[:mode]
end
end
Ahí puede ver que el mensaje no se genera a menos que el :verbose
La opción se suministra explícitamente.
Sin embargo para habilitar :verbose
a través de todos FileUtils
métodos que puedes simplemente include FileUtils::Verbose
en tu espacio de nombres. Esto funciona tanto en 1.8 como en 1.9 Ruby:
irb(main):001:0> RUBY_VERSION
=> "1.8.7"
irb(main):002:0> include FileUtils::Verbose
=> Object
irb(main):003:0> mkdir 'fooof'
mkdir fooof
=> ["fooof"]
Por cierto, podría ser que Rake ya haga esto en 1.9.3, lo que explicaría por qué hace lo que hace en 1.9.3 y no en 1.8.6. No verifiqué esto, pero esa es la única explicación en la que puedo pensar.
Rake proporciona su propia extensión de FileUtils llamada Rake::FileUtilsExt
. Este módulo tiene un verbose
bandera. Para activarlo, simplemente agregue esto a la parte superior del archivo de rastrillo:
Rake::FileUtilsExt.verbose(true)