raven 1.2.2 → 1.2.3

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.
@@ -28,8 +28,6 @@
28
28
  # require 'raven'
29
29
  # require 'rake/clean'
30
30
  #
31
- # set_sources(["http://localhost:2233"])
32
- #
33
31
  # CLEAN.include('target')
34
32
  #
35
33
  # dependency 'compile_deps' do |t|
@@ -108,9 +108,9 @@ module Raven
108
108
  installer.install(av[1].length > 0 ? av[1] : nil,
109
109
  groupId, av[2].length > 0 ? av[2] : nil, all, allver)
110
110
  rescue GemTooManyInstallError => toomany
111
- puts "Couldn't install a gem from name #{av[1]||groupId}, more than on potential"
111
+ puts "Couldn't install a gem from name #{av[1]||groupId}, more than one potential"
112
112
  puts "gem was found for this name. If this is intentional and you want to"
113
- puts "install all these Gems please run again with the --all option."
113
+ puts "install all these gems please run again with the --all option."
114
114
  toomany.artifacts.each { |a| puts " #{a.to_s}"}
115
115
  end
116
116
  end
@@ -87,6 +87,10 @@ module Raven
87
87
  raise(RuntimeError, notfound.join($/) + $/ + ambiguous.join($/))
88
88
  end
89
89
  end
90
+ # Getting dependencies from eventual prerequisites
91
+ Raven.prereq_filter(prerequisites, :gem_deps) do |dep_task|
92
+ @gem_deps += dep_task.gem_deps if dep_task.gem_deps
93
+ end
90
94
  end
91
95
 
92
96
  def deps
@@ -138,8 +142,14 @@ module Raven
138
142
  puts "Using local gem #{local[0].name} (#{local[0].version}) to satisfy dependency #{gemname}" if RakeFileUtils.verbose_flag && local
139
143
  return local if local
140
144
  begin
