raven 1.0 → 1.1

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.
data/bin/raven CHANGED
@@ -1,4 +1,4 @@
1
- !#/usr/bin/env ruby
1
+ #!/usr/bin/env ruby
2
2
  require 'rubygems'
3
3
  require 'raven'
4
4
 
data/bin/raven~ ADDED
@@ -0,0 +1,5 @@
1
+ !#/usr/bin/env ruby
2
+ require 'rubygems'
3
+ require 'raven'
4
+
5
+ Raven::Command.run(ARGV)
data/lib/raven.rb CHANGED
@@ -20,6 +20,7 @@ require 'raven/gem_init'
20
20
  require 'raven/deps_tasks'
21
21
  require 'raven/repo_builder'
22
22
  require 'raven/java_tasks'
23
+ require 'raven/search_install'
23
24
  require 'raven/index_gem_repository'
24
25
 
25
26
  require 'optparse'
@@ -28,51 +29,95 @@ module Raven
28
29
  module Command
29
30
  def self.run(args)
30
31
  opts = OptionParser.new
31
- opts.banner = "Usage: raven [options] (import | repository * | server)"
32
- repo_url = ''
33
- opts.on('-m=ARG', '--mavenrepo repo_url') { |val| puts'x';repo_url = val }
32
+ opts.banner = "Usage: raven [options] (import | repository * | server | install *)"
33
+ repo_url, index_url, all, groupId, allver = '', '', false, nil, false
34
+ opts.on('-m=ARG', '--mavenrepo repo_url', '[repository] Maven repository to build your gem repository from.') { |val| repo_url = val }
35
+ opts.on('-i=ARG', '--index index_url', '[install] URL of a directory containing repository indices.') { |val| index_url = val }
36
+ opts.on('-g=ARG', '--group', '[install] Install artifacts in the provided group.') { |val| groupId = val }
37
+ opts.on('-a', '--all', '[install] Install all selected artifacts.') { |val| all = true }
38
+ opts.on('-v', '--allversions', '[install] Select all versions, not only the latest.') { |val| allver = true }
34
39
 
35
- rest = opts.parse(*args)
40
+ begin
41
+ rest = opts.parse(*args)
42
+ rescue ArgumentError
43
+ puts 'Wrong option.'
44
+ end
36
45
 
37
- ARGV.pop while ARGV.length > 0
38
- if (rest[0] == 'import')
46
+ ARGV.pop while ARGV.length > 0
47
+
48
+ case rest[0]
49
+ when 'import'
39
50
  Raven::MavenLocalRepoImport.run()
40
- else
41
- if (rest[0] == 'repository')
42
- if (repo_url.length > 0)
43
- puts 'repodef'
44
- match = repo_url.match('http://([^/]*)(/.*)')
45
- server = match[1]
46
- rel_url = match[2]
47
- rel_url = rel_url + '/' if rel_url[-1..-1] != '/'
48
- else
49
- server = 'www.ibiblio.org'
50
- rel_url = '/maven2/'
51
- end
52
-
53
- puts "Using server #{server} and url #{rel_url}"
54
- builder = Raven::GemRepoBuilder.new(server, rel_url)
55
- if (rest.size > 1)
56
- rest.shift
57
- puts "Packages #{rest}"
58
- builder.group_filters = rest
59
- end
60
- builder.build
61
- main_index(ARGV)
51
+ when 'repository'
52
+ if (repo_url.length > 0)
53
+ puts 'repodef'
54
+ match = repo_url.match('http://([^/]*)(/.*)')
55
+ server = match[1]
56
+ rel_url = match[2]
57
+ rel_url = rel_url + '/' if rel_url[-1..-1] != '/'
62
58
  else
