rjack-tarpit 1.4.1 → 2.0.0

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 (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