drake 0.8.3.1.0.14 → 0.8.4.1.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. data/CHANGES +27 -0
  2. data/CHANGES.drake +4 -0
  3. data/README +98 -198
  4. data/Rakefile +2 -4
  5. data/Rakefile.drake +0 -4
  6. data/doc/command_line_usage.rdoc +102 -0
  7. data/doc/rakefile.rdoc +4 -4
  8. data/doc/release_notes/rake-0.8.4.rdoc +147 -0
  9. data/lib/rake.rb +94 -60
  10. data/lib/rake/alt_system.rb +108 -0
  11. data/lib/rake/contrib/publisher.rb +1 -1
  12. data/lib/rake/contrib/sys.rb +1 -1
  13. data/lib/rake/gempackagetask.rb +0 -6
  14. data/lib/rake/loaders/makefile.rb +8 -1
  15. data/lib/rake/packagetask.rb +0 -1
  16. data/lib/rake/rdoctask.rb +79 -17
  17. data/lib/rake/testtask.rb +1 -1
  18. data/lib/rake/win32.rb +11 -10
  19. data/test/Rakefile.seq +1 -1
  20. data/test/Rakefile.simple +14 -25
  21. data/test/check_no_expansion.rb +5 -0
  22. data/test/data/sample.mf +2 -0
  23. data/test/rake_test_setup.rb +14 -0
  24. data/test/session_functional.rb +2 -0
  25. data/test/test_application.rb +25 -44
  26. data/test/test_definitions.rb +4 -1
  27. data/test/test_file_task.rb +20 -16
  28. data/test/test_filelist.rb +8 -3
  29. data/test/test_fileutils.rb +45 -44
  30. data/test/test_invocation_chain.rb +8 -2
  31. data/test/test_makefile_loader.rb +2 -1
  32. data/test/test_namespace.rb +30 -11
  33. data/test/test_package_task.rb +3 -1
  34. data/test/test_parallel.rb +4 -15
  35. data/test/test_pathmap.rb +3 -2
  36. data/test/test_pseudo_status.rb +26 -0
  37. data/test/test_rdoc_task.rb +88 -0
  38. data/test/test_require.rb +3 -1
  39. data/test/test_rules.rb +7 -5
  40. data/test/test_task_manager.rb +4 -1
  41. data/test/test_tasks.rb +7 -4
  42. data/test/test_test_task.rb +2 -0
  43. data/test/test_top_level_functions.rb +4 -2
  44. data/test/test_win32.rb +29 -14
  45. metadata +12 -4
data/Rakefile.drake CHANGED
@@ -1,8 +1,4 @@
1
1
 
2
- $LOAD_PATH.unshift "./contrib/comp_tree/contrib/quix/lib"
3
-
4
- require 'quix/subpackager'
5
- require 'quix/fileutils'
6
2
  require 'fileutils'
7
3
 
8
4
  ######################################################################