63
- if (rest[0] == 'server')
64
- require 'webrick'
65
- include WEBrick
66
- s = HTTPServer.new(
67
- :Port => 2233,
68
- :DocumentRoot => Dir.pwd )
69
- trap("INT") { s.shutdown }
70
- s.start
71
- else
72
- puts opts.to_s
59
+ server = 'www.ibiblio.org'
60
+ rel_url = '/maven2/'
61
+ end
62
+ puts "Using server #{server} and url #{rel_url}"
63
+ builder = Raven::GemRepoBuilder.new(server, rel_url)
64
+ if (rest.size > 1)
65
+ rest.shift
66
+ puts "Packages #{rest}"
67
+ builder.group_filters = rest
68
+ end
69
+ builder.build
70
+ main_index(ARGV)
71
+ when 'server'
72
+ require 'webrick'
73
+ include WEBrick
74
+ s = HTTPServer.new(
75
+ :Port => 2233,
76
+ :DocumentRoot => Dir.pwd )
77
+ trap("INT") { s.shutdown }
78
+ s.start
79
+ when 'install'
80
+ params = ['raven.rubyforge.org', '80', '/indices/']
81
+ if (index_url.length > 0)
82
+ params = Raven::Command.parse_url(index_url)
83
+ params[2] = '/' if params[2].empty?
84
+ end
85
+ installer = Raven::GemSearchInstaller.new(*params)
86
+ # Refreshes local gem indices if needed
87
+ installer.get_indices
88
+
89
+ rest.shift
90
+ rest << '' if (rest.empty? && groupId)
91
+ rest.each do |artifact|
92
+ av = artifact.match(/([^:]*):?(.*)/).to_a
93
+ # Trock to see if we've been passed a version number or an artifact
94
+ begin
95
+ Integer(av[1][0..0])
96
+ av[2] = av[1]
97
+ av[1] = ''
98
+ rescue
99
+ end
100
+ begin
101
+ installer.install(av[1].length > 0 ? av[1] : nil,
102
+ groupId, av[2].length > 0 ? av[2] : nil, all, allver)
103
+ rescue GemTooManyInstallError => toomany
104
+ puts "Couldn't install a gem from name #{av[1]||groupId}, more than on potential"
105
+ puts "gem was found for this name. If this is intentional and you want to"
106
+ puts "install all these Gems please run again with the --all option."
107
+ toomany.artifacts.each { |a| puts " #{a.to_s}"}
73
108
  end
74
109
  end
75
- end
110
+ when 'build_index'
111
+ RepoIndexBuilder.new('m2_central', 'repo1.maven.org', '/maven2/').build_idx
112
+ else
113
+ puts opts.to_s
114
+ end
115
+ end
116
+
117
+ def self.parse_url(url)
118
+ parsed = /http:\/\/([^\/:]*):?([^\/]*)(\/?.*)/.match(url).to_a
119
+ parsed.shift
120
+ parsed
76
121
  end
77
122
  end
78
123
  end
@@ -102,7 +102,7 @@ module Raven
102
102
  unless hems[1]
103
103
  installer = Gem::RemoteInstaller.new
104
104
  params = [gem_spec.name, gem_spec.version.to_s, false]
105
- params << USER_HOME + '/.raven_gems' if defined?(GEMS_IN_HOME)
105
+ params << RAVEN_HOME if defined?(GEMS_IN_HOME)
106
106
  gem_spec = installer.install(*params)[0]
107
107
  end
108
108
  gem_spec.full_gem_path
@@ -54,8 +54,9 @@ set_sources(["http://localhost:2233"])
54
54
  # under the user home directory.
55
55
  GEMS_IN_HOME = true
56
56
  USER_HOME = ENV['HOME'] ? ENV['HOME'] : ENV['USERPROFILE']
57
- FileUtils.mkdir(USER_HOME + '/.raven_gems') unless File.exist?(USER_HOME + '/.raven_gems')
58
- Dir.glob(USER_HOME + "/.raven_gems/specifications/*.gemspec").each do |file_name|
57
+ RAVEN_HOME = USER_HOME + '/.raven/'
58
+ FileUtils.mkdir(RAVEN_HOME) unless File.exist?(RAVEN_HOME)
59
+ Dir.glob(RAVEN_HOME + "/specifications/*.gemspec").each do |file_name|
59
60
  gemspec = Gem::SourceIndex.load_specification(file_name.untaint)
60
61
  Gem::cache.add_spec(gemspec) if gemspec
61
62
  end
@@ -278,7 +278,7 @@ module Raven
278
278
  def execute
279
279
  super
280
280
  params = [false]
