license_scout 0.1.3 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +13 -5
  3. data/bin/license_scout +39 -1
  4. data/bin/rebar_lock_json +0 -0
  5. data/erl_src/rebar_lock_json/README.md +17 -0
  6. data/erl_src/rebar_lock_json/rebar.config +19 -0
  7. data/erl_src/rebar_lock_json/rebar.lock +36 -0
  8. data/erl_src/rebar_lock_json/src/rebar_lock_json.app.src +17 -0
  9. data/erl_src/rebar_lock_json/src/rebar_lock_json.erl +20 -0
  10. data/lib/license_scout/canonical_licenses/BSD-2-Clause.txt +19 -0
  11. data/lib/license_scout/canonical_licenses/BSD-3-Clause.txt +27 -0
  12. data/lib/license_scout/canonical_licenses/Chef-MLSA.txt +5 -0
  13. data/lib/license_scout/collector.rb +1 -1
  14. data/lib/license_scout/dependency_manager/base.rb +8 -1
  15. data/lib/license_scout/dependency_manager/berkshelf.rb +1 -1
  16. data/lib/license_scout/dependency_manager/bundler.rb +1 -1
  17. data/lib/license_scout/dependency_manager/cpanm.rb +160 -0
  18. data/lib/license_scout/dependency_manager/dep.rb +87 -0
  19. data/lib/license_scout/dependency_manager/glide.rb +79 -0
  20. data/lib/license_scout/dependency_manager/godep.rb +71 -0
  21. data/lib/license_scout/dependency_manager/rebar.rb +6 -35
  22. data/lib/license_scout/dependency_manager.rb +5 -2
  23. data/lib/license_scout/license_file_analyzer/definitions.rb +8 -1
  24. data/lib/license_scout/license_file_analyzer/templates/Apache2.txt +0 -2
  25. data/lib/license_scout/license_file_analyzer/templates/Chef-MLSA.txt +5 -0
  26. data/lib/license_scout/net_fetcher.rb +1 -0
  27. data/lib/license_scout/options.rb +1 -1
  28. data/lib/license_scout/overrides.rb +553 -19
  29. data/lib/license_scout/version.rb +1 -1
  30. metadata +45 -13
  31. data/.gitignore +0 -9
  32. data/.rspec +0 -3
  33. data/.rubocop.yml +0 -4
  34. data/.travis.yml +0 -11
  35. data/Gemfile +0 -24
  36. data/Rakefile +0 -39
  37. data/appveyor.yml +0 -19
  38. data/bin/config_to_json +0 -0
  39. data/lib/license_scout/dependency_manager/cpan.rb +0 -322
  40. data/license_scout.gemspec +0 -54
@@ -0,0 +1,71 @@
1
+ #
2
+ # Copyright:: Copyright 2016, Chef Software Inc.
3
+ # License:: Apache License, Version 2.0
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
+
18
+ require "ffi_yajl"
19
+ require "license_scout/dependency_manager/base"
20
+
21
+ module LicenseScout
22
+ module DependencyManager
23
+ class Godep < Base
24
+
25
+ def name
26
+ "go_godep"
27
+ end
28
+
29
+ def detected?
30
+ File.exist?(root_godeps_file)
31
+ end
32
+
33
+ def dependencies
34
+ godeps = File.open(root_godeps_file) do |f|
35
+ FFI_Yajl::Parser.parse(f)
36
+ end
37
+
38
+ godeps["Deps"].map do |pkg_info|
39
+ pkg_import_name = pkg_info["ImportPath"]
40
+ pkg_file_name = pkg_import_name.tr("/", "_")
41
+ pkg_version = pkg_info["Comment"] || pkg_info["Rev"]
42
+ license = options.overrides.license_for("go", pkg_import_name, pkg_version)
43
+
44
+ override_license_files = options.overrides.license_files_for("go", pkg_import_name, pkg_version)
45
+ if override_license_files.empty?
46
+ license_files = find_license_files_for_package_in_gopath(pkg_import_name)
47
+ else
48
+ license_files = override_license_files.resolve_locations(gopath(pkg_import_name))
49
+ end
50
+
51
+ create_dependency(pkg_file_name, pkg_version, license, license_files)
52
+ end
53
+ end
54
+
55
+ private
56
+
57
+ def root_godeps_file
58
+ File.join(project_dir, "Godeps/Godeps.json")
59
+ end
60
+
61
+ def gopath(pkg)
62
+ "#{ENV['GOPATH']}/src/#{pkg}"
63
+ end
64
+
65
+ def find_license_files_for_package_in_gopath(pkg)
66
+ root_files = Dir["#{gopath(pkg)}/*"]
67
+ root_files.select { |f| POSSIBLE_LICENSE_FILES.include?(File.basename(f)) }
68
+ end
69
+ end
70
+ end
71
+ end
@@ -103,46 +103,17 @@ module LicenseScout
103
103
 
104
104
  return unless File.exist?(rebar_lock_path)
105
105
 