@@ -0,0 +1,102 @@
1
+ = Rake Command Line Usage
2
+
3
+ Rake is invoked from the command line using:
4
+
5
+ % rake [<em>options</em> ...] [<em>VAR</em>=<em>VALUE</em>] [<em>targets</em> ...]
6
+
7
+ Options are:
8
+
9
+ [<tt><em>name</em>=<em>value</em></tt>]
10
+ Set the environment variable <em>name</em> to <em>value</em>
11
+ during the execution of the <b>rake</b> command. You can access
12
+ the value by using ENV['<em>name</em>'].
13
+
14
+ [<tt>--classic-namespace</tt> (-n)]
15
+ Import the Task, FileTask, and FileCreateTask into the top-level
16
+ scope to be compatible with older versions of Rake. Alternatively
17
+ you can include the line <code>require
18
+ 'rake/classic_namespace'</code> in your Rakefile to get the
19
+ classic behavior.
20
+
21
+ [<tt>--describe</tt> _pattern_ (-D)]
22
+ Describe the tasks (matching optional PATTERN), then exit.
23
+
24
+ [<tt>--dry-run</tt> (-n)]
25
+ Do a dry run. Print the tasks invoked and executed, but do not
26
+ actually execute any of the actions.
27
+
28
+ [<tt>--execute</tt> _code_ (-e)]
29
+ Execute some Ruby code and exit.
30
+
31
+ [<tt>--execute-print</tt> _code_ (-p)]
32
+ Execute some Ruby code, print the result, and exit.
33
+
34
+ [<tt>--execute-continue</tt> _code_ (-p)]
35
+ Execute some Ruby code, then continue with normal task processing.
36
+
37
+ [<tt>--help</tt> (-H)]
38
+ Display some help text and exit.
39
+
40
+ [<tt>--libdir</tt> _directory_ (-I)]
41
+ Add _directory_ to the list of directories searched for require.
42
+
43
+ [<tt>--nosearch</tt> (-N)]
44
+ Do not search for a Rakefile in parent directories.
45
+
46
+ [<tt>--prereqs</tt> (-P)]
47
+ Display a list of all tasks and their immediate prerequisites.
48
+
49
+ [<tt>--quiet</tt> (-q)]
50
+ Do not echo commands from FileUtils.
51
+
52
+ [<tt>--rakefile</tt> _filename_ (-f)]
53
+ Use _filename_ as the name of the rakefile. The default rakefile
54
+ names are +rakefile+ and +Rakefile+ (with +rakefile+ taking
55
+ precedence). If the rakefile is not found in the current
56
+ directory, +rake+ will search parent directories for a match. The
57
+ directory where the Rakefile is found will become the current
58
+ directory for the actions executed in the Rakefile.
59
+
60
+ [<tt>--rakelibdir</tt> _rakelibdir_ (-R)]
61
+ Auto-import any .rake files in RAKELIBDIR. (default is 'rakelib')
62
+
63
+ [<tt>--require</tt> _name_ (-r)]
64
+ Require _name_ before executing the Rakefile.
65
+
66
+ [<tt>--rules</tt>]
67
+ Trace the rules resolution.
68
+
69
+ [<tt>--silent (-s)</tt>]
70
+ Like --quiet, but also suppresses the 'in directory' announcement.
71
+
72
+ [<tt>--system</tt> (-g)]
73
+ Use the system wide (global) rakefiles. The project Rakefile is
74
+ ignored. By default, the system wide rakefiles are used only if no
75
+ project Rakefile is found. On Unix-like system, the system wide
76
+ rake files are located in $HOME/.rake. On a windows system they
77
+ are stored in $APPDATA/Rake.
78
+
79
+ [<tt>--no-system</tt> (-G)]
80
+ Use the project level Rakefile, ignoring the system-wide (global)
81
+ rakefiles.
82
+
83
+ [<tt>--tasks</tt> (-T)]
84
+ Display a list of the major tasks and their comments. Comments
85
+ are defined using the "desc" command.
86
+
87
+ [<tt>--trace</tt> (-t)]
88
+ Turn on invoke/execute tracing. Also enable full backtrace on
89
+ errors.
90
+
91
+ [<tt>--usage</tt> (-h)]
92
+ Display a usage message and exit.
93
+
94
+ [<tt>--verbose</tt> (-v)]
95
+ Echo the Sys commands to standard output.
96
+
97
+ [<tt>--version</tt> (-V)]
98
+ Display the program version and exit.
99
+
100
+ In addition, any command line option of the form
101
+ <em>VAR</em>=<em>VALUE</em> will be added to the environment hash
102
+ <tt>ENV</tt> and may be tested in the Rakefile.
data/doc/rakefile.rdoc CHANGED
@@ -1,4 +1,4 @@
1
- = Rakefile Format (as of version 0.8.2)
1
+ = Rakefile Format (as of version 0.8.3)
2
2
 
3
3
  First of all, there is no special format for a Rakefile. A Rakefile