281
- params << USER_HOME + "/.raven_gems" if defined?(GEMS_IN_HOME)
281
+ params << RAVEN_HOME if defined?(GEMS_IN_HOME)
282
282
  Gem::Installer.new("target/#{@group}-#{@artifact}-#{@version}-java.gem").install(*params)
283
283
  end
284
284
  end
@@ -25,9 +25,29 @@ module Raven
25
25
  # all the groupId and artifactId crap.
26
26
  class Artifact
27
27
  attr_reader :groupId, :artifactId, :versionId, :path
28
+ attr_accessor :server
28
29
  def initialize(groupId, artifactId, versionId, path)
29
30
  @groupId, @artifactId, @versionId, @path = groupId, artifactId, versionId, path
30
31
  end
32
+
33
+ def to_yaml_properties
34
+ %w{ @groupId @artifactId @versionId @path }
35
+ end
36
+
37
+ def ==(art) eql?(art); end
38
+ def ===(art) eql?(art); end
39
+ def eql?(art)
40
+ false if art.class != Artifact
41
+ art.groupId == @groupId && art.artifactId == @artifactId && art.versionId == @versionId
42
+ end
43
+
44
+ def hash
45
+ @groupId.hash ^ (@artifactId.hash << 1) ^ (@versionId.hash << 2)
46
+ end
47
+
48
+ def to_s
49
+ "#{artifactId} v#{versionId} (module #{groupId})"
50
+ end
31
51
  end
32
52
 
33
53
  # Enumerates on a Maven repository by scraping HTML. Yields on every
@@ -41,12 +61,12 @@ module Raven
41
61
  @group_filters
42
62
  end
43
63
 
44
- def initialize(server, url)
45
- @server, @url = server, url
64
+ def initialize(server, url, port="80")
65
+ @server, @url, @port = server, url, port
46
66
  end
47
67
 
48
68
  def each
49
- http = Net::HTTP.new(@server, 80)
69
+ http = Net::HTTP.new(@server, @port)
50
70
  folder_regexp = /<img src="\/icons\/folder.gif" alt="\[DIR\]"> <a href="[^\/]*\/">/
51
71
  file_regexp = /<img src="\/icons\/unknown.gif" alt="\[ \]"> <a href="[^"]*">/
52
72
  read_page(http, @url, folder_regexp) do |url1, groupId|
@@ -84,7 +104,7 @@ module Raven
84
104
  class GemRepoBuilder
85
105
  attr_writer :group_filters
86
106
 
87
- def initialize(server, url)
107
+ def initialize(server, port, url)
88
108
  @server, @url = server, url
89
109
  end
90
110
 
@@ -97,43 +117,34 @@ module Raven
97
117
 
98
118
  Dir.chdir('gems') do
99
119
  repo.each do |artifact, http|
100
- gemname = "#{artifact.groupId}-#{artifact.artifactId}-#{artifact.versionId}-java.gem"
101
- if !File.exist?(gemname) || overwrite
102
- with(artifact, 'ext', http) do
103
- # The fileset is computed when gemspec is created, file must be there
104
- gemspec = Raven.create_gemspec(artifact)
105
- Gem::Builder.new(gemspec).build
106
- end
107
- end
120
+ Raven.install_remote_gem(artifact, http, @url, overwrite)
108
121
  end
109
122
  end
110
123
 
111
124
  end
112
-
113
- def with(artifact, subdir, http)
114
- response = http.get(@url + artifact.path, nil)
115
- file = File.new(subdir + "/#{artifact.artifactId}-#{artifact.versionId}.jar", 'wb')
116
- file.write(response.body)
117
- file.close
118
- yield
119
- File.delete(subdir + "/#{artifact.artifactId}-#{artifact.versionId}.jar")
120
- end
121
125
  end
122
126
 
123
- def self.create_gemspec(artifact)
124
- spec = Gem::Specification.new do |s|
125
- s.platform = Gem::Platform::JAVA
126
- s.summary = "Raven wrapped library #{artifact.artifactId} from project #{artifact.groupId}."
127
- s.name = "#{artifact.groupId}-#{artifact.artifactId}"
128
- s.version = artifact.versionId
129
- s.requirements << 'none'
130
- s.require_path = 'ext'
131
- s.autorequire = 'rake'
132
- s.files = Dir.glob("{ext}/**/*")
127
+ def self.install_remote_gem(artifact, http, base_url, overwrite=true)
128
+ gemname = "#{artifact.groupId}-#{artifact.artifactId}-#{artifact.versionId}-java.gem"
129
+ if !File.exist?(gemname) || overwrite
130
+ Raven.with(artifact, 'ext', http, base_url) do
131
+ # The fileset is computed when gemspec is created, file must be there
132
+ gemspec = Raven.create_gemspec(artifact)
133
+ Gem::Builder.new(gemspec).build
134
+ end
133
135
  end
