warning-shot 0.9.1 → 0.9.2
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/History.txt +8 -1
- data/README.txt +18 -17
- data/bin/warning-shot +2 -0
- data/lib/warning_shot.rb +6 -2
- data/lib/warning_shot/dep_checker.rb +12 -22
- data/lib/warning_shot/gem_handler.rb +82 -69
- data/lib/warning_shot/version.rb +1 -1
- data/website/index.html +1 -1
- metadata +2 -2
data/History.txt
CHANGED
@@ -1,4 +1,11 @@
|
|
1
|
-
== 0.9.
|
1
|
+
== 0.9.2 2008-03-13
|
2
|
+
* 2 major enhancement:
|
3
|
+
* Optional gem repos to check
|
4
|
+
* Install gems in "frozen" or "burned-in" dependency directories
|
5
|
+
* 1 minor enhancement:
|
6
|
+
* Outline for WarningShot::Logger
|
7
|
+
|
8
|
+
== 0.9.1 2008-03-12
|
2
9
|
* 1 minor enhancement:
|
3
10
|
* Cleaned up gem output
|
4
11
|
|
data/README.txt
CHANGED
@@ -9,23 +9,24 @@ USAGE
|
|
9
9
|
WarningShot can be used from the command line or in a capistrano script via the 'warning-shot' binary.
|
10
10
|
|
11
11
|
Options are:
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
12
|
+
--environment=APP_ENV Environment to test in.
|
13
|
+
Default: development
|
14
|
+
-s, --strict URL Testing is only successful on 200 instead of 2xx
|
15
|
+
-f, --flush Flush log before running
|
16
|
+
-g, --gems Install/update all missing OR outdated gems
|
17
|
+
--gempath=PATH Semicolon separated list of gem paths, gems will be installed in the 1st path
|
18
|
+
--dir=DIR The root directory of the application to check.
|
19
|
+
Default: .
|
20
|
+
--log=LOG Path of log file.
|
21
|
+
Default: (--dir path)/logs/warning_shot_(--environment).log
|
22
|
+
--configs=PATH Path to config files to use.
|
23
|
+
Default: (--dir path)/config/warning_shot/
|
24
|
+
-v, --verbose Output verbose information.
|
25
|
+
-n, --growl Output final results via growlnotify (Requires growlnotify)
|
26
|
+
--templates=[PATH] Generates template files
|
27
|
+
Default: Not Generated! (If specified, default is '.')
|
28
|
+
-h, --help Show this help message.
|
29
|
+
-d, --debug Enable debugging.
|
29
30
|
|
30
31
|
|
31
32
|
CONFIGURATION FILES
|
data/bin/warning-shot
CHANGED
@@ -31,6 +31,8 @@ BANNER
|
|
31
31
|
"Flush log before running") { |OPTIONS[:flush]| }
|
32
32
|
opts.on("-g", "--gems",
|
33
33
|
"Install/update all missing OR outdated gems") { |OPTIONS[:gems]| }
|
34
|
+
opts.on("--gempath=PATH",String,
|
35
|
+
"Semicolon separated list of gem paths, gems will be installed in the first path") {|OPTIONS[:gempath]|}
|
34
36
|
opts.on("--dir=DIR", String,
|
35
37
|
"The root directory of the application to check.",
|
36
38
|
"Default: #{OPTIONS[:dir]}") { |OPTIONS[:dir]| }
|
data/lib/warning_shot.rb
CHANGED
@@ -25,11 +25,15 @@ include RippleNetworks::WarningShot
|
|
25
25
|
|
26
26
|
=begin
|
27
27
|
TODOs
|
28
|
-
-->
|
29
|
-
|
28
|
+
-->Change from http reqs to protocol http://etc, memcached://etc, ftp://etc...
|
29
|
+
|
30
|
+
-->flag to install gems in first alt gem path
|
31
|
+
|
30
32
|
-->Implement a WarningShot.logger.(info,fatal,etc...) instead of current logging mechanism
|
31
33
|
====>In programatic interface take a logger and override (for passing in external loggers)
|
34
|
+
|
32
35
|
-->Further de-couple the dep_checker class
|
36
|
+
|
33
37
|
-->Update GemHandler#installed? to use Gem::Requirement#satisfied_by?
|
34
38
|
|
35
39
|
|
@@ -49,7 +49,8 @@ module RippleNetworks
|
|
49
49
|
:gems => false,
|
50
50
|
:verbose => false,
|
51
51
|
:growl => false,
|
52
|
-
:templates => false
|
52
|
+
:templates => false,
|
53
|
+
:gempath => nil
|
53
54
|
}
|
54
55
|
|
55
56
|
#Set up CLEAR and Windows Add'l requirement
|
@@ -178,30 +179,19 @@ module RippleNetworks
|
|
178
179
|
|
179
180
|
section("Checking gem dependencies")
|
180
181
|
#Initialize gem handler
|
181
|
-
@gh = GemHandler.new(self.configs["gems"])
|
182
182
|
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
#install missing gems
|
189
|
-
@gh.missing_gems.each do |gem,version|
|
190
|
-
record("#{gem} v. #{version} was NOT found!",(self.options[:gems]) ? :warning : :error)
|
191
|
-
@gh.install(gem,version) if self.options[:gems]
|
192
|
-
end
|
193
|
-
|
194
|
-
#List failed gems
|
195
|
-
@gh.failed_gems.each do |gem,reason|
|
196
|
-
record("#{gem} failed to install! Reason: #{reason}",:error)
|
197
|
-
end
|
183
|
+
gem_handler = GemHandler.new(self.configs["gems"],{
|
184
|
+
:install_all => @options[:gems],
|
185
|
+
:gem_path => @options[:gempath]
|
186
|
+
})
|
198
187
|
|
199
|
-
|
200
|
-
|
188
|
+
gem_handler.each do |c_gem|
|
189
|
+
if c_gem.status != :installed
|
190
|
+
record("#{c_gem.name} v. #{c_gem.version}:: #{c_gem.details}", :error)
|
191
|
+
else
|
192
|
+
record("#{c_gem.name} v. #{c_gem.version} requirement met!")
|
193
|
+
end
|
201
194
|
end
|
202
|
-
|
203
|
-
gem_errors = @gh.missing_gems.size - @gh.installed_gems.size
|
204
|
-
record("#{gem_errors} gems had errors", :info) if gem_errors > 0
|
205
195
|
|
206
196
|
section("Loading Ruby test scripts")
|
207
197
|
count = load_ruby_scripts
|
@@ -6,100 +6,72 @@ require 'rubygems/dependency_installer'
|
|
6
6
|
|
7
7
|
module RippleNetworks
|
8
8
|
module WarningShot
|
9
|
-
class GemHandler
|
9
|
+
class GemHandler < Array
|
10
10
|
DEFAULT_VERSION = ">0.0.0".freeze
|
11
11
|
CONDITIONAL_RGX = /[^\d]*/.freeze
|
12
12
|
VERSION_RGX = /[\d\.]+/.freeze
|
13
|
+
CandidateGem = Struct.new(:name,:version,:status,:details)
|
13
14
|
|
14
|
-
|
15
|
+
DEFAULTS = {
|
16
|
+
:install_all => false,
|
17
|
+
:gem_path => Gem.dir
|
18
|
+
}
|
15
19
|
|
16
|
-
def initialize(gem_list,
|
17
|
-
@
|
20
|
+
def initialize(gem_list,opts={})
|
21
|
+
@opts = DEFAULTS.merge(opts)
|
18
22
|
|
19
|
-
|
20
|
-
|
21
|
-
@
|
22
|
-
|
23
|
+
Gem.path.clear
|
24
|
+
#Add custom paths to gem..
|
25
|
+
unless @opts[:gem_path].nil? || @opts[:gem_path].empty?
|
26
|
+
@opts[:gem_path].split(";").each do |alt_path|
|
27
|
+
Gem.path.push(alt_path)
|
28
|
+
end
|
29
|
+
end
|
23
30
|
|
24
|
-
|
25
|
-
|
26
|
-
|
31
|
+
#Add candidate gems to array
|
32
|
+
split(gem_list).each do |rgem,ver|
|
33
|
+
self.push(CandidateGem.new(rgem,ver,:unchecked,""))
|
34
|
+
end
|
27
35
|
|
36
|
+
#Check status of gems
|
28
37
|
check_gems
|
29
|
-
|
38
|
+
install_all! if @opts[:install_all]
|
30
39
|
end
|
31
40
|
|
32
41
|
|
33
42
|
def split(gem_list)
|
34
43
|
gems = {}
|
35
44
|
gem_list.collect do |gem|
|
36
|
-
|
45
|
+
case gem
|
46
|
+
when String
|
47
|
+
gem_name, gem_ver = gem.chomp.split(":")
|
48
|
+
when Hash
|
49
|
+
gem_name, gem_ver = gem.keys.first, gem.values.first
|
50
|
+
end
|
37
51
|
gems[gem_name] = gem_ver || DEFAULT_VERSION #Default to newest gem
|
38
52
|
end
|
39
|
-
|
53
|
+
|
40
54
|
return gems
|
41
55
|
end
|
42
56
|
|
43
57
|
|
44
58
|
def add(gems)
|
45
|
-
|
59
|
+
#@gems_to_install.merge!(split(gems))
|
46
60
|
check_gems
|
47
61
|
end
|
48
62
|
|
49
63
|
|
50
64
|
def remove(gems)
|
51
|
-
gems.collect { |g| @gems_to_install.delete(g) }
|
65
|
+
#gems.collect { |g| @gems_to_install.delete(g) }
|
52
66
|
check_gems
|
53
67
|
end
|
54
|
-
|
55
|
-
def install(gem_name,gem_version)
|
56
|
-
begin
|
57
|
-
#RubyGems DependencyInstaller installs all dependencies, and the gem, woot!
|
58
|
-
dep_inst = Gem::DependencyInstaller.new(gem_name,gem_version,{:install_dir => @install_dir})
|
59
|
-
rescue Exception => e
|
60
|
-
#Invalid Gem Name / Version
|
61
|
-
@failed_gems[gem_name] = "Bad gem name or version #{gem_name} #{gem_version}"
|
62
|
-
return false
|
63
|
-
end
|
64
68
|
|
65
|
-
#Determine what dependencies are missing
|
66
|
-
dep_inst.gather_dependencies
|
67
|
-
|
68
|
-
begin
|
69
|
-
#Install the dependencies and the gem
|
70
|
-
dep_inst.install
|
71
|
-
|
72
|
-
#Add list of installed gems to @installed_gems
|
73
|
-
@installed_gems.push(*dep_inst.installed_gems)
|
74
|
-
|
75
|
-
#Remove any isntalled gems from failed list
|
76
|
-
dep_inst.installed_gems.each do |gem|
|
77
|
-
@failed_gems.delete(gem.name) if @failed_gems.has_key?(gem.name)
|
78
|
-
end
|
79
|
-
|
80
|
-
#Update the local gem cache
|
81
|
-
Gem::cache.refresh!
|
82
|
-
|
83
|
-
#Update missing gems
|
84
|
-
check_gems
|
85
|
-
return true
|
86
|
-
rescue Errno::EACCES => e
|
87
|
-
@failed_gems[gem_name] = "Invalid permissions . . . try running w/ su"
|
88
|
-
rescue Gem::FilePermissionError => e
|
89
|
-
@failed_gems[gem_name] = "Invalid permissions . . . try running w/ su"
|
90
|
-
rescue Exception => e
|
91
|
-
@failed_gems[gem_name] = e.message
|
92
|
-
end
|
93
|
-
|
94
|
-
return false
|
95
|
-
end
|
96
69
|
|
97
|
-
|
98
|
-
|
99
|
-
|
70
|
+
#Loop over candidate gems, install each
|
71
|
+
def install_all!
|
72
|
+
self.each do |c_gem|
|
73
|
+
install(c_gem) if c_gem.status != :installed
|
100
74
|
end
|
101
|
-
|
102
|
-
return @failed_gems.length == 0
|
103
75
|
end
|
104
76
|
|
105
77
|
|
@@ -172,6 +144,50 @@ module RippleNetworks
|
|
172
144
|
|
173
145
|
|
174
146
|
private
|
147
|
+
|
148
|
+
#Install a candidate gem
|
149
|
+
def install(c_gem)
|
150
|
+
begin
|
151
|
+
#RubyGems DependencyInstaller installs all dependencies, and the gem, woot!
|
152
|
+
dep_inst = Gem::DependencyInstaller.new(c_gem.name,c_gem.version,{:install_dir => Gem.path.first})
|
153
|
+
rescue Gem::GemNotFoundException => e
|
154
|
+
#Invalid Gem Name / Version
|
155
|
+
c_gem.status = :invalid
|
156
|
+
c_gem.details = "Invalid gem name or version #{c_gem.name} #{c_gem.version}"
|
157
|
+
return false
|
158
|
+
end
|
159
|
+
|
160
|
+
#Determine what dependencies are missing
|
161
|
+
dep_inst.gather_dependencies
|
162
|
+
|
163
|
+
begin
|
164
|
+
#Install the dependencies and the gem
|
165
|
+
dep_inst.install
|
166
|
+
|
167
|
+
#add dependency details to gem
|
168
|
+
c_gem.details = "Installed Dependencies: " << dep_inst.installed_gems.collect { |d_gem| d_gem.name }.join(",")
|
169
|
+
|
170
|
+
#Update the local gem cache
|
171
|
+
Gem::cache.refresh!
|
172
|
+
|
173
|
+
#Update missing gems
|
174
|
+
check_gems
|
175
|
+
return true
|
176
|
+
rescue Errno::EACCES => e
|
177
|
+
c_gem.status = :failed
|
178
|
+
c_gem.details = "Invalid permissions . . . try running w/ su"
|
179
|
+
rescue Gem::FilePermissionError => e
|
180
|
+
c_gem.status = :failed
|
181
|
+
c_gem.details = "Invalid permissions . . . try running w/ su"
|
182
|
+
rescue Exception => e
|
183
|
+
c_gem.status = :failed
|
184
|
+
c_gem.details = e.message
|
185
|
+
end
|
186
|
+
|
187
|
+
return false
|
188
|
+
end
|
189
|
+
|
190
|
+
|
175
191
|
=begin rdoc
|
176
192
|
*Name*:: check_gems
|
177
193
|
*Access*:: private
|
@@ -179,14 +195,11 @@ module RippleNetworks
|
|
179
195
|
*Last_Edited*:: Tue Feb 19 15:09:00 PST 2008
|
180
196
|
=end
|
181
197
|
def check_gems
|
182
|
-
|
183
|
-
|
184
|
-
@gems_to_install.each do |gem_name,gem_version|
|
185
|
-
gem_info = installed?(gem_name,gem_version)
|
198
|
+
self.each do |c_gem|
|
199
|
+
gem_info = installed?(c_gem.name,c_gem.version)
|
186
200
|
if gem_info[:installed]
|
187
|
-
|
188
|
-
|
189
|
-
@missing_gems[gem_name] = gem_version
|
201
|
+
c_gem.status = :installed
|
202
|
+
c_gem.details = gem_info[:info]
|
190
203
|
end
|
191
204
|
end
|
192
205
|
end
|
data/lib/warning_shot/version.rb
CHANGED
data/website/index.html
CHANGED
@@ -33,7 +33,7 @@
|
|
33
33
|
<h1>warning_shot</h1>
|
34
34
|
<div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/warning_shot"; return false'>
|
35
35
|
<p>Get Version</p>
|
36
|
-
<a href="http://rubyforge.org/projects/warning_shot" class="numbers">0.9.
|
36
|
+
<a href="http://rubyforge.org/projects/warning_shot" class="numbers">0.9.2</a>
|
37
37
|
</div>
|
38
38
|
<h1>→ ‘warning_shot’</h1>
|
39
39
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: warning-shot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cory O'Daniel
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-03-
|
12
|
+
date: 2008-03-13 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|