4
4
  contains executable Ruby code. Anything legal in a ruby script is
@@ -225,8 +225,8 @@ where we specify default values for the first and last names:
225
225
  === Tasks that Expect Parameters and Have Prerequisites
226
226
 
227
227
  Tasks that use parameters have a slightly different format for
228
- prerequisites. Use the <tt>:needs</tt> keyword to specify the
229
- prerequisites for tasks with arguments. For example:
228
+ prerequisites. Use the arrow notation to indicate the prerequisites
229
+ for tasks with arguments. For example:
230
230
 
231
231
  task :name, [:first_name, :last_name] => [:pre_name] do |t, args|
232
232
  args.with_defaults(:first_name => "John", :last_name => "Dough")
@@ -237,7 +237,7 @@ prerequisites for tasks with arguments. For example:
237
237
  === Deprecated Task Parameters Format
238
238
 
239
239
  There is an older format for declaring task parameters that omitted
240
- the task array and used the :needs keyword to introduce the
240
+ the task argument array and used the :needs keyword to introduce the
241
241
  dependencies. That format is still supported for compatibility, but
242
242
  is not recommended for use.
243
243
 
@@ -0,0 +1,147 @@
1
+ = Rake 0.8.4 Released
2
+
3
+ Rake version 0.8.4 is a bug-fix release of rake.
4
+
5
+ NOTE: The version of Rake that comes with Ruby 1.9 has diverged
6
+ slightly from the core Rake code base. Rake 0.8.4 will work
7
+ with Ruby 1.9, but is not a strict upgrade for the Rake that
8
+ comes with Ruby 1.9. A (near) future release of Rake will unify
9
+ those two codebases.
10
+
11
+ == Letter Writing Campaign
12
+
13
+ Thanks to Aaron Patterson (@tenderlove) and Eric Hodel (@drbrain) for
14
+ their encouraging support in organizing a letter writing campaign to
15
+ lobby for the "Warning Free" release of rake 0.8.4. A special callout
16
+ goes to Jonathan D. Lord, Sr (Dr. Wingnut) whose postcard was the
17
+ first to actually reach me. (see
18
+ http://tenderlovemaking.com/2009/02/26/we-need-a-new-version-of-rake/
19
+ for details)
20
+
21
+ == Changes
22
+
23
+ === New Features / Enhancements in Version 0.8.4
24
+
25
+ * Case is preserved on rakefile names. (patch from James
26
+ M. Lawrence/quix)
27
+
28
+ * Improved Rakefile case insensitivity testing (patch from Luis
29
+ Lavena).
30
+
31
+ * Windows system dir search order is now: HOME, HOMEDRIVE + HOMEPATH,
32
+ APPDATA, USERPROFILE (patch from Luis Lavena)
33
+
34
+ * MingGW is now recognized as a windows platform. (patch from Luis
35
+ Lavena)
36
+
37
+ === Bug Fixes in Version 0.8.4
38
+
39
+ * Removed reference to manage_gem to fix the warning produced by the
40
+ gem package task.
41
+
42
+ * Fixed stray ARGV option problem that was interfering with
43
+ Test::Unit::Runner. (patch from Pivotal Labs)
44
+
45
+ === Infrastructure Improvements in Version 0.8.4
46
+
47
+ * Numerous fixes to the windows test suite (patch from Luis Lavena).
48
+
49
+ * Improved Rakefile case insensitivity testing (patch from Luis
50
+ Lavena).
51
+
52
+ * Better support for windows paths in the test task (patch from Simon
53
+ Chiang/bahuvrihi)
54
+
55
+ == What is Rake
56
+
57
+ Rake is a build tool similar to the make program in many ways. But
58
+ instead of cryptic make recipes, Rake uses standard Ruby code to
59
+ declare tasks and dependencies. You have the full power of a modern
60
+ scripting language built right into your build tool.
61
+
62
+ == Availability
63
+
64
+ The easiest way to get and install rake is via RubyGems ...
65
+
66
+ gem install rake (you may need root/admin privileges)
67
+
68
+ Otherwise, you can get it from the more traditional places:
69
+
70
+ Home Page:: http://rake.rubyforge.org/
71
+ Download:: http://rubyforge.org/project/showfiles.php?group_id=50
72
+ GitHub:: git://github.com/jimweirich/rake.git
73
+
74
+ == Task Argument Examples
75
+
76
+ Prior to version 0.8.0, rake was only able to handle command line
77
+ arguments of the form NAME=VALUE that were passed into Rake via the
78
+ ENV hash. Many folks had asked for some kind of simple command line
79
+ arguments, perhaps using "--" to separate regular task names from
80
+ argument values on the command line. The problem is that there was no
81
+ easy way to associate positional arguments on the command line with
82
+ different tasks. Suppose both tasks :a and :b expect a command line
83
+ argument: does the first value go with :a? What if :b is run first?
84
+ Should it then get the first command line argument.
85
+
86
+ Rake 0.8.0 solves this problem by explicitly passing values directly
87
+ to the tasks that need them. For example, if I had a release task
88
+ that required a version number, I could say:
89
+
90
+ rake release[0.8.4]
91
+
92
+ And the string "0.8.4" will be passed to the :release task. Multiple
93
+ arguments can be passed by separating them with a comma, for example:
94
+
95
+ rake name[john,doe]
96
+
97
+ Just a few words of caution. The rake task name and its arguments
98
+ need to be a single command line argument to rake. This generally
99
+ means no spaces. If spaces are needed, then the entire rake +
100
+ argument string should be quoted. Something like this:
101
+
102
+ rake "name[billy bob, smith]"
103
+
104
+ (Quoting rules vary between operating systems and shells, so make sure
105
+ you consult the proper docs for your OS/shell).
106
+
107
+ === Tasks that Expect Parameters
108
+
109
+ Parameters are only given to tasks that are setup to expect them. In
110
+ order to handle named parameters, the task declaration syntax for
111
+ tasks has been extended slightly.
112
+
113
+ For example, a task that needs a first name and last name might be
114
+ declared as:
115
+
116
+ task :name, :first_name, :last_name
117
+
118
+ The first argument is still the name of the task (:name in this case).
119
+ The next to argumements are the names of the parameters expected by
120
+ :name (:first_name and :last_name in the example).
121
+
122
+ To access the values of the paramters, the block defining the task
123
+ behaviour can now accept a second parameter:
124
+
125
+ task :name, :first_name, :last_name do |t, args|
126
+ puts "First name is #{args.first_name}"
127
+ puts "Last name is #{args.last_name}"
128
+ end
129
+
130
+ The first argument of the block "t" is always bound to the current
131
+ task object. The second argument "args" is an open-struct like object
132
+ that allows access to the task arguments. Extra command line
133
+ arguments to a task are ignored. Missing command line arguments are
134
+ given the nil value.
135
+
136
+ == Thanks
137
+
138
+ As usual, it was input from users that drove a alot of these changes. The
139
+ following people either contributed patches, made suggestions or made
140
+ otherwise helpful comments. Thanks to ...
141
+
142
+ * James M. Lawrence/quix
143
+ * Luis Lavena
144
+ * Pivotal Labs
145
+ * Simon Chiang/bahuvrihi
146
+
147
+ -- Jim Weirich
data/lib/rake.rb CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  #--
4
4
 
