rjack-tarpit 1.4.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/History.rdoc +13 -9
  2. data/Manifest.txt +39 -0
  3. data/NOTICE.txt +1 -1
  4. data/README.rdoc +85 -30
  5. data/Rakefile +11 -30
  6. data/lib/rjack-tarpit.rb +15 -456
  7. data/lib/rjack-tarpit/base.rb +22 -0
  8. data/lib/rjack-tarpit/base_strategy.rb +175 -0
  9. data/lib/rjack-tarpit/clean.rb +43 -0
  10. data/lib/rjack-tarpit/doc.rb +67 -0
  11. data/lib/rjack-tarpit/gem.rb +119 -0
  12. data/lib/rjack-tarpit/git.rb +45 -0
  13. data/lib/rjack-tarpit/line_match.rb +134 -0
  14. data/lib/rjack-tarpit/readme_parser.rb +74 -0
  15. data/lib/rjack-tarpit/spec.rb +314 -0
  16. data/lib/rjack-tarpit/test.rb +110 -0
  17. data/lib/rjack-tarpit/util.rb +37 -0
  18. data/test/jproject/History.rdoc +2 -0
  19. data/test/jproject/Manifest.static +10 -0
  20. data/test/jproject/Manifest.txt +11 -0
  21. data/test/jproject/NOTICE.txt +2 -0
  22. data/test/jproject/README.rdoc +24 -0
  23. data/test/jproject/Rakefile +7 -0
  24. data/test/jproject/jproject.gemspec +15 -0
  25. data/test/jproject/lib/jproject.rb +11 -0
  26. data/test/jproject/lib/jproject/base.rb +3 -0
  27. data/test/jproject/pom.xml +75 -0
  28. data/test/jproject/test/setup.rb +7 -0
  29. data/test/jproject/test/test_jproject.rb +14 -0
  30. data/test/setup.rb +7 -0
  31. data/test/test_projects.rb +71 -0
  32. data/test/test_readme_parser.rb +97 -0
  33. data/test/test_tarpit.rb +33 -0
  34. data/test/zookeeper/History.rdoc +2 -0
  35. data/test/zookeeper/Manifest.static +10 -0
  36. data/test/zookeeper/Manifest.txt +13 -0
  37. data/test/zookeeper/README.rdoc +23 -0
  38. data/test/zookeeper/Rakefile +7 -0
  39. data/test/zookeeper/assembly.xml +15 -0
  40. data/test/zookeeper/lib/rjack-zookeeper.rb +29 -0
  41. data/test/zookeeper/lib/rjack-zookeeper/base.rb +23 -0
  42. data/test/zookeeper/pom.xml +73 -0
  43. data/test/zookeeper/rjack-zookeeper.gemspec +18 -0
  44. data/test/zookeeper/test/setup.rb +17 -0
  45. data/test/zookeeper/{pkg/rjack-zookeeper-3.4.1.0-java/test → test}/test_zookeeper.rb +0 -0
  46. metadata +132 -66
  47. data/.gemtest +0 -0
