From f6d2b4858891376dec83e43dccfa028d4b32b184 Mon Sep 17 00:00:00 2001 From: hsbt Date: Sat, 6 Sep 2014 09:31:37 +0000 Subject: * lib/rake.rb, lib/rake/*, test/rake/*: Update latest rake master(e47d023) git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47433 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 4 ++++ lib/rake/cloneable.rb | 2 +- lib/rake/contrib/.document | 0 lib/rake/cpu_counter.rb | 3 ++- lib/rake/dsl_definition.rb | 1 + lib/rake/ext/pathname.rb | 25 +++++++++++++++++++++++++ lib/rake/ext/string.rb | 2 +- lib/rake/file_list.rb | 22 ++++++++++++++++++---- lib/rake/file_task.rb | 2 +- lib/rake/task_manager.rb | 2 +- test/rake/helper.rb | 10 ++++++---- test/rake/test_rake_directory_task.rb | 13 +++++++++++++ test/rake/test_rake_file_list.rb | 28 ++++++++++++++++++++++++++++ test/rake/test_rake_file_task.rb | 15 +++++++++++++++ test/rake/test_rake_pathname_extensions.rb | 15 +++++++++++++++ test/rake/test_rake_task_argument_parsing.rb | 10 ++++++++++ 16 files changed, 141 insertions(+), 13 deletions(-) create mode 100644 lib/rake/contrib/.document create mode 100644 lib/rake/ext/pathname.rb create mode 100644 test/rake/test_rake_pathname_extensions.rb diff --git a/ChangeLog b/ChangeLog index 0615dd79e8..f54009742b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Sat Sep 6 18:31:32 2014 SHIBATA Hiroshi + + * lib/rake.rb, lib/rake/*, test/rake/*: Update latest rake master(e47d023) + Sat Sep 6 16:38:08 2014 Masaki Suketa * ext/win32ole/win32ole_variant.c (ole_val2variant_err, diff --git a/lib/rake/cloneable.rb b/lib/rake/cloneable.rb index cd19cd3733..d53645f2f3 100644 --- a/lib/rake/cloneable.rb +++ b/lib/rake/cloneable.rb @@ -3,7 +3,7 @@ module Rake # Mixin for creating easily cloned objects. module Cloneable # :nodoc: - # The hook that invoked by 'clone' and 'dup' methods. + # The hook that is invoked by 'clone' and 'dup' methods. def initialize_copy(source) super source.instance_variables.each do |var| diff --git a/lib/rake/contrib/.document b/lib/rake/contrib/.document new file mode 100644 index 0000000000..e69de29bb2 diff --git a/lib/rake/cpu_counter.rb b/lib/rake/cpu_counter.rb index c05b69b7a7..d7c92a6cbe 100644 --- a/lib/rake/cpu_counter.rb +++ b/lib/rake/cpu_counter.rb @@ -38,7 +38,8 @@ module Rake count_via_win32 || count_via_sysctl || count_via_hwprefs_thread_count || - count_via_hwprefs_cpu_count + count_via_hwprefs_cpu_count || + count_via_cpuinfo end end end diff --git a/lib/rake/dsl_definition.rb b/lib/rake/dsl_definition.rb index 28e9631c3c..b521b7dc5c 100644 --- a/lib/rake/dsl_definition.rb +++ b/lib/rake/dsl_definition.rb @@ -98,6 +98,7 @@ module Rake def directory(*args, &block) # :doc: result = file_create(*args, &block) dir, _ = *Rake.application.resolve_args(args) + dir = Rake.from_pathname(dir) Rake.each_dir_parent(dir) do |d| file_create d do |t| mkdir_p t.name unless File.exist?(t.name) diff --git a/lib/rake/ext/pathname.rb b/lib/rake/ext/pathname.rb new file mode 100644 index 0000000000..49e2cd47ac --- /dev/null +++ b/lib/rake/ext/pathname.rb @@ -0,0 +1,25 @@ +require 'rake/ext/core' +require 'pathname' + +class Pathname + + rake_extension("ext") do + # Return a new Pathname with String#ext applied to it. + # + # This Pathname extension comes from Rake + def ext(newext='') + Pathname.new(Rake.from_pathname(self).ext(newext)) + end + end + + rake_extension("pathmap") do + # Apply the pathmap spec to the Pathname, returning a + # new Pathname with the modified paths. (See String#pathmap for + # details.) + # + # This Pathname extension comes from Rake + def pathmap(spec=nil, &block) + Pathname.new(Rake.from_pathname(self).pathmap(spec, &block)) + end + end +end diff --git a/lib/rake/ext/string.rb b/lib/rake/ext/string.rb index 34ee328f72..b47b055a74 100644 --- a/lib/rake/ext/string.rb +++ b/lib/rake/ext/string.rb @@ -49,7 +49,7 @@ class String end protected :pathmap_partial - # Preform the pathmap replacement operations on the given path. The + # Perform the pathmap replacement operations on the given path. The # patterns take the form 'pat1,rep1;pat2,rep2...'. # # This String extension comes from Rake diff --git a/lib/rake/file_list.rb b/lib/rake/file_list.rb index b01dbbb341..006ec7703e 100644 --- a/lib/rake/file_list.rb +++ b/lib/rake/file_list.rb @@ -49,7 +49,7 @@ module Rake # List of methods that should not be delegated here (we define special # versions of them explicitly below). - MUST_NOT_DEFINE = %w[to_a to_ary partition *] + MUST_NOT_DEFINE = %w[to_a to_ary partition * <<] # List of delegated methods that return new array values which need # wrapping. @@ -119,7 +119,7 @@ module Rake if fn.respond_to? :to_ary include(*fn.to_ary) else - @pending_add << fn + @pending_add << Rake.from_pathname(fn) end end @pending = true @@ -149,7 +149,7 @@ module Rake # def exclude(*patterns, &block) patterns.each do |pat| - @exclude_patterns << pat + @exclude_patterns << Rake.from_pathname(pat) end @exclude_procs << block if block_given? resolve_exclude unless @pending @@ -196,6 +196,12 @@ module Rake end end + def <<(obj) + resolve + @items << Rake.from_pathname(obj) + self + end + # Resolve all the pending adds now. def resolve if @pending @@ -346,7 +352,7 @@ module Rake # Should the given file name be excluded from the list? # - # NOTE: This method was formally named "exclude?", but Rails + # NOTE: This method was formerly named "exclude?", but Rails # introduced an exclude? method as an array method and setup a # conflict with file list. We renamed the method to avoid # confusion. If you were using "FileList#exclude?" in your user @@ -410,5 +416,13 @@ module Rake dir = File.dirname(dir) end end + + # Convert Pathname and Pathname-like objects to strings; + # leave everything else alone + def from_pathname(path) # :nodoc: + path = path.to_path if path.respond_to?(:to_path) + path = path.to_str if path.respond_to?(:to_str) + path + end end end # module Rake diff --git a/lib/rake/file_task.rb b/lib/rake/file_task.rb index 03e26d967b..11823bbe46 100644 --- a/lib/rake/file_task.rb +++ b/lib/rake/file_task.rb @@ -39,7 +39,7 @@ module Rake # Apply the scope to the task name according to the rules for this kind # of task. File based tasks ignore the scope when creating the name. def scope_name(scope, task_name) - task_name + Rake.from_pathname(task_name) end end end diff --git a/lib/rake/task_manager.rb b/lib/rake/task_manager.rb index af53e3f586..221c68cec4 100644 --- a/lib/rake/task_manager.rb +++ b/lib/rake/task_manager.rb @@ -35,7 +35,7 @@ module Rake task_name = task_class.scope_name(@scope, task_name) deps = [deps] unless deps.respond_to?(:to_ary) - deps = deps.map { |d| d.to_s } + deps = deps.map { |d| Rake.from_pathname(d).to_s } task = intern(task_class, task_name) task.set_arg_names(arg_names) unless arg_names.empty? if Rake::TaskManager.record_task_metadata diff --git a/test/rake/helper.rb b/test/rake/helper.rb index 74cab7559f..992c6bffae 100644 --- a/test/rake/helper.rb +++ b/test/rake/helper.rb @@ -2,7 +2,7 @@ require 'rubygems' $:.unshift File.expand_path('../../lib', __FILE__) begin - gem 'minitest' + gem 'minitest', '~> 4' rescue Gem::LoadError end @@ -11,13 +11,15 @@ require 'rake' require 'tmpdir' require File.expand_path('../file_creation', __FILE__) -require_relative 'support/ruby_runner' -require_relative 'support/rakefile_definitions' begin require_relative '../ruby/envutil' + require_relative 'support/ruby_runner' + require_relative 'support/rakefile_definitions' rescue NoMethodError, LoadError - # for ruby trunk + # ruby 1.8 + require 'test/support/ruby_runner' + require 'test/support/rakefile_definitions' end class Rake::TestCase < MiniTest::Unit::TestCase diff --git a/test/rake/test_rake_directory_task.rb b/test/rake/test_rake_directory_task.rb index c8275e6d10..0014d1c158 100644 --- a/test/rake/test_rake_directory_task.rb +++ b/test/rake/test_rake_directory_task.rb @@ -1,5 +1,6 @@ require File.expand_path('../helper', __FILE__) require 'fileutils' +require 'pathname' class TestRakeDirectoryTask < Rake::TestCase include Rake @@ -60,4 +61,16 @@ class TestRakeDirectoryTask < Rake::TestCase assert_equal ["t2", "a/b/c"], runlist assert File.directory?("a/b/c") end + + def test_can_use_pathname + directory Pathname.new "a/b/c" + + assert_equal FileCreationTask, Task["a/b/c"].class + + verbose(false) { + Task['a/b/c'].invoke + } + + assert File.directory?("a/b/c") + end end diff --git a/test/rake/test_rake_file_list.rb b/test/rake/test_rake_file_list.rb index 899f3bc509..c1b4c92086 100644 --- a/test/rake/test_rake_file_list.rb +++ b/test/rake/test_rake_file_list.rb @@ -1,4 +1,5 @@ require File.expand_path('../helper', __FILE__) +require 'pathname' class TestRakeFileList < Rake::TestCase FileList = Rake::FileList @@ -46,6 +47,12 @@ class TestRakeFileList < Rake::TestCase fl.sort end + def test_create_with_pathname + fl = FileList.new(Pathname.new("*.c")) + assert_equal ["abc.c", "x.c", "xyz.c"].sort, + fl.sort + end + def test_create_with_block fl = FileList.new { |f| f.include("x") } assert_equal ["x"], fl.resolve @@ -74,12 +81,24 @@ class TestRakeFileList < Rake::TestCase fl.sort end + def test_include_with_pathname + fl = FileList.new.include(Pathname.new("*.c")) + assert_equal ["abc.c", "x.c", "xyz.c"].sort, + fl.sort + end + def test_append fl = FileList.new fl << "a.rb" << "b.rb" assert_equal ['a.rb', 'b.rb'], fl end + def test_append_pathname + fl = FileList.new + fl << Pathname.new("a.rb") + assert_equal ['a.rb'], fl + end + def test_add_many fl = FileList.new fl.include %w(a d c) @@ -163,6 +182,15 @@ class TestRakeFileList < Rake::TestCase assert_equal [], fl end + def test_exclude_pathname + fl = FileList['x.c', 'abc.c', 'other'] + fl.each { |fn| touch fn, :verbose => false } + + fl.exclude(Pathname.new('*.c')) + + assert_equal ['other'], fl + end + def test_excluding_via_block fl = FileList['a.c', 'b.c', 'xyz.c'] fl.exclude { |fn| fn.pathmap('%n') == 'xyz' } diff --git a/test/rake/test_rake_file_task.rb b/test/rake/test_rake_file_task.rb index ae828c9ba1..a6a9fa2c51 100644 --- a/test/rake/test_rake_file_task.rb +++ b/test/rake/test_rake_file_task.rb @@ -1,5 +1,6 @@ require File.expand_path('../helper', __FILE__) require 'fileutils' +require 'pathname' class TestRakeFileTask < Rake::TestCase include Rake @@ -162,6 +163,20 @@ class TestRakeFileTask < Rake::TestCase assert_equal ["preqA", "preqB"], t.sources end + def test_task_can_be_pathname + name = "dummy" + file Pathname.new name + + ftask = Task[name] + + assert_equal name.to_s, ftask.name + end + + def test_prerequisite_can_be_pathname + t = file :f => Pathname.new("preq") + assert_equal "preq", t.source + end + # I have currently disabled this test. I'm not convinced that # deleting the file target on failure is always the proper thing to # do. I'm willing to hear input on this topic. diff --git a/test/rake/test_rake_pathname_extensions.rb b/test/rake/test_rake_pathname_extensions.rb new file mode 100644 index 0000000000..7da702d0c7 --- /dev/null +++ b/test/rake/test_rake_pathname_extensions.rb @@ -0,0 +1,15 @@ +require File.expand_path('../helper', __FILE__) +require 'rake/ext/pathname' + +class TestRakePathnameExtensions < Rake::TestCase + def test_ext_works_on_pathnames + pathname = Pathname.new("abc.foo") + assert_equal Pathname.new("abc.bar"), pathname.ext("bar") + end + + def test_path_map_works_on_pathnames + pathname = Pathname.new("this/is/a/dir/abc.rb") + assert_equal Pathname.new("abc.rb"), pathname.pathmap("%f") + assert_equal Pathname.new("this/is/a/dir"), pathname.pathmap("%d") + end +end diff --git a/test/rake/test_rake_task_argument_parsing.rb b/test/rake/test_rake_task_argument_parsing.rb index 0294a9fb2c..3cb5d9cfe3 100644 --- a/test/rake/test_rake_task_argument_parsing.rb +++ b/test/rake/test_rake_task_argument_parsing.rb @@ -49,6 +49,16 @@ class TestRakeTaskArgumentParsing < Rake::TestCase assert_equal ["one", "two", "three_a, three_b", "four"], args end + def test_treat_blank_arg_as_empty_string + name, args = @app.parse_task_string("name[one,]") + assert_equal "name", name + assert_equal ["one", ""], args + + name, args = @app.parse_task_string("name[one,,two]") + assert_equal "name", name + assert_equal ["one", "", "two"], args + end + def test_terminal_width_using_env app = Rake::Application.new app.terminal_columns = 1234 -- cgit v1.2.3