5
- # Copyright (c) 2003, 2004, 2005, 2006, 2007 Jim Weirich
5
+ # Copyright 2003, 2004, 2005, 2006, 2007, 2008 by Jim Weirich (jim@weirichhouse.org)
6
6
  #
7
7
  # Permission is hereby granted, free of charge, to any person obtaining a copy
8
8
  # of this software and associated documentation files (the "Software"), to
@@ -29,7 +29,7 @@
29
29
  # as a library via a require statement, but it can be distributed
30
30
  # independently as an application.
31
31
 
32
- RAKEVERSION = '0.8.3.1.0.14'
32
+ RAKEVERSION = '0.8.4.1.0.15'
33
33
 
34
34
  require 'rbconfig'
35
35
  require 'fileutils'
@@ -41,6 +41,8 @@ require 'rake/parallel'
41
41
 
42
42
  require 'rake/win32'
43
43
 
44
+ $trace = false
45
+
44
46
  ######################################################################
45
47
  # Rake extensions to Module.
46
48
  #
@@ -61,7 +63,7 @@ class Module
61
63
  # end
62
64
  #
63
65
  def rake_extension(method)
64
- if instance_methods.include?(method.to_s) || instance_methods.include?(method.to_sym)
66
+ if method_defined?(method)
65
67
  $stderr.puts "WARNING: Possible conflict with Rake extension: #{self}##{method} already exists"