@@ -0,0 +1,22 @@
1
+ #--
2
+ # Copyright (c) 2009-2012 David Kellum
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License"); you
5
+ # may not use this file except in compliance with the License. You
6
+ # may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
13
+ # implied. See the License for the specific language governing
14
+ # permissions and limitations under the License.
15
+ #++
16
+
17
+ module RJack
18
+ module TarPit
19
+ MINOR_VERSION = '2.0'
20
+ VERSION = MINOR_VERSION + '.0'
21
+ end
22
+ end
@@ -0,0 +1,175 @@
1
+ #--
2
+ # Copyright (c) 2009-2012 David Kellum
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License"); you
5
+ # may not use this file except in compliance with the License. You
6
+ # may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
13
+ # implied. See the License for the specific language governing
14
+ # permissions and limitations under the License.
15
+ #++
16
+
17
+ require 'rjack-tarpit/base'
18
+ require 'rjack-tarpit/util'
19
+ require 'rjack-tarpit/spec'
20
+
21
+ require 'rjack-tarpit/test'
22
+ require 'rjack-tarpit/gem'
23
+ require 'rjack-tarpit/clean'
24
+ require 'rjack-tarpit/line_match'
25
+ require 'rjack-tarpit/doc'
26
+ require 'rjack-tarpit/git'
27
+
28
+ module RJack::TarPit
29
+
30
+ # Base class for Rake task generation.
31
+ class BaseStrategy
32
+
33
+ #For rack ~> 0.9.0
34
+ include Rake::DSL if defined?( Rake::DSL )
35
+
36
+ include TestTaskDefiner
37
+ include GemTaskDefiner
38
+ include CleanTaskDefiner
39
+ include LineMatchTaskDefiner
40
+ include DocTaskDefiner
41
+ include GitTaskDefiner
42
+
43
+ include Util
44
+
45
+ # The augmented Gem::Specification as constructed.
46
+ attr_reader :spec
47
+
48
+ # See TarPit.new
49
+ def initialize( spec )
50
+ @defines = [ :define_maven_tasks ]
51
+ super()
52
+
53
+ @spec = spec
54
+
55
+ @install_request = Rake.application.top_level_tasks.include?( "install" )
56
+ end
57
+
58
+ def add_define_hook( sym )
59
+ @defines << sym
60
+ end
61
+
62
+ # Define rake tasks (given settings)
63
+ def define_tasks
64
+ @defines.each { |sym| send( sym ) }
65
+ end
66
+
67
+ # Define maven tasks based on spec strategy and other details.
68
+ def define_maven_tasks
69
+ from_assembly = ( spec.maven_strategy == :jars_from_assembly )
70
+ do_maven = from_assembly || spec.jars.size > 0
71
+
72
+ define_maven_package_task if do_maven
73
+
74
+ if do_maven || spec.generated_files
75
+ define_manifest_task
76
+ task( :manifest => [ MVN_STATE_FILE ] ) if from_assembly
77
+ end
78
+
79
+ define_post_maven_tasks if do_maven
80
+ end
81
+
82
+ # Define task for dynamically generating Manifest.txt
83
+ def define_manifest_task
84
+
85
+ if File.exist?( 'Manifest.static' )
86
+ file 'Manifest.txt' => [ 'Manifest.static' ]
87
+ end
88
+
89
+ gf = clean_list( spec.generated_files ).sort
90
+ [ :gem, :test ].each { |t| task t => gf }
91
+
92
+ unless gf.empty?
93
+ task :gen_clean do
94
+ rm_f gf
95
+ end
96
+ task :clean => :gen_clean
97
+ end
98
+
99
+ desc "Force update of Manifest.txt"
100
+ task :manifest do
101
+ spec.generate_manifest
102
+ end
103
+
104
+ mtask = file 'Manifest.txt' do
105
+ spec.generate_manifest
106
+ end
107
+
108
+ mtask
109
+ end
110
+
111
+ # File touched to record the time of last successful 'mvn
112
+ # package' run.
113
+ MVN_STATE_FILE = 'target/.tarpit'
114
+ MVN_STATE_FILE_INSTALL = 'target/.tarpit-install'
115
+
116
+ # Define a file task tracking calls to "mvn package"
117
+ def define_maven_package_task
118
+ [ MVN_STATE_FILE, MVN_STATE_FILE_INSTALL ].each do |sf|
119
+ file sf => maven_dependencies do
120
+ run_maven
121
+ end
122
+ end
123
+
124
+ task :install => MVN_STATE_FILE_INSTALL
125
+ end
126
+
127
+ # Run Maven mvn package or install and touch state files.
128
+ def run_maven
129
+ # Delay till now, in case we were not running on jvm
130
+ require 'rjack-maven'
131
+
132
+ target = @install_request ? 'install' : 'package'
133
+
134
+ status = RJack::Maven.launch( [ target ] )
135
+ unless status == 0
136
+ raise "TARPIT: Maven #{target} failed (exit code: #{status})"
137
+ end
138
+
139
+ touch( MVN_STATE_FILE )
140
+ touch( MVN_STATE_FILE_INSTALL ) if @install_request
141
+ end
142
+
143
+ # Define file tasks for all jar symlinks and other misc. maven
144
+ # associated tasks like :mvn_clean.
145
+ def define_post_maven_tasks
146
+ jfrom = spec.jar_from
147
+ spec.jars.each do |jar|
148
+ from = File.join( jfrom, jar )
149
+ dest = File.join( spec.jar_dest, jar )
150
+ file from => [ MVN_STATE_FILE ]
151
+ file dest => [ from ] do
152
+ ln( from, dest, :force => true )
153
+ end
154
+ [ :gem, :test ].each { |t| task t => [ dest ] }
155
+ end
156
+
157
+ task :mvn_clean do
158
+ spec.remove_dest_jars
159
+ rm_rf 'target' if File.directory?( 'target' )
160
+ end
161
+ task :clean => :mvn_clean
162
+ end
163
+
164
+ # Dependencies on "mvn package" including pom.xml, any assembly.xml,
165
+ # all files under the "src" directory.
166
+ def maven_dependencies
167
+ deps = [ 'pom.xml' ]
168
+ deps << 'assembly.xml' if File.exist?( 'assembly.xml' )
169
+ deps += FileList[ "src/**/*" ].exclude { |f| ! File.file?( f ) }
170
+ deps
171
+ end
172
+
173
+ end
174
+
175
+ end
@@ -0,0 +1,43 @@
1
+ #--
2
+ # Copyright (c) 2009-2012 David Kellum
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License"); you
5
+ # may not use this file except in compliance with the License. You may
6
+ # obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
13
+ # implied. See the License for the specific language governing
14
+ # permissions and limitations under the License.
15
+ #++
16
+
17
+ module RJack::TarPit
18
+
19
+ module CleanTaskDefiner
20
+
21
+ # An array of file patterns to delete on clean.
22
+ attr_accessor :clean_globs
23
+
24
+ def initialize
25
+ super
26
+
27
+ @clean_globs ||= %w[ .source_index **/*~ **/.*~ ]
28
+
29
+ add_define_hook( :define_clean_tasks )
30
+ end
31
+
32
+ def define_clean_tasks
33
+ desc 'Clean up (common backup file patterns)'
34
+ task :clean do
35
+ globs = clean_globs + [ 'pkg', rdoc_dir ]
36
+ files = globs.map { |p| Dir[ p ] }.flatten
37
+ rm_rf( files, :verbose => true ) unless files.empty?
38
+ end
39
+ end
40
+
41
+ end
42
+
43
+ end
@@ -0,0 +1,67 @@
1
+ #--
2
+ # Copyright (c) 2009-2012 David Kellum
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License"); you
5
+ # may not use this file except in compliance with the License. You may
6
+ # obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
13
+ # implied. See the License for the specific language governing
14
+ # permissions and limitations under the License.
15
+ #++
16
+
17
+ module RJack::TarPit
18
+
19
+ module DocTaskDefiner
20
+
21
+ # Local destination directory for RDoc generated files.
22
+ # (default: doc)
23
+ attr_accessor :rdoc_dir
24
+
25
+ # Remote destinations array for publish_rdoc. (default: [])
26
+ attr_accessor :rdoc_destinations
27
+
28
+ # Rsync flags for publish_rdoc. (default: %w[ -a -u -i ])
29
+ attr_accessor :publish_rdoc_rsync_flags
30
+
31
+ def initialize
32
+ super
33
+
34
+ @rdoc_dir = 'doc'
35
+ @rdoc_destinations = []
36
+ @publish_rdoc_rsync_flags = %w[ -a -u -i ]
37
+
38
+ add_define_hook( :define_doc_tasks )
39
+ end
40
+
41
+ def define_doc_tasks
42
+ require 'rdoc/task'
43
+
44
+ RDoc::Task.new( :rdoc ) do |t|
45
+ t.rdoc_dir = rdoc_dir
46
+ t.rdoc_files += spec.require_paths
47
+ t.rdoc_files += spec.extra_rdoc_files
48
+ t.options = spec.rdoc_options
49
+ end
50
+
51
+ unless rdoc_destinations.empty?
52
+ desc "Publish rdoc to #{ rdoc_destinations.join( ', ' ) }"
53
+ task :publish_rdoc => [ :docs ] do
54
+ rdoc_destinations.each do |dest|
55
+ sh( *[ 'rsync', publish_rdoc_rsync_flags,
56
+ rdoc_dir + '/', dest ].flatten )
57
+ end
58
+ end
59
+ end
60
+
61
+ desc "Alias rdoc task"
62
+ task :docs => [ :rdoc ]
63
+ end
64
+
65
+ end
66
+
67
+ end
@@ -0,0 +1,119 @@
1
+ #--
2
+ # Copyright (c) 2009-2012 David Kellum
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License"); you
5
+ # may not use this file except in compliance with the License. You may
6
+ # obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
13
+ # implied. See the License for the specific language governing
14
+ # permissions and limitations under the License.
15
+ #++
16
+
17
+ require 'rubygems/package_task'
18
+
19
+ module RJack::TarPit
20
+
21
+ module GemTaskDefiner
22
+
23
+ # Should package create a tarball? (default: false)
24
+ attr_accessor :need_tar
25
+
26
+ # Should package create a zipfile? (default: false)
27
+ attr_accessor :need_zip
28
+
29
+ def initialize
30
+ super
31
+
32
+ @need_tar = false
33
+ @need_zip = false
34
+
35
+ add_define_hook( :define_gem_tasks )
36
+ end
37
+
38
+ def define_gem_tasks
39
+
40
+ Gem::PackageTask.new( spec ) do |pkg|
41
+ pkg.need_tar = @need_tar
42
+ pkg.need_zip = @need_zip
43
+ end
44
+
45
+ desc 'Dump plain ruby Gem::Specification'
46
+ task :debug_gem do
47
+ puts spec.to_ruby
48
+ end
49
+
50
+ desc "gem push (gemcutter)"
51
+ task :push => [ :gem ] do
52
+ require 'rubygems'
53
+ require 'rubygems/command_manager'
54
+ cm = Gem::CommandManager.instance
55
+ cm.run( gem_config( 'push', '-V', gem_file ) )
56
+ end
57
+
58
+ desc "gem(+maven) install"
59
+ task :install => [ :gem ] do
60
+ require 'rubygems'
61
+ require 'rubygems/command_manager'
62
+ cm = Gem::CommandManager.instance
63
+ begin
64
+ cm.run( gem_config( 'install', '--local', '-V', gem_file ) )
65
+ rescue Gem::SystemExitException => x
66
+ raise "Install failed (#{x.exit_code})" if x.exit_code != 0
67
+ end
68
+ end
69
+
70
+ desc "gem install missing/all dev dependencies"
71
+ task( :install_deps, :force ) do |t,args|
72
+ require 'rubygems'
73
+ require 'rubygems/command_manager'
74
+ force = ( args[:force] == 'force' )
75
+ ( @spec.extra_deps + @spec.extra_dev_deps ).each do |dep|
76
+ if force
77
+ gem_install_dep( dep )
78
+ else
79
+ begin
80
+ gem( *dep )
81
+ rescue Gem::LoadError => e
82
+ puts "Gem dep: " + e.to_s
83
+ gem_install_dep( dep )
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
89
+
90
+ def gem_install_dep( dep )
91
+ puts "Install: " + dep.inspect
92
+ cm = Gem::CommandManager.instance
93
+ c = [ 'install', '--remote', '-V', dep.first ]
94
+ c += dep[1..-1].map { |r| [ '-v', r ] }.flatten
95
+ cm.run( gem_config( *c ) )
96
+ rescue Gem::SystemExitException => x
97
+ raise "Install failed (#{x.exit_code})" if x.exit_code != 0
98
+ end
99
+
100
+ def gem_file
101
+ parts = [ spec.name, spec.version ]
102
+ p = spec.platform
103
+ parts << 'java' if p.respond_to?( :os ) && p.os == 'java'
104
+
105
+ "pkg/#{ parts.join( '-' ) }.gem"
106
+ end
107
+
108
+ def gem_config( command, *args )
109
+ cargs = [ 'gem', command ].map do |cmd|
110
+ conf = Gem.configuration[ cmd ]
111
+ conf.is_a?( String ) ? conf.split( ' ' ) : Array( conf )
112
+ end
113
+ cargs.flatten!
114
+ [ command ] + cargs + args
115
+ end
116
+
117
+ end
118
+
119
+ end
@@ -0,0 +1,45 @@
1
+ #--
2
+ # Copyright (c) 2009-2012 David Kellum
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License"); you
5
+ # may not use this file except in compliance with the License. You may
6
+ # obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
13
+ # implied. See the License for the specific language governing
14
+ # permissions and limitations under the License.
15
+ #++
16
+
17
+ module RJack::TarPit
18
+
19
+ module GitTaskDefiner
20
+
21
+ def initialize
22
+ super
23
+
24
+ add_define_hook( :define_git_tasks )
25
+ end
26
+
27
+ # Define git based :tag task
28
+ def define_git_tasks
29
+ desc "git tag current version"
30
+ task :tag do
31
+ tag = [ spec.name, spec.version ].join( '-' )
32
+ dname = Rake.original_dir
33
+ dname = '.' if Dir.getwd == dname
34
+ delta = `git status --porcelain -- #{dname} 2>&1`.split(/^/)
35
+ if delta.length > 0
36
+ puts delta
37
+ raise "Commit these changes before tagging"
38
+ end
39
+ sh %{git tag -s -f -m "tag [#{tag}]" "#{tag}"}
40
+ end
41
+ end
42
+
43
+ end
44
+
45
+ end