necktie 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (214) hide show
  1. data/README.rdoc +174 -0
  2. data/bin/necktie +2 -1
  3. data/lib/necktie/files.rb +29 -0
  4. data/lib/necktie/rake.rb +127 -0
  5. data/lib/necktie/services.rb +11 -7
  6. data/lib/necktie.rb +4 -54
  7. data/necktie.gemspec +3 -3
  8. data/vendor/rake/CHANGES +477 -0
  9. data/vendor/rake/MIT-LICENSE +21 -0
  10. data/vendor/rake/README.rdoc +194 -0
  11. data/vendor/rake/Rakefile +421 -0
  12. data/vendor/rake/TODO +20 -0
  13. data/vendor/rake/bin/rake +31 -0
  14. data/vendor/rake/doc/command_line_usage.rdoc +102 -0
  15. data/vendor/rake/doc/example/Rakefile1 +38 -0
  16. data/vendor/rake/doc/example/Rakefile2 +35 -0
  17. data/vendor/rake/doc/example/a.c +6 -0
  18. data/vendor/rake/doc/example/b.c +6 -0
  19. data/vendor/rake/doc/example/main.c +11 -0
  20. data/vendor/rake/doc/glossary.rdoc +51 -0
  21. data/vendor/rake/doc/jamis.rb +591 -0
  22. data/vendor/rake/doc/proto_rake.rdoc +127 -0
  23. data/vendor/rake/doc/rake.1.gz +0 -0
  24. data/vendor/rake/doc/rakefile.rdoc +566 -0
  25. data/vendor/rake/doc/rational.rdoc +151 -0
  26. data/vendor/rake/doc/release_notes/rake-0.4.14.rdoc +23 -0
  27. data/vendor/rake/doc/release_notes/rake-0.4.15.rdoc +35 -0
  28. data/vendor/rake/doc/release_notes/rake-0.5.0.rdoc +53 -0
  29. data/vendor/rake/doc/release_notes/rake-0.5.3.rdoc +78 -0
  30. data/vendor/rake/doc/release_notes/rake-0.5.4.rdoc +46 -0
  31. data/vendor/rake/doc/release_notes/rake-0.6.0.rdoc +141 -0
  32. data/vendor/rake/doc/release_notes/rake-0.7.0.rdoc +119 -0
  33. data/vendor/rake/doc/release_notes/rake-0.7.1.rdoc +59 -0
  34. data/vendor/rake/doc/release_notes/rake-0.7.2.rdoc +121 -0
  35. data/vendor/rake/doc/release_notes/rake-0.7.3.rdoc +47 -0
  36. data/vendor/rake/doc/release_notes/rake-0.8.0.rdoc +114 -0
  37. data/vendor/rake/doc/release_notes/rake-0.8.2.rdoc +165 -0
  38. data/vendor/rake/doc/release_notes/rake-0.8.3.rdoc +112 -0
  39. data/vendor/rake/doc/release_notes/rake-0.8.4.rdoc +147 -0
  40. data/vendor/rake/doc/release_notes/rake-0.8.5.rdoc +53 -0
  41. data/vendor/rake/doc/release_notes/rake-0.8.6.rdoc +55 -0
  42. data/vendor/rake/doc/release_notes/rake-0.8.7.rdoc +55 -0
  43. data/vendor/rake/install.rb +88 -0
  44. data/vendor/rake/lib/rake/alt_system.rb +108 -0
  45. data/vendor/rake/lib/rake/application.rb +579 -0
  46. data/vendor/rake/lib/rake/classic_namespace.rb +9 -0
  47. data/vendor/rake/lib/rake/clean.rb +35 -0
  48. data/vendor/rake/lib/rake/cloneable.rb +25 -0
  49. data/vendor/rake/lib/rake/contrib/compositepublisher.rb +24 -0
  50. data/vendor/rake/lib/rake/contrib/ftptools.rb +153 -0
  51. data/vendor/rake/lib/rake/contrib/publisher.rb +75 -0
  52. data/vendor/rake/lib/rake/contrib/rubyforgepublisher.rb +18 -0
  53. data/vendor/rake/lib/rake/contrib/sshpublisher.rb +47 -0
  54. data/vendor/rake/lib/rake/contrib/sys.rb +209 -0
  55. data/vendor/rake/lib/rake/default_loader.rb +10 -0
  56. data/vendor/rake/lib/rake/dsl.rb +136 -0
  57. data/vendor/rake/lib/rake/early_time.rb +18 -0
  58. data/vendor/rake/lib/rake/environment.rb +40 -0
  59. data/vendor/rake/lib/rake/ext/module.rb +60 -0
  60. data/vendor/rake/lib/rake/ext/string.rb +165 -0
  61. data/vendor/rake/lib/rake/ext/time.rb +14 -0
  62. data/vendor/rake/lib/rake/file_creation_task.rb +24 -0
  63. data/vendor/rake/lib/rake/file_list.rb +395 -0
  64. data/vendor/rake/lib/rake/file_task.rb +47 -0
  65. data/vendor/rake/lib/rake/file_utils.rb +108 -0
  66. data/vendor/rake/lib/rake/gempackagetask.rb +97 -0
  67. data/vendor/rake/lib/rake/invocation_chain.rb +51 -0
  68. data/vendor/rake/lib/rake/invocation_exception_mixin.rb +16 -0
  69. data/vendor/rake/lib/rake/lib/project.rake +24 -0
  70. data/vendor/rake/lib/rake/loaders/makefile.rb +44 -0
  71. data/vendor/rake/lib/rake/multi_task.rb +16 -0
  72. data/vendor/rake/lib/rake/name_space.rb +25 -0
  73. data/vendor/rake/lib/rake/packagetask.rb +184 -0
  74. data/vendor/rake/lib/rake/psuedo_status.rb +24 -0
  75. data/vendor/rake/lib/rake/rake_file_utils.rb +133 -0
  76. data/vendor/rake/lib/rake/rake_module.rb +25 -0
  77. data/vendor/rake/lib/rake/rake_test_loader.rb +15 -0
  78. data/vendor/rake/lib/rake/rdoctask.rb +209 -0
  79. data/vendor/rake/lib/rake/ruby182_test_unit_fix.rb +25 -0
  80. data/vendor/rake/lib/rake/rule_recursion_overflow_error.rb +20 -0
  81. data/vendor/rake/lib/rake/runtest.rb +23 -0
  82. data/vendor/rake/lib/rake/task.rb +318 -0
  83. data/vendor/rake/lib/rake/task_argument_error.rb +7 -0
  84. data/vendor/rake/lib/rake/task_arguments.rb +78 -0
  85. data/vendor/rake/lib/rake/task_manager.rb +328 -0
  86. data/vendor/rake/lib/rake/tasklib.rb +24 -0
  87. data/vendor/rake/lib/rake/testtask.rb +175 -0
  88. data/vendor/rake/lib/rake/win32.rb +55 -0
  89. data/vendor/rake/lib/rake.rb +72 -0
  90. data/vendor/rake/rake.blurb +19 -0
  91. data/vendor/rake/rake.gemspec +214 -0
  92. data/vendor/rake/rakelib/extra.rake +8 -0
  93. data/vendor/rake/rakelib/publish.rake +22 -0
  94. data/vendor/rake/rakelib/rbx.rake +82 -0
  95. data/vendor/rake/rakelib/ruby19.rake +88 -0
  96. data/vendor/rake/rakelib/tags.rake +18 -0
  97. data/vendor/rake/test/capture_stdout.rb +26 -0
  98. data/vendor/rake/test/check_expansion.rb +5 -0
  99. data/vendor/rake/test/check_no_expansion.rb +5 -0
  100. data/vendor/rake/test/contrib/test_sys.rb +47 -0
  101. data/vendor/rake/test/data/chains/Rakefile +15 -0
  102. data/vendor/rake/test/data/comments/Rakefile +18 -0
  103. data/vendor/rake/test/data/default/Rakefile +19 -0
  104. data/vendor/rake/test/data/dryrun/Rakefile +22 -0
  105. data/vendor/rake/test/data/file_creation_task/Rakefile +33 -0
  106. data/vendor/rake/test/data/imports/Rakefile +19 -0
  107. data/vendor/rake/test/data/imports/deps.mf +1 -0
  108. data/vendor/rake/test/data/multidesc/Rakefile +17 -0
  109. data/vendor/rake/test/data/namespace/Rakefile +66 -0
  110. data/vendor/rake/test/data/nosearch/dummy +1 -0
  111. data/vendor/rake/test/data/rakelib/test1.rb +5 -0
  112. data/vendor/rake/test/data/rakelib/test2.rake +3 -0
  113. data/vendor/rake/test/data/rbext/rakefile.rb +3 -0
  114. data/vendor/rake/test/data/sample.mf +14 -0
  115. data/vendor/rake/test/data/statusreturn/Rakefile +8 -0
  116. data/vendor/rake/test/data/sys/sys1.rake +3 -0
  117. data/vendor/rake/test/data/unittest/Rakefile +1 -0
  118. data/vendor/rake/test/data/unittest/subdir/README +0 -0
  119. data/vendor/rake/test/data/verbose/Rakefile +34 -0
  120. data/vendor/rake/test/filecreation.rb +32 -0
  121. data/vendor/rake/test/functional/functional_test.rb +15 -0
  122. data/vendor/rake/test/functional/session_based_tests.rb +442 -0
  123. data/vendor/rake/test/in_environment.rb +32 -0
  124. data/vendor/rake/test/lib/application_test.rb +769 -0
  125. data/vendor/rake/test/lib/clean_test.rb +15 -0
  126. data/vendor/rake/test/lib/definitions_test.rb +85 -0
  127. data/vendor/rake/test/lib/dsl_test.rb +41 -0
  128. data/vendor/rake/test/lib/earlytime_test.rb +35 -0
  129. data/vendor/rake/test/lib/environment_test.rb +18 -0
  130. data/vendor/rake/test/lib/extension_test.rb +63 -0
  131. data/vendor/rake/test/lib/file_creation_task_test.rb +62 -0
  132. data/vendor/rake/test/lib/file_task_test.rb +143 -0
  133. data/vendor/rake/test/lib/filelist_test.rb +623 -0
  134. data/vendor/rake/test/lib/fileutils_test.rb +251 -0
  135. data/vendor/rake/test/lib/ftp_test.rb +59 -0
  136. data/vendor/rake/test/lib/invocation_chain_test.rb +81 -0
  137. data/vendor/rake/test/lib/makefile_loader_test.rb +26 -0
  138. data/vendor/rake/test/lib/multitask_test.rb +53 -0
  139. data/vendor/rake/test/lib/namespace_test.rb +55 -0
  140. data/vendor/rake/test/lib/package_task_test.rb +118 -0
  141. data/vendor/rake/test/lib/pathmap_test.rb +210 -0
  142. data/vendor/rake/test/lib/pseudo_status_test.rb +26 -0
  143. data/vendor/rake/test/lib/rake_test.rb +41 -0
  144. data/vendor/rake/test/lib/rdoc_task_test.rb +88 -0
  145. data/vendor/rake/test/lib/require_test.rb +35 -0
  146. data/vendor/rake/test/lib/rules_test.rb +349 -0
  147. data/vendor/rake/test/lib/task_arguments_test.rb +89 -0
  148. data/vendor/rake/test/lib/task_manager_test.rb +173 -0
  149. data/vendor/rake/test/lib/task_test.rb +376 -0
  150. data/vendor/rake/test/lib/tasklib_test.rb +12 -0
  151. data/vendor/rake/test/lib/test_task_test.rb +77 -0
  152. data/vendor/rake/test/lib/testtask_test.rb +49 -0
  153. data/vendor/rake/test/lib/top_level_functions_test.rb +86 -0
  154. data/vendor/rake/test/lib/win32_test.rb +72 -0
  155. data/vendor/rake/test/rake_test_setup.rb +24 -0
  156. data/vendor/rake/test/reqfile.rb +3 -0
  157. data/vendor/rake/test/reqfile2.rb +3 -0
  158. data/vendor/rake/test/reqfile3.rake +3 -0
  159. data/vendor/rake/test/shellcommand.rb +3 -0
  160. data/vendor/rake/test/test_helper.rb +13 -0
  161. metadata +212 -56
  162. /data/{rush → vendor/rush}/README.rdoc +0 -0
  163. /data/{rush → vendor/rush}/Rakefile +0 -0
  164. /data/{rush → vendor/rush}/VERSION +0 -0
  165. /data/{rush → vendor/rush}/bin/rush +0 -0
  166. /data/{rush → vendor/rush}/bin/rushd +0 -0
  167. /data/{rush → vendor/rush}/lib/rush/access.rb +0 -0
  168. /data/{rush → vendor/rush}/lib/rush/array_ext.rb +0 -0
  169. /data/{rush → vendor/rush}/lib/rush/box.rb +0 -0
  170. /data/{rush → vendor/rush}/lib/rush/commands.rb +0 -0
  171. /data/{rush → vendor/rush}/lib/rush/config.rb +0 -0
  172. /data/{rush → vendor/rush}/lib/rush/dir.rb +0 -0
  173. /data/{rush → vendor/rush}/lib/rush/embeddable_shell.rb +0 -0
  174. /data/{rush → vendor/rush}/lib/rush/entry.rb +0 -0
  175. /data/{rush → vendor/rush}/lib/rush/exceptions.rb +0 -0
  176. /data/{rush → vendor/rush}/lib/rush/file.rb +0 -0
  177. /data/{rush → vendor/rush}/lib/rush/find_by.rb +0 -0
  178. /data/{rush → vendor/rush}/lib/rush/fixnum_ext.rb +0 -0
  179. /data/{rush → vendor/rush}/lib/rush/head_tail.rb +0 -0
  180. /data/{rush → vendor/rush}/lib/rush/local.rb +0 -0
  181. /data/{rush → vendor/rush}/lib/rush/process.rb +0 -0
  182. /data/{rush → vendor/rush}/lib/rush/process_set.rb +0 -0
  183. /data/{rush → vendor/rush}/lib/rush/remote.rb +0 -0
  184. /data/{rush → vendor/rush}/lib/rush/search_results.rb +0 -0
  185. /data/{rush → vendor/rush}/lib/rush/server.rb +0 -0
  186. /data/{rush → vendor/rush}/lib/rush/shell.rb +0 -0
  187. /data/{rush → vendor/rush}/lib/rush/ssh_tunnel.rb +0 -0
  188. /data/{rush → vendor/rush}/lib/rush/string_ext.rb +0 -0
  189. /data/{rush → vendor/rush}/lib/rush.rb +0 -0
  190. /data/{rush → vendor/rush}/rush.gemspec +0 -0
  191. /data/{rush → vendor/rush}/spec/access_spec.rb +0 -0
  192. /data/{rush → vendor/rush}/spec/array_ext_spec.rb +0 -0
  193. /data/{rush → vendor/rush}/spec/base.rb +0 -0
  194. /data/{rush → vendor/rush}/spec/box_spec.rb +0 -0
  195. /data/{rush → vendor/rush}/spec/commands_spec.rb +0 -0
  196. /data/{rush → vendor/rush}/spec/config_spec.rb +0 -0
  197. /data/{rush → vendor/rush}/spec/dir_spec.rb +0 -0
  198. /data/{rush → vendor/rush}/spec/embeddable_shell_spec.rb +0 -0
  199. /data/{rush → vendor/rush}/spec/entry_spec.rb +0 -0
  200. /data/{rush → vendor/rush}/spec/file_spec.rb +0 -0
  201. /data/{rush → vendor/rush}/spec/find_by_spec.rb +0 -0
  202. /data/{rush → vendor/rush}/spec/fixnum_ext_spec.rb +0 -0
  203. /data/{rush → vendor/rush}/spec/local_spec.rb +0 -0
  204. /data/{rush → vendor/rush}/spec/process_set_spec.rb +0 -0
  205. /data/{rush → vendor/rush}/spec/process_spec.rb +0 -0
  206. /data/{rush → vendor/rush}/spec/remote_spec.rb +0 -0
  207. /data/{rush → vendor/rush}/spec/rush_spec.rb +0 -0
  208. /data/{rush → vendor/rush}/spec/search_results_spec.rb +0 -0
  209. /data/{rush → vendor/rush}/spec/shell_spec.rb +0 -0
  210. /data/{rush → vendor/rush}/spec/ssh_tunnel_spec.rb +0 -0
  211. /data/{rush → vendor/rush}/spec/string_ext_spec.rb +0 -0
  212. /data/{session → vendor/session}/lib/session-2.4.0.rb +0 -0
  213. /data/{session → vendor/session}/lib/session.rb +0 -0
  214. /data/{session → vendor/session}/test/session.rb +0 -0