66
68
  else
67
69
  yield
@@ -75,7 +77,7 @@ end # module Module
75
77
  #
76
78
  class String
77
79
  rake_extension("ext") do
78
- # Replace the file extension with +newext+. If there is no extenson on
80
+ # Replace the file extension with +newext+. If there is no extension on
79
81
  # the string, append the new extension to the end. If the new extension
80
82
  # is not given, or is the empty string, remove any existing extension.
81
83
  #
@@ -85,7 +87,7 @@ class String
85
87
  if newext != ''
86
88
  newext = (newext =~ /^\./) ? newext : ("." + newext)
87
89
  end
88
- dup.sub!(%r(([^/\\])\.[^./\\]*$)) { $1 + newext } || self + newext
90
+ self.chomp(File.extname(self)) << newext
89
91
  end
90
92
  end
91
93
 
@@ -162,7 +164,7 @@ class String
162
164
  # 'a/b/c/d/file.txt'.pathmap("%2d") => 'a/b'
163
165
  # 'a/b/c/d/file.txt'.pathmap("%-2d") => 'c/d'
164
166
  #
165
- # Also the %d, %p, $f, $n, %x, and %X operators can take a
167
+ # Also the %d, %p, %f, %n, %x, and %X operators can take a
166
168
  # pattern/replacement argument to perform simple string substititions on a
167
169
  # particular part of the path. The pattern and replacement are speparated
168
170
  # by a comma and are enclosed by curly braces. The replacement spec comes
@@ -208,13 +210,9 @@ class String
208
210
  when '%d'
209
211
  result << File.dirname(self)
210
212
  when '%x'
211
- result << $1 if self =~ /[^\/](\.[^.]+)$/
213
+ result << File.extname(self)
212
214
  when '%X'
213
- if self =~ /^(.*[^\/])(\.[^.]+)$/
214
- result << $1
215
- else
216
- result << self
217
- end
215
+ result << self.ext
218
216
  when '%p'
219
217
  result << self
220
218
  when '%s'
@@ -309,6 +307,27 @@ module Rake
309
307
  end
310
308
  end
311
309
 
310
+ ####################################################################
311
+ # Exit status class for times the system just gives us a nil.
312
+ class PseudoStatus
313
+ attr_reader :exitstatus
314
+ def initialize(code=0)
315
+ @exitstatus = code
316
+ end
317
+ def to_i
318
+ @exitstatus << 8
319
+ end
320
+ def >>(n)
321
+ to_i >> n
322
+ end
323
+ def stopped?
324
+ false
325
+ end
326
+ def exited?
327
+ true
328
+ end
329
+ end
330
+
312
331
  ####################################################################
313
332
  # TaskAguments manage the arguments passed to a task.
314
333
  #
@@ -822,9 +841,7 @@ module Rake
822
841
  # Is this file task needed? Yes if it doesn't exist, or if its time stamp
823
842
  # is out of date.
824
843
  def needed?