106
- # We parse the rebar.lock using 'config_to_json' from
107
- # https://github.com/basho/erlang_template_helper This binary requires
108
- # escript to be on the path so we use the environment provided to
109
- # license_scout if available.
110
-
111
- config_to_json_path = File.expand_path("../../../bin/config_to_json", File.dirname(__FILE__))
112
- s = Mixlib::ShellOut.new("#{config_to_json_path} #{rebar_lock_path}", environment: options.environment)
106
+ rebar_lock_to_json_path = File.expand_path("../../../bin/rebar_lock_json", File.dirname(__FILE__))
107
+ s = Mixlib::ShellOut.new("#{rebar_lock_to_json_path} #{rebar_lock_path}", environment: options.environment)
113
108
  s.run_command
114
109
  s.error!
115
110
 
116
- # Parsed rebar.lock will contain "type" information for each field
117
- # prepended into the output array. What we get from it looks like this:
118
- # [["__tuple",
119
- # "__binary_edown",
120
- # ["__tuple",
121
- # "git",
122
- # "__string_git://github.com/seth/edown.git",
123
- # ["__tuple", "ref", "__string_30a9f7867d615af45783235faa52742d11a9348e"]],
124
- # 1],
125
- # ["__tuple",
126
- # "__binary_mochiweb",
127
- # ["__tuple", "pkg", "__binary_mochiweb", "__binary_2.12.2"],
128
- # 2],
129
- # ...
130
- #
131
111
  rebar_lock_content = FFI_Yajl::Parser.parse(s.stdout)
132
112
 
133
- rebar_lock_content.each do |element|
134
- # We are trying to match the mochiweb example above. Notice the 'pkg'
135
- # entry in its source information. We are doing some very specific
136
- # String matching here because we can not bring over
137
- # erlang_template_helper gem since it is not released to rubygems.
138
-
139
- next if !element.is_a?(Array) || element.length < 3
140
- source_info = element[2]
141
-
142
- next if !source_info.is_a?(Array) || source_info.length < 4
143
- if source_info[1] == "pkg"
144
- source_name = source_info[2].gsub("__binary_", "").gsub("__string_", "")
145
- source_version = source_info[3].gsub("__binary_", "").gsub("__string_", "")
113
+ rebar_lock_content.each do |name, source_info|
114
+ if source_info["type"] == "pkg"
115
+ source_name = source_info["pkg_name"]
116
+ source_version = source_info["pkg_version"]
146
117
 
147
118
  packaged_dependencies[source_name] = source_version
148
119
  end
@@ -17,7 +17,10 @@
17
17
 
18
18
  require "license_scout/dependency_manager/bundler"
19
19
  require "license_scout/dependency_manager/rebar"
20
- require "license_scout/dependency_manager/cpan"
20
+ require "license_scout/dependency_manager/cpanm"
21
+ require "license_scout/dependency_manager/godep"
22
+ require "license_scout/dependency_manager/dep"
23
+ require "license_scout/dependency_manager/glide"
21
24
  require "license_scout/dependency_manager/berkshelf"
22
25
  require "license_scout/dependency_manager/npm"
23
26
  require "license_scout/dependency_manager/manual"
@@ -25,7 +28,7 @@ require "license_scout/dependency_manager/manual"
25
28
  module LicenseScout
26
29
  module DependencyManager
27
30
  def self.implementations
28
- [Bundler, Rebar, CPAN, Berkshelf, NPM, Manual]
31
+ [Bundler, Rebar, Cpanm, Berkshelf, NPM, Godep, Dep, Glide, Manual]
29
32
  end
30
33
  end
31
34
  end
@@ -64,6 +64,7 @@ module LicenseScout
64
64
  ruby,
65
65
  bsd_2_clause,
66
66
  erlang_public,
67
+ chef_mlsa,
67
68
  ]
68
69
  end
69
70
 
@@ -107,7 +108,7 @@ module LicenseScout
107
108
 
108
109
  def lgpl
109
110
  License.new(
110
- short_name: "LGPL-3.0"
111
+ short_name: "LGPL-3.0"
111
112
  )
112
113
  end
113
114
 
@@ -207,6 +208,12 @@ module LicenseScout
207
208
  )
208
209
  end
209
210
 
211
+ def chef_mlsa
212
+ License.new(
213
+ short_name: "Chef-MLSA"
214
+ )
215
+ end
216
+
210
217
  end
211
218
  end
212
219
  end
@@ -168,5 +168,3 @@
168
168
  defend, and hold each Contributor harmless for any liability
169
169
  incurred by, or claims asserted against, such Contributor by reason
170
170
  of your accepting any such warranty or additional liability.
171
-
172
- END OF TERMS AND CONDITIONS
@@ -0,0 +1,5 @@
1
+ Use of this Software is subject to the terms of the Chef Online Master
2
+ License and Services Agreement. You can find the latest copy of the
3
+ agreement here:
4
+
5
+ https://www.chef.io/online-master-agreement
@@ -18,6 +18,7 @@
18
18
  require "open-uri"
19
19
  require "tmpdir"
20
20
  require "digest"
21
+ require "socket" # Defines `SocketError`
21
22
 
22
23
  require "license_scout/exceptions"
23
24
 
@@ -22,7 +22,7 @@ module LicenseScout
22
22
  SUPPORTED_OPTIONS = [:overrides, :environment, :ruby_bin, :cpan_cache, :manual_licenses]
23
23
 
24
24
  SUPPORTED_OPTIONS.each do |o|
25
- self.send(:attr_reader, o)
25
+ send(:attr_reader, o)
26
26
  end
27
27
 
28
28
  def initialize(options = {})