@@ -0,0 +1,108 @@
1
+ # ###########################################################################
2
+ # This a FileUtils extension that defines several additional commands to be
3
+ # added to the FileUtils utility functions.
4
+ #
5
+ module FileUtils
6
+ RUBY = File.join(
7
+ Config::CONFIG['bindir'],
8
+ Config::CONFIG['ruby_install_name'] + Config::CONFIG['EXEEXT']).
9
+ sub(/.*\s.*/m, '"\&"')
10
+
11
+ OPT_TABLE['sh'] = %w(noop verbose)
12
+ OPT_TABLE['ruby'] = %w(noop verbose)
13
+
14
+ # Run the system command +cmd+. If multiple arguments are given the command
15
+ # is not run with the shell (same semantics as Kernel::exec and
16
+ # Kernel::system).
17
+ #
18
+ # Example:
19
+ # sh %{ls -ltr}
20
+ #
21
+ # sh 'ls', 'file with spaces'
22
+ #
23
+ # # check exit status after command runs
24
+ # sh %{grep pattern file} do |ok, res|
25
+ # if ! ok
26
+ # puts "pattern not found (status = #{res.exitstatus})"
27
+ # end
28
+ # end
29
+ #
30
+ def sh(*cmd, &block)
31
+ options = (Hash === cmd.last) ? cmd.pop : {}
32
+ shell_runner = block_given? ? block : create_shell_runner(cmd)
33
+ set_verbose_option(options)
34
+ options[:noop] ||= RakeFileUtils.nowrite_flag
35
+ rake_check_options options, :noop, :verbose
36
+ rake_output_message cmd.join(" ") if options[:verbose]
37
+ unless options[:noop]
38
+ res = rake_system(*cmd)
39
+ status = $?
40
+ status = PseudoStatus.new(1) if !res && status.nil?
41
+ shell_runner.call(res, status)
42
+ end
43
+ end
44
+
45
+ def create_shell_runner(cmd)
46
+ show_command = cmd.join(" ")
47
+ show_command = show_command[0,42] + "..." unless $trace
48
+ block = lambda { |ok, status|
49
+ ok or fail "Command failed with status (#{status.exitstatus}): [#{show_command}]"
50
+ }
51
+ end
52
+ private :create_shell_runner
53
+
54
+ def set_verbose_option(options)
55
+ if options[:verbose].nil?
56
+ options[:verbose] = RakeFileUtils.verbose_flag.nil? || RakeFileUtils.verbose_flag
57
+ end
58
+ end
59
+ private :set_verbose_option
60
+
61
+ def rake_system(*cmd)
62
+ Rake::AltSystem.system(*cmd)
63
+ end
64
+ private :rake_system
65
+
66
+ # Run a Ruby interpreter with the given arguments.
67
+ #
68
+ # Example:
69
+ # ruby %{-pe '$_.upcase!' <README}
70
+ #
71
+ def ruby(*args,&block)
72
+ options = (Hash === args.last) ? args.pop : {}
73
+ if args.length > 1 then
74
+ sh(*([RUBY] + args + [options]), &block)
75
+ else
76
+ sh("#{RUBY} #{args.first}", options, &block)
77
+ end
78
+ end
79
+
80
+ LN_SUPPORTED = [true]
81
+
82
+ # Attempt to do a normal file link, but fall back to a copy if the link
83
+ # fails.
84
+ def safe_ln(*args)
85
+ unless LN_SUPPORTED[0]
86
+ cp(*args)
87
+ else
88
+ begin
89
+ ln(*args)
90
+ rescue StandardError, NotImplementedError => ex
91
+ LN_SUPPORTED[0] = false
92
+ cp(*args)
93
+ end
94
+ end
95
+ end
96
+
97
+ # Split a file path into individual directory names.
98
+ #
99
+ # Example:
100
+ # split_all("a/b/c") => ['a', 'b', 'c']
101
+ #
102
+ def split_all(path)
103
+ head, tail = File.split(path)
104
+ return [tail] if head == '.' || tail == '/'
105
+ return [head, tail] if head == '/'
106
+ return split_all(head) + [tail]
107
+ end
108
+ end
@@ -0,0 +1,97 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Define a package task library to aid in the definition of GEM
4
+ # packages.
5
+
6
+ require 'rubygems'
7
+ require 'rake'
8
+ require 'rake/packagetask'
9
+ require 'rubygems/user_interaction'
10
+ require 'rubygems/builder'
11
+
12
+ module Rake
13
+
14
+ # Create a package based upon a Gem spec. Gem packages, as well as
15
+ # zip files and tar/gzipped packages can be produced by this task.
16
+ #
17
+ # In addition to the Rake targets generated by PackageTask, a
18
+ # GemPackageTask will also generate the following tasks:
19
+ #
20
+ # [<b>"<em>package_dir</em>/<em>name</em>-<em>version</em>.gem"</b>]
21
+ # Create a Ruby GEM package with the given name and version.
22
+ #
23
+ # Example using a Ruby GEM spec:
24
+ #
25
+ # require 'rubygems'
26
+ #
27
+ # spec = Gem::Specification.new do |s|
28
+ # s.platform = Gem::Platform::RUBY
29
+ # s.summary = "Ruby based make-like utility."
30
+ # s.name = 'rake'
31
+ # s.version = PKG_VERSION
32
+ # s.requirements << 'none'
33
+ # s.require_path = 'lib'
34
+ # s.autorequire = 'rake'
35
+ # s.files = PKG_FILES
36
+ # s.description = <<EOF
37
+ # Rake is a Make-like program implemented in Ruby. Tasks
38
+ # and dependencies are specified in standard Ruby syntax.
39
+ # EOF
40
+ # end
41
+ #
42
+ # Rake::GemPackageTask.new(spec) do |pkg|
43
+ # pkg.need_zip = true
44
+ # pkg.need_tar = true
45
+ # end
46
+ #
47
+ class GemPackageTask < PackageTask
48
+ # Ruby GEM spec containing the metadata for this package. The
49
+ # name, version and package_files are automatically determined
50
+ # from the GEM spec and don't need to be explicitly provided.
51
+ attr_accessor :gem_spec
52
+
53
+ # Create a GEM Package task library. Automatically define the gem
54
+ # if a block is given. If no block is supplied, then +define+
55
+ # needs to be called to define the task.
56
+ def initialize(gem_spec)
57
+ init(gem_spec)
58
+ yield self if block_given?
59
+ define if block_given?
60
+ end
61
+
62
+ # Initialization tasks without the "yield self" or define
63
+ # operations.
64
+ def init(gem)
65
+ super(gem.name, gem.version)
66
+ @gem_spec = gem
67
+ @package_files += gem_spec.files if gem_spec.files
68
+ end
69
+
70
+ # Create the Rake tasks and actions specified by this
71
+ # GemPackageTask. (+define+ is automatically called if a block is
72
+ # given to +new+).
73
+ def define
74
+ super
75
+ task :package => [:gem]
76
+ desc "Build the gem file #{gem_file}"
77
+ task :gem => ["#{package_dir}/#{gem_file}"]
78
+ file "#{package_dir}/#{gem_file}" => [package_dir] + @gem_spec.files do
79
+ when_writing("Creating GEM") {
80
+ Gem::Builder.new(gem_spec).build
81
+ verbose(true) {
82
+ mv gem_file, "#{package_dir}/#{gem_file}"
83
+ }
84
+ }
85
+ end
86
+ end
87
+
88
+ def gem_file
89
+ if @gem_spec.platform == Gem::Platform::RUBY
90
+ "#{package_name}.gem"
91
+ else
92
+ "#{package_name}-#{@gem_spec.platform}.gem"
93
+ end
94
+ end
95
+
96
+ end
97
+ end
@@ -0,0 +1,51 @@
1
+ module Rake
2
+
3
+ ####################################################################
4
+ # InvocationChain tracks the chain of task invocations to detect
5
+ # circular dependencies.
6
+ class InvocationChain
7
+ def initialize(value, tail)
8
+ @value = value
9
+ @tail = tail
10
+ end
11
+
12
+ def member?(obj)
13
+ @value == obj || @tail.member?(obj)
14
+ end
15
+
16
+ def append(value)
17
+ if member?(value)
18
+ fail RuntimeError, "Circular dependency detected: #{to_s} => #{value}"
19
+ end
20
+ self.class.new(value, self)
21
+ end
22
+
23
+ def to_s
24
+ "#{prefix}#{@value}"
25
+ end
26
+
27
+ def self.append(value, chain)
28
+ chain.append(value)
29
+ end
30
+
31
+ private
32
+
33
+ def prefix
34
+ "#{@tail.to_s} => "
35
+ end
36
+
37
+ class EmptyInvocationChain
38
+ def member?(obj)
39
+ false
40
+ end
41
+ def append(value)
42
+ InvocationChain.new(value, self)
43
+ end
44
+ def to_s
45
+ "TOP"
46
+ end
47
+ end
48
+
49
+ EMPTY = EmptyInvocationChain.new
50
+ end
51
+ end
@@ -0,0 +1,16 @@
1
+ module Rake
2
+ module InvocationExceptionMixin
3
+ # Return the invocation chain (list of Rake tasks) that were in
4
+ # effect when this execption was detected by rake. May be null if
5
+ # no tasks were active.
6
+ def chain
7
+ @rake_invocation_chain ||= nil
8
+ end
9
+
10
+ # Set the invocation chain in effect when this exception was
11
+ # detected.
12
+ def chain=(value)
13
+ @rake_invocation_chain = value
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- ruby -*-
3
+
4
+ task "create:project" => ["lib", "test", "Rakefile"]
5
+
6
+ directory "lib"
7
+ directory "test"
8
+
9
+ file "Rakefile" do
10
+ File.open("Rakefile", "w") do |out|
11
+ out.puts %{# -*- ruby -*-
12
+
13
+ require 'rake/clean'
14
+ require 'rake/testtask'
15
+
16
+ task :default => :test
17
+
18
+ Rake::TestTask.new do |t|
19
+ t.verbose = false
20
+ t.test_files = FileList['test/test_*.rb']
21
+ end
22
+ }
23
+ end
24
+ end
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ module Rake
4
+
5
+ # Makefile loader to be used with the import file loader.
6
+ class MakefileLoader
7
+ include Rake::DSL
8
+
9
+ SPACE_MARK = "__&NBSP;__"
10
+
11
+ # Load the makefile dependencies in +fn+.
12
+ def load(fn)
13
+ open(fn) do |mf|
14
+ lines = mf.read
15
+ lines.gsub!(/\\ /, SPACE_MARK)
16
+ lines.gsub!(/#[^\n]*\n/m, "")
17
+ lines.gsub!(/\\\n/, ' ')
18
+ lines.split("\n").each do |line|
19
+ process_line(line)
20
+ end
21
+ end
22
+ end
23
+
24
+ private
25
+
26
+ # Process one logical line of makefile data.
27
+ def process_line(line)
28
+ file_tasks, args = line.split(':')
29
+ return if args.nil?
30
+ dependents = args.split.map { |d| respace(d) }
31
+ file_tasks.strip.split.each do |file_task|
32
+ file_task = respace(file_task)
33
+ file file_task => dependents
34
+ end
35
+ end
36
+
37
+ def respace(str)
38
+ str.gsub(/#{SPACE_MARK}/, ' ')
39
+ end
40
+ end
41
+
42
+ # Install the handler
43
+ Rake.application.add_loader('mf', MakefileLoader.new)
44
+ end
@@ -0,0 +1,16 @@
1
+ module Rake
2
+
3
+ # Same as a regular task, but the immediate prerequisites are done in
4
+ # parallel using Ruby threads.
5
+ #
6
+ class MultiTask < Task
7
+ private
8
+ def invoke_prerequisites(args, invocation_chain)
9
+ threads = @prerequisites.collect { |p|
10
+ Thread.new(p) { |r| application[r, @scope].invoke_with_call_chain(args, invocation_chain) }
11
+ }
12
+ threads.each { |t| t.join }
13
+ end
14
+ end
15
+
16
+ end
@@ -0,0 +1,25 @@
1
+ module Rake
2
+
3
+ # The NameSpace class will lookup task names in the the scope
4
+ # defined by a +namespace+ command.
5
+ #
6
+ class NameSpace
7
+
8
+ # Create a namespace lookup object using the given task manager
9
+ # and the list of scopes.
10
+ def initialize(task_manager, scope_list)
11
+ @task_manager = task_manager
12
+ @scope = scope_list.dup
13
+ end
14
+
15
+ # Lookup a task named +name+ in the namespace.
16
+ def [](name)
17
+ @task_manager.lookup(name, @scope)
18
+ end
19
+
20
+ # Return the list of tasks defined in this and nested namespaces.
21
+ def tasks
22
+ @task_manager.tasks_in_scope(@scope)
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,184 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Define a package task libarary to aid in the definition of
4
+ # redistributable package files.
5
+
6
+ require 'rake'
7
+ require 'rake/tasklib'
8
+
9
+ module Rake
10
+
11
+ # Create a packaging task that will package the project into
12
+ # distributable files (e.g zip archive or tar files).
13
+ #
14
+ # The PackageTask will create the following targets:
15
+ #
16
+ # [<b>:package</b>]
17
+ # Create all the requested package files.
18
+ #
19
+ # [<b>:clobber_package</b>]
20
+ # Delete all the package files. This target is automatically
21
+ # added to the main clobber target.
22
+ #
23
+ # [<b>:repackage</b>]
24
+ # Rebuild the package files from scratch, even if they are not out
25
+ # of date.
26
+ #
27
+ # [<b>"<em>package_dir</em>/<em>name</em>-<em>version</em>.tgz"</b>]
28
+ # Create a gzipped tar package (if <em>need_tar</em> is true).
29
+ #
30
+ # [<b>"<em>package_dir</em>/<em>name</em>-<em>version</em>.tar.gz"</b>]
31
+ # Create a gzipped tar package (if <em>need_tar_gz</em> is true).
32
+ #
33
+ # [<b>"<em>package_dir</em>/<em>name</em>-<em>version</em>.tar.bz2"</b>]
34
+ # Create a bzip2'd tar package (if <em>need_tar_bz2</em> is true).
35
+ #
36
+ # [<b>"<em>package_dir</em>/<em>name</em>-<em>version</em>.zip"</b>]
37
+ # Create a zip package archive (if <em>need_zip</em> is true).
38
+ #
39
+ # Example:
40
+ #
41
+ # Rake::PackageTask.new("rake", "1.2.3") do |p|
42
+ # p.need_tar = true
43
+ # p.package_files.include("lib/**/*.rb")
44
+ # end
45
+ #
46
+ class PackageTask < TaskLib
47
+ # Name of the package (from the GEM Spec).
48
+ attr_accessor :name
49
+
50
+ # Version of the package (e.g. '1.3.2').
51
+ attr_accessor :version
52
+
53
+ # Directory used to store the package files (default is 'pkg').
54
+ attr_accessor :package_dir
55
+
56
+ # True if a gzipped tar file (tgz) should be produced (default is false).
57
+ attr_accessor :need_tar
58
+
59
+ # True if a gzipped tar file (tar.gz) should be produced (default is false).
60
+ attr_accessor :need_tar_gz
61
+
62
+ # True if a bzip2'd tar file (tar.bz2) should be produced (default is false).
63
+ attr_accessor :need_tar_bz2
64
+
65
+ # True if a zip file should be produced (default is false)
66
+ attr_accessor :need_zip
67
+
68
+ # List of files to be included in the package.
69
+ attr_accessor :package_files
70
+
71
+ # Tar command for gzipped or bzip2ed archives. The default is 'tar'.
72
+ attr_accessor :tar_command
73
+
74
+ # Zip command for zipped archives. The default is 'zip'.
75
+ attr_accessor :zip_command
76
+
77
+ # Create a Package Task with the given name and version.
78
+ def initialize(name=nil, version=nil)
79
+ init(name, version)
80
+ yield self if block_given?
81
+ define unless name.nil?
82
+ end
83
+
84
+ # Initialization that bypasses the "yield self" and "define" step.
85
+ def init(name, version)
86
+ @name = name
87
+ @version = version
88
+ @package_files = Rake::FileList.new
89
+ @package_dir = 'pkg'
90
+ @need_tar = false
91
+ @need_tar_gz = false
92
+ @need_tar_bz2 = false
93
+ @need_zip = false
94
+ @tar_command = 'tar'
95
+ @zip_command = 'zip'
96
+ end
97
+
98
+ # Create the tasks defined by this task library.
99
+ def define
100
+ fail "Version required (or :noversion)" if @version.nil?
101
+ @version = nil if :noversion == @version
102
+
103
+ desc "Build all the packages"
104
+ task :package
105
+
106
+ desc "Force a rebuild of the package files"
107
+ task :repackage => [:clobber_package, :package]
108
+
109
+ desc "Remove package products"
110
+ task :clobber_package do
111
+ rm_r package_dir rescue nil
112
+ end
113
+
114
+ task :clobber => [:clobber_package]
115
+
116
+ [
117
+ [need_tar, tgz_file, "z"],
118
+ [need_tar_gz, tar_gz_file, "z"],
119
+ [need_tar_bz2, tar_bz2_file, "j"]
120
+ ].each do |(need, file, flag)|
121
+ if need
122
+ task :package => ["#{package_dir}/#{file}"]
123
+ file "#{package_dir}/#{file}" => [package_dir_path] + package_files do
124
+ chdir(package_dir) do
125
+ sh %{#{@tar_command} #{flag}cvf #{file} #{package_name}}
126
+ end
127
+ end
128
+ end
129
+ end
130
+
131
+ if need_zip
132
+ task :package => ["#{package_dir}/#{zip_file}"]
133
+ file "#{package_dir}/#{zip_file}" => [package_dir_path] + package_files do
134
+ chdir(package_dir) do
135
+ sh %{#{@zip_command} -r #{zip_file} #{package_name}}
136
+ end
137
+ end
138
+ end
139
+
140
+ directory package_dir
141
+
142
+ file package_dir_path => @package_files do
143
+ mkdir_p package_dir rescue nil
144
+ @package_files.each do |fn|
145
+ f = File.join(package_dir_path, fn)
146
+ fdir = File.dirname(f)
147
+ mkdir_p(fdir) if !File.exist?(fdir)
148
+ if File.directory?(fn)
149
+ mkdir_p(f)
150
+ else
151
+ rm_f f
152
+ safe_ln(fn, f)
153
+ end
154
+ end
155
+ end
156
+ self
157
+ end
158
+
159
+ def package_name
160
+ @version ? "#{@name}-#{@version}" : @name
161
+ end
162
+
163
+ def package_dir_path
164
+ "#{package_dir}/#{package_name}"
165
+ end
166
+
167
+ def tgz_file
168
+ "#{package_name}.tgz"
169
+ end
170
+
171
+ def tar_gz_file
172
+ "#{package_name}.tar.gz"
173
+ end
174
+
175
+ def tar_bz2_file
176
+ "#{package_name}.tar.bz2"
177
+ end
178
+
179
+ def zip_file
180
+ "#{package_name}.zip"
181
+ end
182
+ end
183
+
184
+ end
@@ -0,0 +1,24 @@
1
+ module Rake
2
+
3
+ ####################################################################
4
+ # Exit status class for times the system just gives us a nil.
5
+ class PseudoStatus
6
+ attr_reader :exitstatus
7
+ def initialize(code=0)
8
+ @exitstatus = code
9
+ end
10
+ def to_i
11
+ @exitstatus << 8
12
+ end
13
+ def >>(n)
14
+ to_i >> n
15
+ end
16
+ def stopped?
17
+ false
18
+ end
19
+ def exited?
20
+ true
21
+ end
22
+ end
23
+
24
+ end