136
+ gemname
134
137
  end
135
-
136
-
138
+
139
+ def self.with(artifact, subdir, http, base_url)
140
+ response = http.get(base_url + artifact.path, nil)
141
+ file = File.new(subdir + "/#{artifact.artifactId}-#{artifact.versionId}.jar", 'wb')
142
+ file.write(response.body)
143
+ file.close
144
+ yield
145
+ File.delete(subdir + "/#{artifact.artifactId}-#{artifact.versionId}.jar")
146
+ end
147
+
137
148
  class M2LocalRepository
138
149
  def initialize(dir)
139
150
  @dir = dir
@@ -232,7 +243,7 @@ module Raven
232
243
  Gem::Builder.new(gemspec).build
233
244
  # Installing Gem
234
245
  params = [false]
235
- params << USER_HOME + "/.raven_gems" if defined?(GEMS_IN_HOME)
246
+ params << RAVEN_HOME if defined?(GEMS_IN_HOME)
236
247
  Gem::Installer.new("#{artifact.groupId}-#{artifact.artifactId}-#{artifact.versionId}-java.gem").install(*params)
237
248
  # Cleaning up for next iteration
238
249
  FileUtils.rm(Dir.glob('ext/*'))
@@ -249,7 +260,7 @@ module Raven
249
260
  nil
250
261
  end
251
262
  end
252
-
263
+
253
264
  def self.dir_each(path)
254
265
  Dir.foreach(path) do |elmt|
255
266
  next if DIR_EXCL.include?(elmt)
@@ -257,10 +268,24 @@ module Raven
257
268
  end
258
269
  end
259
270
 
260
- end
261
-
262
- # builder = Raven::GemRepoBuilder.new('www.ibiblio.org', '/maven2/')
263
- # builder.group_filters = ['log4j', 'wsdl4j', 'commons-logging', 'commons-lang']
264
- # builder.build()
271
+ def self.create_gemspec(artifact)
272
+ spec = Gem::Specification.new do |s|
273
+ s.platform = Gem::Platform::JAVA
274
+ s.summary = "Raven wrapped library #{artifact.artifactId} from project #{artifact.groupId}."
275
+ s.name = "#{artifact.groupId}-#{artifact.artifactId}"
276
+ s.version = artifact.versionId
277
+ s.requirements << 'none'
278
+ s.require_path = 'ext'
279
+ s.autorequire = 'rake'
280
+ s.files = Dir.glob("{ext}/**/*")
281
+ end
282
+ end
265
283
 