825
- return true unless File.exist?(name)
826
- return true if out_of_date?(timestamp)
827
- false
844
+ ! File.exist?(name) || out_of_date?(timestamp)
828
845
  end
829
846
 
830
847
  # Time stamp for file task.
@@ -879,6 +896,7 @@ module Rake
879
896
  # parallel using Ruby threads.
880
897
  #
881
898
  class MultiTask < Task
899
+ private
882
900
  def invoke_prerequisites(args, invocation_chain)
883
901
  threads = @prerequisites.collect { |p|
884
902
  Thread.new(p) { |r| application[r].invoke_with_call_chain(args, invocation_chain) }
@@ -1029,7 +1047,9 @@ end
1029
1047
  # added to the FileUtils utility functions.
1030
1048
  #
1031
1049
  module FileUtils
1032
- RUBY = File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name']).
1050
+ RUBY = File.join(
1051
+ Config::CONFIG['bindir'],
1052
+ Config::CONFIG['ruby_install_name'] + Config::CONFIG['EXEEXT']).
1033
1053
  sub(/.*\s.*/m, '"\&"')
1034
1054
 
1035
1055
  OPT_TABLE['sh'] = %w(noop verbose)
@@ -1055,14 +1075,14 @@ module FileUtils
1055
1075
  options = (Hash === cmd.last) ? cmd.pop : {}
1056
1076
  unless block_given?
1057
1077
  show_command = cmd.join(" ")
1058
- show_command = show_command[0,42] + "..."
1078
+ show_command = show_command[0,42] + "..." unless $trace
1059
1079
  # TODO code application logic heref show_command.length > 45
1060
1080
  block = lambda { |ok, status|
1061
1081
  ok or fail "Command failed with status (#{status.exitstatus}): [#{show_command}]"
1062
1082
  }
1063
1083
  end
1064
1084
  if RakeFileUtils.verbose_flag == :default
1065
- options[:verbose] = false
1085
+ options[:verbose] = true
1066
1086
  else
1067
1087
  options[:verbose] ||= RakeFileUtils.verbose_flag
1068
1088
  end
@@ -1071,16 +1091,14 @@ module FileUtils
1071
1091
  rake_output_message cmd.join(" ") if options[:verbose]
1072
1092
  unless options[:noop]
1073
1093
  res = rake_system(*cmd)
1074
- block.call(res, $?)
1094
+ status = $?
1095
+ status = PseudoStatus.new(1) if !res && status.nil?
1096
+ block.call(res, status)
1075
1097
  end
1076
1098
  end
1077
1099
 
1078
1100
  def rake_system(*cmd)
1079
- if Rake::Win32.windows?
1080
- Rake::Win32.rake_system(*cmd)
1081
- else
1082
- system(*cmd)
1083
- end
1101
+ Rake::AltSystem.system(*cmd)
1084
1102
  end
1085
1103
  private :rake_system
1086
1104
 
@@ -1553,8 +1571,8 @@ module Rake
1553
1571
  collect { |fn| fn.pathmap(spec) }
1554
1572
  end
1555
1573
 
1556
- # Return a new array with <tt>String#ext</tt> method applied to each
1557
- # member of the array.
1574
+ # Return a new FileList with <tt>String#ext</tt> method applied
1575
+ # to each member of the array.
1558
1576
  #
1559
1577
  # This method is a shortcut for:
1560
1578
  #
@@ -1571,9 +1589,9 @@ module Rake
1571
1589
  # name, line number, and the matching line of text. If no block is given,
1572
1590
  # a standard emac style file:linenumber:line message will be printed to
1573
1591
  # standard out.
1574
- def egrep(pattern)
1592
+ def egrep(pattern, *options)
1575
1593
  each do |fn|
1576
- open(fn) do |inf|
1594
+ open(fn, "rb", *options) do |inf|
1577
1595
  count = 0
1578
1596
  inf.each do |line|
1579
1597
  count += 1
@@ -1740,9 +1758,9 @@ module Rake
1740
1758
  @task_manager.lookup(name, @scope)
1741
1759
  end
1742
1760
 
1743
- # Return the list of tasks defined in this namespace.
1761
+ # Return the list of tasks defined in this and nested namespaces.
1744
1762
  def tasks
1745
- @task_manager.tasks
1763
+ @task_manager.tasks_in_scope(@scope)
1746
1764
  end
1747
1765
  end # NameSpace
1748
1766
 
@@ -1897,6 +1915,15 @@ module Rake
1897
1915
  @tasks.values.sort_by { |t| t.name }
1898
1916
  end
1899
1917
 
1918
+ # List of all the tasks defined in the given scope (and its
1919
+ # sub-scopes).
1920
+ def tasks_in_scope(scope)
1921
+ prefix = scope.join(":")
1922
+ tasks.select { |t|
1923
+ /^#{prefix}:/ =~ t.name
1924
+ }
1925
+ end
1926
+
1900
1927
  # Clear all tasks in this application.
1901
1928
  def clear
1902
1929
  @tasks.clear
@@ -2075,7 +2102,8 @@ module Rake
2075
2102
  def init(app_name='rake')
2076
2103
  standard_exception_handling do
2077
2104
  @name = app_name
2078
- collect_tasks handle_options
2105
+ handle_options
2106
+ collect_tasks
2079
2107
  end
2080
2108
  end
2081
2109
 
@@ -2136,13 +2164,13 @@ module Rake
2136
2164
  yield
2137
2165
  rescue SystemExit => ex
2138
2166
  # Exit silently with current status
2139
- exit(ex.status)
2140
- rescue SystemExit, OptionParser::InvalidOption => ex
2167
+ raise
2168
+ rescue OptionParser::InvalidOption => ex
2141
2169
  # Exit silently
2142
- exit(1)
2170
+ exit(false)
2143
2171
  rescue Exception => ex
2144
2172
  # Exit with error message
2145
- $stderr.puts "rake aborted!"
2173
+ $stderr.puts "#{name} aborted!"
2146
2174
  $stderr.puts ex.message
2147
2175
  if options.trace
2148
2176
  $stderr.puts ex.backtrace.join("\n")
@@ -2150,7 +2178,7 @@ module Rake
2150
2178
  $stderr.puts ex.backtrace.find {|str| str =~ /#{@rakefile}/ } || ""
2151
2179
  $stderr.puts "(See full trace by running task with --trace)"
2152
2180
  end
2153
- exit(1)
2181
+ exit(false)
2154
2182
  end
2155
2183
  end
2156
2184
 
@@ -2158,7 +2186,10 @@ module Rake
2158
2186
  # If a match is found, it is copied into @rakefile.
2159
2187
  def have_rakefile
2160
2188
  @rakefiles.each do |fn|
2161
- if File.exist?(fn) || fn == ''
2189
+ if File.exist?(fn)
2190
+ others = Dir.glob(fn, File::FNM_CASEFOLD)
2191
+ return others.size == 1 ? others.first : fn
2192
+ elsif fn == ''
2162
2193
  return fn
2163
2194
  end
2164
2195
  end
@@ -2181,14 +2212,14 @@ module Rake
2181
2212
  tty_output? || ENV['RAKE_COLUMNS']
2182
2213
  end
2183
2214
 
2184
- # Display the tasks and dependencies.
2215
+ # Display the tasks and comments.
2185
2216
  def display_tasks_and_comments
2186
2217
  displayable_tasks = tasks.select { |t|
2187
2218
  t.comment && t.name =~ options.show_task_pattern
2188
2219
  }
2189
2220
  if options.full_description
2190
2221
  displayable_tasks.each do |t|
2191
- puts "rake #{t.name_with_args}"
2222
+ puts "#{name} #{t.name_with_args}"
2192
2223
  t.full_comment.split("\n").each do |line|
2193
2224
  puts " #{line}"
2194
2225
  end
@@ -2247,7 +2278,7 @@ module Rake
2247
2278
  # Display the tasks and prerequisites
2248
2279
  def display_prerequisites
2249
2280
  tasks.each do |t|
2250
- puts "rake #{t.name}"
2281
+ puts "#{name} #{t.name}"
2251
2282
  t.prerequisites.each { |pre| puts " #{pre}" }
2252
2283
  end
2253
2284
  end
@@ -2371,7 +2402,7 @@ module Rake
2371
2402
  verbose(true)
2372
2403
  }
2373
2404
  ],