141
- gems = Gem::RemoteInstaller.new().search(/.*#{gemname}$/)
145
+ if (Gem::RubyGemsPackageVersion != "0.9.0")
146
+ gems = Gem::SourceInfoCache.search(/.*#{gemname}$/)
147
+ else
148
+ gems = Gem::RemoteInstaller.new().search(/.*#{gemname}$/)
149
+ end
142
150
  rescue Exception => rt
151
+ puts rt.to_s
152
+ puts rt.backtrace.join("\n")
143
153
  puts "The gem #{gemname} from your dependencies couldn't be found locally"
144
154
  puts "and the connection to a Gem repository failed."
145
155
  exit
@@ -0,0 +1,182 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Copyright 2006 Matthieu Riou
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require 'rubygems'
18
+ require 'rake'
19
+ require 'set'
20
+ require 'fileutils'
21
+
22
+ module Raven
23
+
24
+ class GemNotFoundException < RuntimeError; end
25
+ class AmbiguousGemException < RuntimeError; end
26
+
27
+ # Task used to declare a set of dependencies your project relies
28
+ # upon. As many dependency tasks as necessary can be declared
29
+ # (each grouping as many dependency as you like). For each declared
30
+ # dependency, a Gem is searched in your local repository and then if
31
+ # it can't be found, in the specified remote repositories (by setting
32
+ # <em>sources</em>). Gems are searched by name ENDING with the name
33
+ # you provided.
34
+ #
35
+ # As an example, specifying 'wsdl4j' will correctly find the Gem
36
+ # named wsdl4j-wsdl4j but specifying 'axis2' WILL NOT give you all
37
+ # axis2 Gems. Actually only one Gem can be selected by each of the
38
+ # specified Gem, otherwise you'll see an error asking you to be more
39
+ # specific.
40
+ #
41
+ # Once the correct Gem has been found, if it's not local it will be
42
+ # automatically be downloaded and installed.
43
+ #
44
+ # If no version is provided, and the Gem isn't present locally, the
45
+ # latest version will be fetched. If a local version can be found
46
+ # locally, this version will be used without any download.
47
+ #
48
+ # Example of dependency specification:
49
+ #
50
+ # dependency 'deps' do |t|
51
+ # t.deps << [{'commons-logging' => '1.1'}, 'commons-pool']
52
+ # t.deps << ['commons-lang', 'wsdl4j', 'log4j']
53
+ # end
54
+ #
55
+ # See also Raven::MavenLocalRepoImport and Raven::GemRepoBuilder to
56
+ # learn more about how to build a Gem repository to get started.
57
+ #
58
+ # Alternatively dependencies can be directly declared manually on
59
+ # jar files in your file system. This allows you to manage your
60
+ # dependencies yourself without using Gem or any other repository.
61
+ #
62
+ # dependency 'deps' do |t|
63
+ # t.libs = Dir.glob('lib/**/*.jar')
64
+ # end
65
+ class DependencyTask < Rake::Task
66
+ attr_reader :gem_deps
67
+
68
+ # Check dependencies and installs them sometimes.
69
+ def execute
70
+ super
71
+ ambiguous, notfound = [], []
72
+ # Installing missing Gems (if there are)
73
+ if @deps
74
+ @gem_deps = @deps.flatten.collect do |dep|
75
+ # Wrapping in an array, we might not have an array with version
76
+ # as dependency.
77
+ deparr = dep.respond_to?(:to_a) ? dep.to_a.flatten : [dep]
78
+ begin
79
+ Raven::GemInstaller.install_or_not(*deparr)
80
+ rescue GemNotFoundException => gnfe
81
+ notfound << gnfe.message
82
+ rescue AmbiguousGemException => age
83
+ ambiguous << age
84
+ end
85
+ end
86
+ unless notfound.empty? && ambiguous.empty?
87
+ raise(RuntimeError, notfound.join($/) + $/ + ambiguous.join($/))
88
+ end
89
+ end
90
+ # Getting dependencies from eventual prerequisites
91
+ Raven.prereq_filter(prerequisites, :gem_deps) do |dep_task|
92
+ @gem_deps += dep_task.gem_deps if dep_task.gem_deps
93
+ end
94
+ end
95
+
96
+ def deps
97
+ @deps ||= []
98
+ end
99
+
100
+ def libs
101
+ @libs ||= []
102
+ end
103
+ def libs=(l)
104
+ @libs = l
105
+ end
106
+ end
107
+
108
+ # Calls Gem installer to install a Gem (very predictible behaviour).
109
+ # Well, but if the Gem is already there, it won't be installed. This
110
+ # guy's a smart one.
111
+ module GemInstaller
112
+
113
+ # Possibly installs a Gem... or not. If it's already present installation
114
+ # will just be skipped. The path to the gem root is always returned though.
115
+ # The provided gem name is first looked up with a query in the repositories
116
+ # to support partial names (i.e only artifactId).
117
+ def self.install_or_not(gemname, version='*')
118
+ # TODO Add support for regular expressions for gem name, allows multiple
119
+ # selected gems
120
+ hems = resolve(gemname, version)
121
+ gem_spec = hems[0]
122
+ # TODO Handle Gem dependencies
123
+ unless hems[1]
124
+ installer = Gem::RemoteInstaller.new
125
+ params = [gem_spec.name, gem_spec.version.to_s, false]
126
+ params << RAVEN_HOME if defined?(GEMS_IN_HOME)
127
+ gem_spec = installer.install(*params)[0]
128
+ end
129
+ gem_spec.full_gem_path
130
+ end
131
+
132
+ # Resolves a Gem partial name (like only the artifactId) to a full name
133
+ # and eventually checks its versions. Returns an array with the found Gem
134
+ # in the first position and a boolean indicating whether the array has
135
+ # been found locally or not in second position.
136
+ def self.resolve(gemname, version)
137
+ # Search local occurences first, it's faster. Moreover we'll only
138
+ # return local versions, avoiding a constant download of latest versions
139
+ # when nothing specific is provided.
140
+ gems = Gem::cache.search(/.*#{gemname}$/)
141
+ local = select_gem(gemname, version, gems, true)
142
+ puts "Using local gem #{local[0].name} (#{local[0].version}) to satisfy dependency #{gemname}" if RakeFileUtils.verbose_flag && local
143
+ return local if local
144
+ begin
145
+ gems = Gem::SourceInfoCache.search(/.*#{gemname}$/)
146
+ rescue Exception => rt
147
+ puts rt.to_s
148
+ puts rt.backtrace.join("\n")
149
+ puts "The gem #{gemname} from your dependencies couldn't be found locally"
150
+ puts "and the connection to a Gem repository failed."
151
+ exit
152
+ end
153
+ remote = select_gem(gemname, version, gems.flatten, false)
154
+ puts "Downloading remote gem #{remote[0].name} (#{remote[0].version}) to satisfy dependency #{gemname}" if RakeFileUtils.verbose_flag && remote
155
+ return remote if remote
156
+
157
+ # Nothing found: Houston, we have a problem
158
+ raise(GemNotFoundException, "Couldn't find any Gem from name #{gemname} and version #{version}") unless remote
159
+ end
160
+
161
+ private
162
+
163
+ def self.select_gem(gemname, version, gems, local)
164
+ # We can only have different versions of the same Gem, different Gems
165
+ # is a problem.
166
+ if gems.collect{|gem| gem.name}.uniq.size > 1
167
+ raise(AmbiguousGemException, "Several different Gems can be found from name #{gemname} (#{gems.collect{|gem| gem.name}.uniq.join(' ')}), please be more specific.")
168
+ end
169
+ version_gems = Hash[*gems.collect{ |gem| [gem.version.to_s, gem] }.flatten]
170
+ # Latest one will do when no version has been given.
171
+ return [version_gems.sort.reverse[0][1], local] if (version == '*' && !version_gems.empty?)
172
+ return [version_gems[version], local] if (version_gems[version] && !version_gems.empty?)
173
+ nil
174
+ end
175
+ end
176
+
177
+ end
178
+
179
+ # Shortcut to the dependency task creation.
180
+ def dependency(args, &block)
181
+ Raven::DependencyTask.define_task(args, &block)
182
+ end
@@ -45,7 +45,11 @@ module Gem
45
45
  @sources = s
46
46
  end
47
47
  end
48
- require_gem("sources")
48
+ if (Gem::RubyGemsPackageVersion != "0.9.0")
49
+ gem("sources")
50
+ else
51
+ require_gem("sources")
52
+ end
49
53
  def sources; Gem.sources; end
50
54
  def set_sources(s) Gem.sources = s; end
51
55
  set_sources(["http://gems.rubyraven.org/"])
@@ -53,10 +57,10 @@ set_sources(["http://gems.rubyraven.org/"])
53
57
  # To avoid polluting the regular Gem repository, we store our gems
54
58
  # under the user home directory.
55
59
  GEMS_IN_HOME = true
56
- USER_HOME = ENV['HOME'] ? ENV['HOME'] : ENV['USERPROFILE']
57
- RAVEN_HOME = USER_HOME + '/.raven/'
60
+ USER_HOME = ENV['HOME'] ? ENV['HOME'] : ENV['USERPROFILE'].gsub('\\', '/')
61
+ RAVEN_HOME = File.join(USER_HOME, '.raven')
58
62
  FileUtils.mkdir(RAVEN_HOME) unless File.exist?(RAVEN_HOME)
59
- Dir.glob(RAVEN_HOME + "/specifications/*.gemspec").each do |file_name|
63
+ Dir.glob(File.join(RAVEN_HOME, "specifications", "*.gemspec")).each do |file_name|
60
64
  gemspec = Gem::SourceIndex.load_specification(file_name.untaint)
61
65
  Gem::cache.add_spec(gemspec) if gemspec
62
66
  end
@@ -65,21 +69,29 @@ module Gem
65
69
  # Making the remote installer silent. Otherwise it always asks you to
66
70
  # choose the version you want to install.
67
71
  class RemoteInstaller
68
- def find_gem_to_install(gem_name, version_requirement, caches)
69
- specs_n_sources = []
70
- caches.each do |source, cache|
71
- cache.each do |name, spec|
72
- if /^#{gem_name}$/i === spec.name &&
73
- version_requirement.satisfied_by?(spec.version) then
74
- specs_n_sources << [spec, source]
72
+ if (Gem::RubyGemsPackageVersion != "0.9.0")
73
+ def find_gem_to_install(gem_name, version_requirement)
74
+ specs_n_sources = specs_n_sources_matching gem_name, version_requirement
75
+ # we always give exact name / version to RubyGems
76
+ specs_n_sources.first
77
+ end
78
+ else
79
+ def find_gem_to_install(gem_name, version_requirement, caches)
80
+ specs_n_sources = []
81
+ caches.each do |source, cache|
82
+ cache.each do |name, spec|
83
+ if /^#{gem_name}$/i === spec.name &&
84
+ version_requirement.satisfied_by?(spec.version) then
85
+ specs_n_sources << [spec, source]
86
+ end
75
87
  end
76
88
  end
89
+ if specs_n_sources.empty? then
90
+ raise GemNotFoundException.new("Could not find #{gem_name} (#{version_requirement}) in the repository")
91
+ end
92
+ specs_n_sources = specs_n_sources.sort_by { |gs,| gs.version }.reverse
93
+ specs_n_sources[0]
77
94
  end
78
- if specs_n_sources.empty? then
79
- raise GemNotFoundException.new("Could not find #{gem_name} (#{version_requirement}) in the repository")
80
- end
81
- specs_n_sources = specs_n_sources.sort_by { |gs,| gs.version }.reverse
82
- specs_n_sources[0]
83
95
  end
84
96
  end
85
97
  end
@@ -0,0 +1,85 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Copyright 2006 Matthieu Riou
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require 'rubygems'
18
+ require 'fileutils'
19
+
20
+ module Gem
21
+ # Adding Gems Java platform
22
+ module Platform
23
+ JAVA = 'java'
24
+ end
25
+
26
+ # Unfortunately Maven artifacts have a rather free versioning scheme
27
+ class Version
28
+ def self.correct?(str)
29
+ true
30
+ end
31
+ end
32
+ end
33
+
34
+ begin
35
+ Gem.manage_gems
36
+ rescue NoMethodError => ex
37
+ # Using rubygems prior to 0.6.1
38
+ end
39
+
40
+ # Let the user add or redefine his sources (hopefully we'll be
41
+ # able to set a default one when a good soul will be able to
42
+ # donate us space and bandwidth to host a Raven Gems repository).
43
+ module Gem
44
+ def self.sources=(s)
45
+ @sources = s
46
+ end
47
+ end
48
+ require_gem("sources")
49
+ def sources; Gem.sources; end
50
+ def set_sources(s) Gem.sources = s; end
51
+ set_sources(["http://gems.rubyraven.org/"])
52
+
53
+ # To avoid polluting the regular Gem repository, we store our gems
54
+ # under the user home directory.
55
+ GEMS_IN_HOME = true
56
+ USER_HOME = ENV['HOME'] ? ENV['HOME'] : ENV['USERPROFILE'].gsub('\\', '/')
57
+ RAVEN_HOME = File.join(USER_HOME, '.raven')
58
+ FileUtils.mkdir(RAVEN_HOME) unless File.exist?(RAVEN_HOME)
59
+ Dir.glob(File.join(RAVEN_HOME, "specifications", "*.gemspec")).each do |file_name|
60
+ gemspec = Gem::SourceIndex.load_specification(file_name.untaint)
61
+ Gem::cache.add_spec(gemspec) if gemspec
62
+ end
63
+
64
+ module Gem
65
+ # Making the remote installer silent. Otherwise it always asks you to
66
+ # choose the version you want to install.
67
+ class RemoteInstaller
68
+ def find_gem_to_install(gem_name, version_requirement, caches)
69
+ specs_n_sources = []
70
+ caches.each do |source, cache|
71
+ cache.each do |name, spec|
72
+ if /^#{gem_name}$/i === spec.name &&
73
+ version_requirement.satisfied_by?(spec.version) then
74
+ specs_n_sources << [spec, source]
75
+ end
76
+ end
77
+ end
78
+ if specs_n_sources.empty? then
79
+ raise GemNotFoundException.new("Could not find #{gem_name} (#{version_requirement}) in the repository")
80
+ end
81
+ specs_n_sources = specs_n_sources.sort_by { |gs,| gs.version }.reverse
82
+ specs_n_sources[0]
83
+ end
84
+ end
85
+ end
@@ -56,6 +56,7 @@ module Raven
56
56
  # Getting the source files to compile. Filtrating sources already
57
57
  # compiled having a fresh enough class
58
58
  source_files = @build_path.collect do |d|
59
+ puts "Warning: build path #{d} doesn't exist!" unless File.exist? d
59
60
  Dir.glob("#{d}/**/*.java").select do |java|
60
61
  classfile = 'target/classes/' + java[d.length, (java.length - 5 - d.length)] + '.class'
61
62
  File.exist?(classfile) ? File.stat(java).mtime > File.stat(classfile).mtime : true
@@ -70,7 +70,7 @@ module Raven
70
70
  end
71
71
 
72
72
  list_indices.each do |file|
73
- http_fn, fs_fn = @base_url + file, RAVEN_HOME + file[0..-4]
73
+ http_fn, fs_fn = @base_url + file, File.join(RAVEN_HOME, file[0..-4])
74
74
 
75
75
  # Checking file size to see if it changed
76
76
  header = http.head(http_fn)
@@ -81,7 +81,7 @@ module Raven
81
81
  puts "Refreshing index file #{file[0..-4]}"
82
82
  response = StringIO.new(http.get(@base_url + file, nil).body)
83
83
  zlib = Zlib::GzipReader.new(response)
84
- file = File.new(RAVEN_HOME + file[0..-4], 'wb')
84
+ file = File.new(File.join(RAVEN_HOME, file[0..-4]), 'wb')
85
85
  file << zipsize + "\n"
86
86
  file.write(zlib.read)
87
87
  file.close
@@ -91,7 +91,7 @@ module Raven
91
91
  end
92
92
 
93
93
  def search(artifactId, groupId=nil, versionId=nil)
94
- idx_files = Dir[RAVEN_HOME + '*.mvnidx']
94
+ idx_files = Dir[File.join(RAVEN_HOME, '*.mvnidx')]
95
95
  found = []
96
96
  idx_files.each do |idx_file|
97
97
  puts "Searching in #{idx_file}..."
@@ -260,4 +260,4 @@ module Raven
260
260
  end
261
261
  end
262
262
 
263
- end
263
+ end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: raven
5
5
  version: !ruby/object:Gem::Version
6
- version: 1.2.2
7
- date: 2007-01-22 00:00:00 -08:00
6
+ version: 1.2.3
7
+ date: 2007-05-12 00:00:00 -07:00
8
8
  summary: Java build system based on Rake and Gem.
9
9
  require_paths:
10
10
  - lib
@@ -32,12 +32,14 @@ files:
32
32
  - bin/raven
33
33
  - lib/raven
34
34
  - lib/raven.rb
35
+ - lib/raven/deps_tasks.rb~
35
36
  - lib/raven/index_gem_repository.rb
36
37
  - lib/raven/deps_tasks.rb
37
38
  - lib/raven/java_tasks.rb
38
39
  - lib/raven/gem_init.rb
39
40
  - lib/raven/repo_builder.rb
40
41
  - lib/raven/search_install.rb
42
+ - lib/raven/gem_init.rb~
41
43
  - README.rdoc
42
44
  - LICENSE
43
45
  test_files: []