gems-status 0.49.0 → 0.50.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.
- data/VERSION +1 -1
- data/bin/gems-status +5 -2
- data/lib/gems-status.rb +5 -5
- data/lib/gems-status/checkers.rb +3 -3
- data/lib/gems-status/checkers/has_a_license.rb +12 -0
- data/lib/gems-status/checkers/is_not_gpl.rb +15 -0
- data/lib/gems-status/checkers/is_rubygems.rb +36 -0
- data/lib/gems-status/checkers/not_a_security_alert_checker.rb +1 -6
- data/lib/gems-status/checkers/print_gem_versions.rb +1 -7
- data/lib/gems-status/gem_simple.rb +6 -28
- data/lib/gems-status/gems_composite_command.rb +20 -75
- data/lib/gems-status/sources.rb +0 -2
- data/lib/gems-status/sources/lockfile_gems.rb +23 -40
- data/lib/gems-status/text_view.rb +40 -0
- data/lib/gems-status/utils.rb +20 -0
- data/test/Gemfile +1 -7
- data/test/Gemfile.lock +32 -62
- data/test/test-gems_composite_command.rb +0 -38
- data/test/test-helper.rb +6 -2
- data/test/test-lockfile_gems.rb +11 -37
- metadata +6 -17
- data/lib/gems-status/checkers/exists_in_upstream.rb +0 -25
- data/lib/gems-status/checkers/not_native_gem_checker.rb +0 -44
- data/lib/gems-status/checkers/not_rails_checker.rb +0 -25
- data/lib/gems-status/html_view.rb +0 -272
- data/lib/gems-status/sources/obs_gems.rb +0 -112
- data/lib/gems-status/sources/ruby_gems_gems.rb +0 -51
- data/test/test-not_rails_checker.rb +0 -56
- data/test/test-obs_gems.rb +0 -40
- data/test/test-ruby_gems_gems.rb +0 -32
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.50.0
|
data/bin/gems-status
CHANGED
@@ -1,4 +1,7 @@
|
|
1
1
|
#!/usr/bin/ruby
|
2
|
+
# -*- coding: UTF-8 -*-
|
3
|
+
|
4
|
+
require "erb"
|
2
5
|
$:.unshift File.join(File.dirname(__FILE__), "..", "lib")
|
3
6
|
require "gems-status"
|
4
7
|
|
@@ -19,9 +22,9 @@ end
|
|
19
22
|
|
20
23
|
conf_file = ARGV[0]
|
21
24
|
begin
|
22
|
-
conf = YAML::load(File::
|
25
|
+
conf = YAML::load(ERB.new(File::read(conf_file)).result)
|
23
26
|
rescue
|
24
|
-
Utils::log_error("?", "There was a problem opening #{conf_file}")
|
27
|
+
GemsStatus::Utils::log_error("?", "There was a problem opening #{conf_file}")
|
25
28
|
end
|
26
29
|
gs = GemsStatus::GemStatus.new(conf)
|
27
30
|
gs.execute
|
data/lib/gems-status.rb
CHANGED
@@ -15,12 +15,12 @@ module GemsStatus
|
|
15
15
|
class GemStatus
|
16
16
|
def initialize(conf)
|
17
17
|
@conf = conf
|
18
|
+
Utils::known_licenses = @conf["licenses"]
|
18
19
|
@gems_composite_command = nil
|
19
|
-
@gems_composite_command = GemsCompositeCommand.new
|
20
|
-
@conf["
|
21
|
-
|
22
|
-
|
23
|
-
end
|
20
|
+
@gems_composite_command = GemsCompositeCommand.new
|
21
|
+
c = @conf["source"]
|
22
|
+
gems = eval(c["classname"]).new(c)
|
23
|
+
@gems_composite_command.command = gems
|
24
24
|
if @conf["checkers"]
|
25
25
|
@conf["checkers"].each do |c|
|
26
26
|
checker = eval(c["classname"]).new(c)
|
data/lib/gems-status/checkers.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
require "gems-status/checkers/
|
1
|
+
require "gems-status/checkers/is_rubygems"
|
2
2
|
require "gems-status/checkers/git_check_messages"
|
3
3
|
require "gems-status/checkers/hg_check_messages"
|
4
4
|
require "gems-status/checkers/not_a_security_alert_checker"
|
5
|
-
require "gems-status/checkers/not_native_gem_checker"
|
6
|
-
require "gems-status/checkers/not_rails_checker"
|
7
5
|
require "gems-status/checkers/scm_check_messages"
|
8
6
|
require "gems-status/checkers/scm_security_messages"
|
9
7
|
require "gems-status/checkers/svn_check_messages"
|
10
8
|
require "gems-status/checkers/print_gem_versions"
|
9
|
+
require "gems-status/checkers/has_a_license"
|
10
|
+
require "gems-status/checkers/is_not_gpl"
|
11
11
|
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'open-uri'
|
3
|
+
require 'gems-status/checkers/gem_checker'
|
4
|
+
require 'gems-status/utils'
|
5
|
+
|
6
|
+
module GemsStatus
|
7
|
+
|
8
|
+
class IsRubygems < GemChecker
|
9
|
+
|
10
|
+
def initialize(configuration)
|
11
|
+
@md5 = nil
|
12
|
+
@gem_md5 = nil
|
13
|
+
super configuration
|
14
|
+
end
|
15
|
+
|
16
|
+
def check?(gem)
|
17
|
+
Utils::log_debug("Looking for #{gem.name}")
|
18
|
+
result = nil
|
19
|
+
gem_uri = "http://rubygems.org/downloads/#{gem.name}-#{gem.version}.gem"
|
20
|
+
@md5 = Utils::download_md5(gem.name, gem.version, "http://rubygems.org/downloads")
|
21
|
+
@gem_md5 = gem.md5
|
22
|
+
!@md5 && !@gem_md5 && @gem_md5== @md5
|
23
|
+
end
|
24
|
+
|
25
|
+
def description
|
26
|
+
if !@md5
|
27
|
+
"This gem does not exist in rubygems.org "
|
28
|
+
elsif !@gem_md5
|
29
|
+
"This gem does not exist in your server"
|
30
|
+
elsif @md5 != @gem_md5
|
31
|
+
"This gem has a different md5sum than in rubygems.org\nrubygems: #{@md5} your server #{@gem_md5}"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -14,12 +14,7 @@ module GemsStatus
|
|
14
14
|
class NotASecurityAlertChecker < GemChecker
|
15
15
|
def initialize(conf)
|
16
16
|
Utils::check_parameters('NotASecurityAlertChecker', conf, ["fixed", "source_repos", "email_username", "email_password", "mailing_lists", "email_to"])
|
17
|
-
|
18
|
-
@fixed = YAML::load(File::open(conf["fixed"]))
|
19
|
-
rescue
|
20
|
-
Utils::log_error("?", "There was a problem opening #{conf["fixed"]}")
|
21
|
-
@fixed = []
|
22
|
-
end
|
17
|
+
@fixed = conf["fixed"]
|
23
18
|
@source_repos = conf["source_repos"]
|
24
19
|
@security_messages = {}
|
25
20
|
@email_username = conf["email_username"]
|
@@ -2,13 +2,7 @@ module GemsStatus
|
|
2
2
|
|
3
3
|
class PrintGemVersions
|
4
4
|
def initialize(conf)
|
5
|
-
Utils::
|
6
|
-
begin
|
7
|
-
@licenses = YAML::load(File::open(conf["licenses"]))
|
8
|
-
rescue
|
9
|
-
Utils::log_error("?", "There was a problem opening #{conf["licenses"]}")
|
10
|
-
@licenses = []
|
11
|
-
end
|
5
|
+
@licenses = Utils::known_licenses
|
12
6
|
end
|
13
7
|
|
14
8
|
def check?(gem)
|
@@ -11,37 +11,15 @@ module GemsStatus
|
|
11
11
|
@dependencies = dependencies
|
12
12
|
end
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
if !@dependencies
|
17
|
-
Utils::log_error(@name, "trying to get depends on a gem that has no info on dependencies #{@name} depends #{gem.name}")
|
18
|
-
return false
|
19
|
-
end
|
20
|
-
@dependencies.each do |dep|
|
21
|
-
return true if dep.name == gem.name
|
22
|
-
end
|
23
|
-
return false
|
14
|
+
def from_git?
|
15
|
+
return @gems_url && @gems_url.start_with?("git://")
|
24
16
|
end
|
25
17
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
Utils::log_error(@name, "trying to merge depends on a gem that has no info on dependencies #{@name} merge #{gem.name}")
|
30
|
-
return false
|
31
|
-
end
|
32
|
-
changes = false
|
33
|
-
gem.dependencies.each do |dep|
|
34
|
-
if !@dependencies.include?(dep)
|
35
|
-
changes = true
|
36
|
-
@dependencies << dep
|
37
|
-
Utils::log_debug("adding #{dep} to dependencies")
|
38
|
-
end
|
18
|
+
def license
|
19
|
+
if from_git?
|
20
|
+
return nil
|
39
21
|
end
|
40
|
-
|
41
|
-
end
|
42
|
-
|
43
|
-
def from_git?
|
44
|
-
return @gems_url && @gems_url.start_with?("git://")
|
22
|
+
Utils::download_license(@name, @version, @gems_url)
|
45
23
|
end
|
46
24
|
|
47
25
|
def date
|
@@ -1,23 +1,18 @@
|
|
1
1
|
require "gems-status/gem_simple"
|
2
2
|
require "gems-status/gems_command"
|
3
|
-
require "gems-status/
|
3
|
+
require "gems-status/text_view"
|
4
4
|
|
5
5
|
module GemsStatus
|
6
6
|
|
7
7
|
class GemsCompositeCommand < GemsCommand
|
8
|
-
attr_accessor :results, :checker_results
|
8
|
+
attr_accessor :results, :checker_results, :command
|
9
9
|
|
10
|
-
def initialize
|
11
|
-
@
|
10
|
+
def initialize
|
11
|
+
@command = []
|
12
12
|
@checkers = []
|
13
13
|
@checker_results = {}
|
14
14
|
@comments = {}
|
15
|
-
@results =
|
16
|
-
@target = target
|
17
|
-
end
|
18
|
-
|
19
|
-
def add_command(command)
|
20
|
-
@commands << command
|
15
|
+
@results = []
|
21
16
|
end
|
22
17
|
|
23
18
|
def add_checker(check_object)
|
@@ -25,88 +20,38 @@ module GemsStatus
|
|
25
20
|
end
|
26
21
|
|
27
22
|
def execute
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
end
|
32
|
-
@commands.each do |command|
|
33
|
-
threads << Thread.new { command.execute }
|
34
|
-
end
|
35
|
-
threads.each { |aThread| aThread.join }
|
36
|
-
@commands.each do |command|
|
37
|
-
@results[command.ident] = command.result
|
38
|
-
end
|
23
|
+
return unless @command
|
24
|
+
@command.execute
|
25
|
+
@results << @command.result
|
39
26
|
@checkers.each do |check_object|
|
40
27
|
Utils::log_debug "checking #{check_object.class.name}"
|
41
|
-
@results
|
42
|
-
gems.each do |gem|
|
28
|
+
@results.each do |gems|
|
29
|
+
gems.each do |name, gem|
|
43
30
|
if !check_object.check?(gem)
|
44
|
-
|
45
|
-
|
46
|
-
<br/>#{gem.name} #{gem.version} #{gem.origin}: <br/>
|
47
|
-
#{check_object.description} "
|
31
|
+
@checker_results[name] = {} unless @checker_results[name]
|
32
|
+
@checker_results[gem.name][check_object.class.name] = "#{check_object.description}"
|
48
33
|
end
|
49
34
|
end
|
50
35
|
end
|
51
36
|
end
|
52
37
|
end
|
53
38
|
|
54
|
-
def common_key?(k)
|
55
|
-
if !are_there_results?
|
56
|
-
return false
|
57
|
-
end
|
58
|
-
@results.each do |key, result|
|
59
|
-
if !result[k] then
|
60
|
-
return false
|
61
|
-
end
|
62
|
-
end
|
63
|
-
return true
|
64
|
-
end
|
65
|
-
|
66
39
|
def add_comments(comments)
|
67
40
|
@comments = comments
|
68
41
|
end
|
69
42
|
|
70
43
|
def are_there_results?
|
71
|
-
|
72
|
-
return false
|
73
|
-
end
|
74
|
-
if !@results.has_key?(@target)
|
75
|
-
return false
|
76
|
-
end
|
77
|
-
if @results.length<2
|
78
|
-
return false
|
79
|
-
end
|
80
|
-
return true
|
44
|
+
return @results && !@results.empty?
|
81
45
|
end
|
82
46
|
|
83
47
|
def print
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
end
|
92
|
-
@results[@target].sort.each do |k,v|
|
93
|
-
if !common_key?(k) then
|
94
|
-
Utils::log_error(k, "#{k} in #{@target} but not found in all the sources!")
|
95
|
-
end
|
96
|
-
if @checker_results[k]
|
97
|
-
checker_results = @checker_results[k]
|
98
|
-
else
|
99
|
-
checker_results = nil
|
100
|
-
end
|
101
|
-
if @comments[k]
|
102
|
-
comments = @comments[k]
|
103
|
-
else
|
104
|
-
comments = nil
|
105
|
-
end
|
106
|
-
html_view.print_results(k, @results, @target, checker_results, comments)
|
107
|
-
@comments.delete(k)
|
108
|
-
end
|
109
|
-
html_view.print_tail(@checker_results, @comments)
|
48
|
+
return if !are_there_results?
|
49
|
+
view = TextView.new
|
50
|
+
view.print_head
|
51
|
+
ids = @command.filename
|
52
|
+
view.print_description(ids)
|
53
|
+
view.print_results(@results, @checker_results, @comments)
|
54
|
+
view.print_tail
|
110
55
|
end
|
111
56
|
end
|
112
57
|
end
|
data/lib/gems-status/sources.rb
CHANGED
@@ -11,13 +11,13 @@ require "gems-status/utils"
|
|
11
11
|
module GemsStatus
|
12
12
|
|
13
13
|
class LockfileGems < GemsCommand
|
14
|
+
attr_reader :filename
|
14
15
|
def initialize(conf)
|
15
|
-
Utils::check_parameters('LockfileGems', conf, ["id", "
|
16
|
-
@
|
16
|
+
Utils::check_parameters('LockfileGems', conf, ["id", "filename", "gems_url"])
|
17
|
+
@filename = conf['filename']
|
17
18
|
@gems_url = conf['gems_url']
|
18
19
|
@result = {}
|
19
20
|
@ident = conf['id']
|
20
|
-
@upstream_url = conf['upstream_url']
|
21
21
|
end
|
22
22
|
|
23
23
|
def get_data(dirname, filename)
|
@@ -45,47 +45,30 @@ module GemsStatus
|
|
45
45
|
return changes
|
46
46
|
end
|
47
47
|
|
48
|
-
def update_dependencies
|
49
|
-
changes = false
|
50
|
-
@result.each do |k, gems|
|
51
|
-
gems.each do |gem|
|
52
|
-
changes = update_gem_dependencies(gem) || changes
|
53
|
-
end
|
54
|
-
end
|
55
|
-
update_dependencies if changes
|
56
|
-
end
|
57
|
-
|
58
48
|
def execute
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
gems_url = @gems_url
|
78
|
-
end
|
79
|
-
@result[name] = [] if !@result[name]
|
80
|
-
@result[name] << RubyGemsGems_GemSimple.new(name, version , '', filename,
|
81
|
-
gems_url, dependencies)
|
82
|
-
@result[name] << RubyGemsGems_GemSimple.new(name, version , '', @upstream_url,
|
83
|
-
@upstream_url, dependencies)
|
49
|
+
Utils::log_debug "reading #{@filename}"
|
50
|
+
Dir.chdir(File.dirname(@filename)) do
|
51
|
+
file_data = get_data(File::dirname(@filename), File::basename(@filename))
|
52
|
+
if file_data.empty?
|
53
|
+
Utils::log_error("?", "file empty #{@filename}")
|
54
|
+
next
|
55
|
+
end
|
56
|
+
lockfile = Bundler::LockfileParser.new(file_data)
|
57
|
+
lockfile.specs.each do |spec|
|
58
|
+
name = spec.name
|
59
|
+
version = Gem::Version.create(spec.version)
|
60
|
+
dependencies = spec.dependencies
|
61
|
+
Utils::log_debug "dependencies for #{name} #{dependencies}"
|
62
|
+
if spec.source.class.name == "Bundler::Source::Git"
|
63
|
+
Utils::log_debug "this comes from git #{name} #{version}"
|
64
|
+
gems_url = spec.source.uri
|
65
|
+
else
|
66
|
+
gems_url = @gems_url
|
84
67
|
end
|
68
|
+
@result[name] = RubyGemsGems_GemSimple.new(name, version , '', @filename,
|
69
|
+
gems_url, dependencies)
|
85
70
|
end
|
86
|
-
update_dependencies
|
87
71
|
end
|
88
72
|
end
|
89
|
-
|
90
73
|
end
|
91
74
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'gems-status/gems_status_metadata'
|
3
|
+
require 'gems-status/utils'
|
4
|
+
|
5
|
+
module GemsStatus
|
6
|
+
|
7
|
+
class TextView
|
8
|
+
|
9
|
+
def print_description(app)
|
10
|
+
puts "gems-status report for #{app}"
|
11
|
+
puts "---"
|
12
|
+
end
|
13
|
+
|
14
|
+
def print_results(results, checker_results, comments)
|
15
|
+
results.each do |result|
|
16
|
+
result.each do |_, gem|
|
17
|
+
puts "#{gem.name}: #{gem.version} #{gem.license}"
|
18
|
+
next unless checker_results[gem.name]
|
19
|
+
checker_results[gem.name].each do |_, msg|
|
20
|
+
puts "#{msg}"
|
21
|
+
end
|
22
|
+
puts "#{comments[gem.name]}" if comments[gem.name]
|
23
|
+
puts ""
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
def print_head
|
30
|
+
end
|
31
|
+
|
32
|
+
def print_tail
|
33
|
+
puts "---"
|
34
|
+
date = Time.now.strftime('%a %b %d %H:%M:%S %Z %Y')
|
35
|
+
puts "run by https://github.com/jordimassaguerpla/gems-status"
|
36
|
+
puts "#{date} - version: #{GemsStatus::VERSION}"
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|