Как получить вызовы fileutils для вывода своих действий в Rakefile? - PullRequest
1 голос
/ 12 января 2012

У меня есть Rakefile, который в моей собственной сборке Ruby 1.9.3 правильно выводит эквивалент оболочки Unix, когда я использую метод FileUtils, такой как cp, mkdir и т. Д.

Однако на стандартной Ruby, которая поставляется с Mac OS X (в частности, 10.5), которая является версией 1.8.6, они этого не делают.

Я бы хотел, чтобы они выводили команды по мере их выполнения. Есть ли способ включить это в 1.8.6 Ruby в OS X, кроме добавления :verbose => true к каждому вызову? (Что может даже не работать.)

Rake-файл, о котором идет речь: https://github.com/dpkendal/tools-osx/blob/master/Rakefile

1 Ответ

1 голос
/ 12 января 2012

Это не имеет смысла.1.9.3 не должен делать :verbose, если явно не сказано сделать это.Вы можете посмотреть на реализацию mkdir в библиотеке 1.9.3, например:

  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

Там вы можете увидеть, что сообщение не генерируется, если не указана опция :verbose.

Однако, чтобы включить :verbose во всех FileUtils методах, вы можете просто include FileUtils::Verbose в свое пространство имен.Это работает как в 1.8, так и в 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"]

Кстати, возможно, Rake уже делает это в 1.9.3, что объясняет, почему он делает то, что делает в 1.9.3, а не в 1.8+0,6.Я не проверял это, но это единственное объяснение, которое я могу придумать.


Rake предоставляет свое собственное расширение FileUtils под названием Rake::FileUtilsExt.Этот модуль имеет флаг verbose.Для активации просто добавьте это в начало Рейк-файла:

Rake::FileUtilsExt.verbose(true)
...