266
-
284
+ class GemTooManyInstallError < RuntimeError
285
+ attr_reader :artifacts
286
+ def initialize(arts)
287
+ @artifacts = arts
288
+ end
289
+ end
290
+
291
+ end
@@ -0,0 +1,233 @@
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 'net/http'
18
+
19
+ module Raven
20
+
21
+ class RepoIndexBuilder
22
+ def initialize(name, server, base_url, port='80')
23
+ @name, @server, @base_url, @port = name, server, base_url, port
24
+ end
25
+
26
+ def build_idx
27
+ require 'yaml'
28
+ require 'zlib'
29
+ Zlib::GzipWriter.open("#{@name}.mvnidx.gz") do |f|
30
+ f << @server + "#" + @port + "#" + @base_url + "\n"
31
+ Raven::Maven2Repository.new(@server, @base_url, @port).each do |artifact, http|
32
+ f << YAML.dump(artifact)
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ class GemSearchInstaller
39
+ def initialize(server, port, base_url)
40
+ @server, @base_url, @port = server, base_url, port
41
+ end
42
+
43
+ def list_indices
44
+ indices = []
45
+ http = Net::HTTP.new(@server, @port)
46
+ response = http.get(@base_url, nil)
47
+ expr = /HREF="([^"]*idx.gz)"/
48
+ if response.message.strip == "OK"
49
+ response.body.each_line do |line|
50
+ if expr =~ line
51
+ indices << expr.match(line)[1]
52
+ end
53
+ end
54
+ else
55
+ puts "Got a bad response from server http://#{@server}:#{@port}/#{@base_url}, couldn't update local index"
56
+ end
57
+ indices
58
+ end
59
+
60
+ def get_indices
61
+ require 'stringio'
62
+ http = Net::HTTP.new(@server, @port)
63
+
64
+ list_indices.each do |file|
65
+ http_fn, fs_fn = @base_url + file, RAVEN_HOME + file[0..-4]
66
+
67
+ # Checking file size to see if it changed
68
+ header = http.head(http_fn)
69
+ zipsize = header["content-length"]
70
+ oldsize = File.exist?(fs_fn) ? File.new(fs_fn).readline.chomp : '0'
71
+
72
+ unless (zipsize.to_i == oldsize.to_i)
73
+ puts "Refreshing index file #{file[0..-4]}"
74
+ response = StringIO.new(http.get(@base_url + file, nil).body)
75
+ zlib = Zlib::GzipReader.new(response)
76
+ file = File.new(RAVEN_HOME + file[0..-4], 'wb')
77
+ file << zipsize + "\n"
78
+ file.write(zlib.read)
79
+ file.close
80
+ zlib.close
81
+ end
82
+ end
83
+ end
84
+
85
+ def search(artifactId, groupId=nil, versionId=nil)
86
+ idx_files = Dir[RAVEN_HOME + '*.mvnidx']
87
+ found = []
88
+ idx_files.each do |idx_file|
89
+ puts "Searching in #{idx_file}..."
90
+ f = File.new(idx_file)
91
+ found.concat(search_index(f, artifactId, groupId, versionId))
92
+ end
93
+ found
94
+ end
95
+
96
+ def search_index(idx_file, artifactId, groupId, versionId)
97
+ # Removing gz file size header
98
+ idx_file.gets
99
+ # Getting server name and gz file size header
100
+ server_addr = idx_file.gets.chomp.split("#")
101
+ aid_line = /artifactId: (.*#{artifactId}.*)/
102
+ gid_line = /groupId: (.*#{groupId}.*)/
103
+ vid_line = /versionId: "?(#{versionId})"?/
104
+
105
+ # a, a+v, a+g, g, v+g, a+v+g
106
+ found = []
107
+ while (lines = read_lines(idx_file, 5))
108
+ ma, mg, mv = false, false, false
109
+ ma = lines[2].strip =~ aid_line if artifactId
110
+ mg = lines[1].strip =~ gid_line if groupId
111
+ mv = lines[3].strip =~ vid_line if versionId
112
+ if ((ma && groupId.nil? && versionId.nil?) ||
113
+ (ma && mg && versionId.nil?) ||
114
+ (ma && mv && groupId.nil?) ||
115
+ (ma && mg && mv) ||
116
+ (mg && mv && artifactId.nil?) ||
117
+ (mg && artifactId.nil? && versionId.nil?))
118
+ artifact = YAML.load(lines.join("\n"))
119
+ artifact.server = server_addr
120
+ found << artifact
121
+ end
122
+ end
123
+ found
124
+ end
125
+
126
+ def read_lines(file, size)
127
+ lines = []
128
+ 0.upto(size-1) { |m| lines[m] = file.gets }
129
+ return nil if lines[size-1].nil?
130
+ lines
131
+ end
132
+
133
+ def install(artifactId, groupId, versionId, all=false, all_versions=false)
134
+ artifacts = search(artifactId, groupId, versionId).uniq
135
+
136
+ if (versionId.nil? && !all_versions)
137
+ artifacts = filtrate_latest(artifacts)
138
+ puts artifacts
139
+ end
140
+
141
+ # Selected several artifacts but supposed to have only one
142
+ if (artifacts.nil?)
143
+ puts "Gem indices couldn't be found properly (either you provided a wrong URL or the main site is down)."
144
+ return
145
+ end
146
+ raise GemTooManyInstallError.new(artifacts), "Too many artifacts" if (!all && artifacts.size > 1)
147
+
148
+ if (artifacts.empty?)
149
+ puts "Nothing found."
150
+ else
151
+ # TODO install from the servers returned by search
152
+ # Proceeding with installation
153
+ FileUtils.mkdir('ext')
154
+ puts "Installing Gems:"
155
+ artifacts.each do |artifact|
156
+ http = Net::HTTP.new(artifact.server[0], artifact.server[1])
157
+ puts " - #{artifact.to_s}"
158
+ gemname = Raven.install_remote_gem(artifact, http, artifact.server[2], true)
159
+ params = [false]
160
+ params << RAVEN_HOME if defined?(GEMS_IN_HOME)
161
+ Gem::Installer.new(gemname).install(*params)
162
+ FileUtils.rm(gemname)
163
+ end
164
+ FileUtils.rm_rf('ext')
165
+ end
166
+ end
167
+
168
+ def filtrate_latest(artifacts)
169
+ # Create a hash with all versions of each artifact
170
+ arth = {}
171
+ artifacts.each do |art|
172
+ key = "#{art.groupId}%#{art.artifactId}"
173
+ arth[key] ||= []
174
+ arth[key] << Version.new(art.versionId)
175
+ end
176
+
177
+ arth.keys.collect do |key|
178
+ last_ver = arth[key].sort[-1].version
179
+ find_artifact(artifacts, *(key.split('%') << last_ver))
180
+ end
181
+ end
182
+
183
+ def find_artifact(artifacts, groupId, artifactId, versionId)
184
+ artifacts.select do |art|
185
+ art if art.artifactId == artifactId &&
186
+ art.groupId == groupId && art.versionId == versionId
187
+ end[0]
188
+ end
189
+ end
190
+
191
+ # Structured version class used to try to make some sense
192
+ # out of Maven version numbers. A difficult task indeed.
193
+ class Version
194
+ include Comparable
195
+ attr_reader :timestamp, :ver_struct, :version
196
+
197
+ def initialize(version)
198
+ @version = version
199
+ elmts = @version.split(/\.|-/)
200
+ @timestamp = elmts[0].length > 3 ? true : false
201
+ @ver_struct = elmts.collect do |elmt|
202
+ val = ''
203
+ begin
204
+ val = Integer(elmt)
205
+ rescue ArgumentError
206
+ val = elmt
207
+ end
208
+ val
209
+ end
210
+ end
211
+
212
+ def <=>(ver)
213
+ false if !(Version === ver)
214
+ return -1 if @timestamp && !ver.timestamp
215
+ return 1 if !@timestamp && ver.timestamp
216
+ # Setting string elements to 0 (mostly weaker) if they need
217
+ # to be compared to an int otherwise <=> could produce nil
218
+ @me, you = @ver_struct.dup, ver.ver_struct.dup
219
+ (0..@me.size).each do |m|
220
+ if (m < you.size && @me[m].class != you[m].class)
221
+ @me[m] = 0 if String === @me[m]
222
+ you[m] = 0 if String === you[m]
223
+ end
224
+ end
225
+ @me <=> you
226
+ end
227
+
228
+ def to_s
229
+ puts "v#{@version}, ts #{timestamp}, #{ @ver_struct.collect{ |v| v.class }.join('/') }"
230
+ end
231
+ end
232
+
233
+ 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.0"
7
- date: 2006-09-17 00:00:00 -07:00
6
+ version: "1.1"
7
+ date: 2006-11-02 00:00:00 -08:00
8
8
  summary: Java build system based on Rake and Gem.
9
9
  require_paths:
10
10
  - lib
@@ -29,6 +29,7 @@ post_install_message:
29
29
  authors:
30
30
  - Matthieu Riou
31
31
  files:
32
+ - bin/raven~
32
33
  - bin/raven
33
34
  - lib/raven
34
35
  - lib/raven.rb
@@ -36,6 +37,7 @@ files:
36
37
  - lib/raven/gem_init.rb
37
38
  - lib/raven/java_tasks.rb
38
39
  - lib/raven/repo_builder.rb
40
+ - lib/raven/search_install.rb
39
41
  - lib/raven/index_gem_repository.rb
40
42
  - README.rdoc
41
43
  - LICENSE