2374
- ['--verbose', '-v', "Log message to standard output (default).",
2405
+ ['--verbose', '-v', "Log message to standard output.",
2375
2406
  lambda { |value| verbose(true) }
2376
2407
  ],
2377
2408
  ['--version', '-V', "Display the program version.",
@@ -2387,18 +2418,18 @@ module Rake
2387
2418
  def handle_options
2388
2419
  options.rakelib = ['rakelib']
2389
2420
 
2390
- opts = OptionParser.new
2391
- opts.banner = "rake [-f rakefile] {options} targets..."
2392
- opts.separator ""
2393
- opts.separator "Options are ..."
2394
-
2395
- opts.on_tail("-h", "--help", "-H", "Display this help message.") do
2396
- puts opts
2397
- exit
2398
- end
2399
-
2400
- standard_rake_options.each { |args| opts.on(*args) }
2401
- parsed_argv = opts.parse(ARGV)
2421
+ OptionParser.new do |opts|
2422
+ opts.banner = "rake [-f rakefile] {options} targets..."
2423
+ opts.separator ""
2424
+ opts.separator "Options are ..."
2425
+
2426
+ opts.on_tail("-h", "--help", "-H", "Display this help message.") do
2427
+ puts opts
2428
+ exit
2429
+ end
2430
+
2431
+ standard_rake_options.each { |args| opts.on(*args) }
2432
+ end.parse!
2402
2433
 
2403
2434
  # If class namespaces are requested, set the global options
2404
2435
  # according to the values in the options structure.
@@ -2409,7 +2440,6 @@ module Rake
2409
2440
  $dryrun = options.dryrun
2410
2441
  $silent = options.silent
2411
2442
  end
2412
- parsed_argv
2413
2443
  end
2414
2444
 
2415
2445
  # Similar to the regular Ruby +require+ command, but will check
@@ -2479,8 +2509,6 @@ module Rake
2479
2509
  begin
2480
2510
  if ENV['RAKE_SYSTEM']
2481
2511
  ENV['RAKE_SYSTEM']
2482
- elsif Win32.windows?
2483
- Win32.win32_system_dir
2484
2512
  else
2485
2513
  standard_system_dir
2486
2514
  end
@@ -2488,17 +2516,23 @@ module Rake
2488
2516
  end
2489
2517
 
2490
2518
  # The standard directory containing system wide rake files.
2491
- def standard_system_dir #:nodoc:
2492
- File.join(File.expand_path('~'), '.rake')
2519
+ if Win32.windows?
2520
+ def standard_system_dir #:nodoc:
2521
+ Win32.win32_system_dir
2522
+ end
2523
+ else
2524
+ def standard_system_dir #:nodoc:
2525
+ File.join(File.expand_path('~'), '.rake')
2526
+ end
2493
2527
  end
2494
2528
  private :standard_system_dir
2495
2529
 
2496
2530
  # Collect the list of tasks on the command line. If no tasks are
2497
2531
  # given, return a list containing only the default task.
2498
2532
  # Environmental assignments are processed at this time as well.
2499
- def collect_tasks(argv)
2533
+ def collect_tasks
2500
2534
  @top_level_tasks = []
2501
- argv.each do |arg|
2535
+ ARGV.each do |arg|
2502
2536
  if arg =~ /^(\w+)=(.*)$/
2503
2537
  ENV[$1] = $2
2504
2538
  else