license_finder 4.0.2 → 5.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +4 -2
- data/CHANGELOG.md +16 -1
- data/CONTRIBUTING.md +23 -5
- data/Gemfile +0 -1
- data/README.md +6 -1
- data/Rakefile +2 -2
- data/ci/pipelines/pipeline.yml.erb +1 -1
- data/ci/pipelines/release.yml +14 -23
- data/ci/scripts/pushscript.sh +1 -2
- data/ci/scripts/run-rubocop.sh +1 -1
- data/ci/scripts/updateChangelog.sh +77 -0
- data/ci/tasks/build.yml +1 -1
- data/ci/tasks/update-changelog.yml +15 -0
- data/lib/license_finder/cli/base.rb +19 -13
- data/lib/license_finder/cli/main.rb +54 -37
- data/lib/license_finder/cli/makes_decisions.rb +3 -2
- data/lib/license_finder/configuration.rb +68 -15
- data/lib/license_finder/core.rb +17 -7
- data/lib/license_finder/decisions_factory.rb +11 -0
- data/lib/license_finder/license/templates/SimplifiedBSD.txt +1 -1
- data/lib/license_finder/license_aggregator.rb +11 -6
- data/lib/license_finder/logger.rb +2 -2
- data/lib/license_finder/package.rb +18 -16
- data/lib/license_finder/package_manager.rb +40 -47
- data/lib/license_finder/package_managers/bower.rb +8 -4
- data/lib/license_finder/package_managers/bundler.rb +8 -5
- data/lib/license_finder/package_managers/carthage.rb +4 -4
- data/lib/license_finder/package_managers/cocoa_pods.rb +2 -2
- data/lib/license_finder/package_managers/conan.rb +1 -1
- data/lib/license_finder/package_managers/gradle.rb +1 -1
- data/lib/license_finder/package_managers/maven.rb +1 -3
- data/lib/license_finder/package_managers/mix.rb +8 -4
- data/lib/license_finder/package_managers/npm.rb +5 -1
- data/lib/license_finder/package_managers/pip.rb +2 -2
- data/lib/license_finder/package_managers/rebar.rb +4 -4
- data/lib/license_finder/package_managers/yarn.rb +2 -2
- data/lib/license_finder/{packages → package_utils}/activation.rb +0 -0
- data/lib/license_finder/{package_managers → package_utils}/conan_info_parser.rb +1 -1
- data/lib/license_finder/{package_managers → package_utils}/gradle_dependency_finder.rb +0 -0
- data/lib/license_finder/{packages → package_utils}/license_files.rb +1 -1
- data/lib/license_finder/{packages → package_utils}/licensing.rb +1 -1
- data/lib/license_finder/{package_managers → package_utils}/maven_dependency_finder.rb +0 -0
- data/lib/license_finder/{packages → package_utils}/possible_license_file.rb +0 -0
- data/lib/license_finder/{package_managers → packages}/bower_package.rb +0 -0
- data/lib/license_finder/{package_managers → packages}/bundler_package.rb +0 -0
- data/lib/license_finder/{package_managers → packages}/carthage_package.rb +0 -0
- data/lib/license_finder/{package_managers → packages}/cocoa_pods_package.rb +0 -0
- data/lib/license_finder/{package_managers → packages}/conan_package.rb +0 -0
- data/lib/license_finder/{package_managers → packages}/go_package.rb +0 -0
- data/lib/license_finder/{package_managers → packages}/gradle_package.rb +0 -0
- data/lib/license_finder/{package_managers → packages}/maven_package.rb +0 -0
- data/lib/license_finder/packages/merged_package.rb +42 -0
- data/lib/license_finder/{package_managers → packages}/mix_package.rb +0 -0
- data/lib/license_finder/{package_managers → packages}/npm_package.rb +0 -0
- data/lib/license_finder/{package_managers → packages}/nuget_package.rb +0 -0
- data/lib/license_finder/{package_managers → packages}/pip_package.rb +0 -0
- data/lib/license_finder/{package_managers → packages}/rebar_package.rb +0 -0
- data/lib/license_finder/packages/yarn_package.rb +7 -0
- data/lib/license_finder/project_finder.rb +1 -1
- data/lib/license_finder/reports/csv_report.rb +1 -0
- data/lib/license_finder/reports/merged_report.rb +2 -0
- data/lib/license_finder/reports/templates/html_report.erb +8 -0
- data/lib/license_finder/reports/templates/markdown_report.erb +7 -0
- data/lib/license_finder/scanner.rb +38 -0
- data/lib/license_finder/version.rb +1 -1
- data/license_finder.gemspec +9 -2
- metadata +37 -101
- data/ci/tasks/get-version-and-tag.yml +0 -20
- data/features/features/cli/cli_spec.rb +0 -63
- data/features/features/configure/add_dependencies_spec.rb +0 -54
- data/features/features/configure/approve_dependencies_spec.rb +0 -61
- data/features/features/configure/assign_licenses_spec.rb +0 -35
- data/features/features/configure/blacklist_licenses_spec.rb +0 -30
- data/features/features/configure/ignore_dependencies_spec.rb +0 -35
- data/features/features/configure/ignore_groups_spec.rb +0 -46
- data/features/features/configure/name_project_spec.rb +0 -33
- data/features/features/configure/set_project_path_spec.rb +0 -17
- data/features/features/configure/whitelist_licenses_spec.rb +0 -38
- data/features/features/package_managers/bower_spec.rb +0 -14
- data/features/features/package_managers/carthage_spec.rb +0 -14
- data/features/features/package_managers/cocoapods_spec.rb +0 -14
- data/features/features/package_managers/conan_spec.rb +0 -11
- data/features/features/package_managers/dep_spec.rb +0 -15
- data/features/features/package_managers/glide_spec.rb +0 -26
- data/features/features/package_managers/godep_spec.rb +0 -17
- data/features/features/package_managers/govendor_spec.rb +0 -15
- data/features/features/package_managers/gradle_spec.rb +0 -34
- data/features/features/package_managers/gvt_spec.rb +0 -14
- data/features/features/package_managers/maven_spec.rb +0 -22
- data/features/features/package_managers/mix_spec.rb +0 -16
- data/features/features/package_managers/npm_spec.rb +0 -14
- data/features/features/package_managers/nuget_spec.rb +0 -14
- data/features/features/package_managers/pip_spec.rb +0 -14
- data/features/features/package_managers/rebar_spec.rb +0 -14
- data/features/features/package_managers/yarn_spec.rb +0 -14
- data/features/features/report/composite_spec.rb +0 -28
- data/features/features/report/csv_spec.rb +0 -18
- data/features/features/report/diff_spec.rb +0 -203
- data/features/features/report/html_spec.rb +0 -51
- data/features/features/report/java_groups_spec.rb +0 -11
- data/features/features/report/subproject_spec.rb +0 -63
- data/features/fixtures/Cartfile +0 -1
- data/features/fixtures/Podfile +0 -3
- data/features/fixtures/alternate-build-file-gradle/build-alt.gradle +0 -16
- data/features/fixtures/alternate-build-file-gradle/settings.gradle +0 -1
- data/features/fixtures/build.gradle +0 -16
- data/features/fixtures/conanfile.txt +0 -11
- data/features/fixtures/file-based-libs-gradle/build.gradle +0 -16
- data/features/fixtures/file-based-libs-gradle/libs/data.json-0.2.3.jar +0 -0
- data/features/fixtures/gopath/src/github.com/pivotal/foo/Godeps/Godeps.json +0 -16
- data/features/fixtures/gopath/src/github.com/pivotal/foo/Godeps/Readme +0 -5
- data/features/fixtures/gopath/src/github.com/pivotal/foo/foo.go +0 -6
- data/features/fixtures/gopath_dep/src/foo-dep/Gopkg.lock +0 -14
- data/features/fixtures/gopath_dep/src/foo-dep/Gopkg.toml +0 -7
- data/features/fixtures/gopath_dep/src/foo-dep/bar/bar.go +0 -10
- data/features/fixtures/gopath_dep/src/foo-dep/foo.go +0 -7
- data/features/fixtures/gopath_dep/src/foo-dep/vendor/a/b/LICENSE +0 -1
- data/features/fixtures/gopath_glide/src/glide.lock +0 -9
- data/features/fixtures/gopath_glide/src/glide.yaml +0 -6
- data/features/fixtures/gopath_glide_without_src/glide.lock +0 -9
- data/features/fixtures/gopath_glide_without_src/glide.yaml +0 -6
- data/features/fixtures/gopath_govendor/src/vendor/vendor.json +0 -19
- data/features/fixtures/gopath_gvt/src/vendor/manifest +0 -22
- data/features/fixtures/gradle-wrapper/build.gradle +0 -16
- data/features/fixtures/gradle-wrapper/gradlew +0 -8
- data/features/fixtures/gradle-wrapper/gradlew.bat +0 -9
- data/features/fixtures/maven-wrapper/mvnw +0 -3
- data/features/fixtures/maven-wrapper/mvnw.cmd +0 -7
- data/features/fixtures/maven-wrapper/pom.xml +0 -37
- data/features/fixtures/mix.exs +0 -22
- data/features/fixtures/multi-module-gradle/build.gradle +0 -12
- data/features/fixtures/multi-module-gradle/module1/build.gradle +0 -3
- data/features/fixtures/multi-module-gradle/module2/build.gradle +0 -3
- data/features/fixtures/multi-module-gradle/settings.gradle +0 -1
- data/features/fixtures/nuget/.nuget/.keep +0 -0
- data/features/fixtures/nuget/Fun.Test/packages.config +0 -4
- data/features/fixtures/nuget/Fun/packages.config +0 -5
- data/features/fixtures/pom.xml +0 -19
- data/features/fixtures/rebar.config +0 -12
- data/features/fixtures/single-module-gradle/build.gradle +0 -16
- data/features/support/feature_helper.rb +0 -15
- data/features/support/testing_dsl.rb +0 -564
- data/lib/license_finder/package_managers/merged_package.rb +0 -95
- data/license_finder-2.1.2.gem +0 -0
@@ -19,6 +19,44 @@ module LicenseFinder
|
|
19
19
|
true
|
20
20
|
end
|
21
21
|
|
22
|
+
def mix_command
|
23
|
+
get(:mix_command) || 'mix'
|
24
|
+
end
|
25
|
+
|
26
|
+
def merge(other_hash)
|
27
|
+
dup_with other_hash
|
28
|
+
end
|
29
|
+
|
30
|
+
def rebar_deps_dir
|
31
|
+
path = get(:rebar_deps_dir) || 'deps'
|
32
|
+
project_path.join(path).expand_path
|
33
|
+
end
|
34
|
+
|
35
|
+
def mix_deps_dir
|
36
|
+
path = get(:mix_deps_dir) || 'deps'
|
37
|
+
project_path.join(path).expand_path
|
38
|
+
end
|
39
|
+
|
40
|
+
def decisions_file_path
|
41
|
+
path = File.join(project_path, 'doc/dependency_decisions.yml') unless project_path.nil?
|
42
|
+
path = get(:decisions_file) unless get(:decisions_file).nil?
|
43
|
+
path = 'doc/dependency_decisions.yml' if path.nil?
|
44
|
+
Pathname.new(path)
|
45
|
+
end
|
46
|
+
|
47
|
+
def log_directory
|
48
|
+
path = get(:log_directory) || 'lf_logs'
|
49
|
+
project_path.join(path).expand_path
|
50
|
+
end
|
51
|
+
|
52
|
+
def project_path
|
53
|
+
Pathname(path_prefix).expand_path
|
54
|
+
end
|
55
|
+
|
56
|
+
def logger_mode
|
57
|
+
get(:logger)
|
58
|
+
end
|
59
|
+
|
22
60
|
def gradle_command
|
23
61
|
get(:gradle_command)
|
24
62
|
end
|
@@ -47,31 +85,41 @@ module LicenseFinder
|
|
47
85
|
get(:rebar_command)
|
48
86
|
end
|
49
87
|
|
50
|
-
def
|
51
|
-
get(:
|
88
|
+
def prepare
|
89
|
+
get(:prepare) || prepare_no_fail
|
52
90
|
end
|
53
91
|
|
54
|
-
def
|
55
|
-
|
56
|
-
project_path.join(path).expand_path
|
92
|
+
def prepare_no_fail
|
93
|
+
get(:prepare_no_fail)
|
57
94
|
end
|
58
95
|
|
59
|
-
def
|
60
|
-
|
61
|
-
project_path.join(path).expand_path
|
96
|
+
def save_file
|
97
|
+
get(:save)
|
62
98
|
end
|
63
99
|
|
64
|
-
def
|
65
|
-
|
66
|
-
project_path.join(path).expand_path
|
100
|
+
def aggregate_paths
|
101
|
+
get(:aggregate_paths)
|
67
102
|
end
|
68
103
|
|
69
|
-
def
|
70
|
-
|
104
|
+
def recursive
|
105
|
+
get(:recursive)
|
71
106
|
end
|
72
107
|
|
73
|
-
def
|
74
|
-
get(:
|
108
|
+
def format
|
109
|
+
get(:format)
|
110
|
+
end
|
111
|
+
|
112
|
+
def columns
|
113
|
+
get(:columns)
|
114
|
+
end
|
115
|
+
|
116
|
+
protected
|
117
|
+
|
118
|
+
attr_accessor :primary_config
|
119
|
+
def dup_with(other_hash)
|
120
|
+
dup.tap do |dup|
|
121
|
+
dup.primary_config.merge!(other_hash)
|
122
|
+
end
|
75
123
|
end
|
76
124
|
|
77
125
|
private
|
@@ -82,6 +130,11 @@ module LicenseFinder
|
|
82
130
|
@primary_config[key.to_sym] || @saved_config[key.to_s]
|
83
131
|
end
|
84
132
|
|
133
|
+
def initialize_copy(orig)
|
134
|
+
super
|
135
|
+
@primary_config = @primary_config.dup
|
136
|
+
end
|
137
|
+
|
85
138
|
def path_prefix
|
86
139
|
get(:project_path) || ''
|
87
140
|
end
|
data/lib/license_finder/core.rb
CHANGED
@@ -6,7 +6,9 @@ require 'license_finder/license'
|
|
6
6
|
require 'license_finder/configuration'
|
7
7
|
require 'license_finder/package_manager'
|
8
8
|
require 'license_finder/decisions'
|
9
|
+
require 'license_finder/decisions_factory'
|
9
10
|
require 'license_finder/decision_applier'
|
11
|
+
require 'license_finder/scanner'
|
10
12
|
|
11
13
|
module LicenseFinder
|
12
14
|
# Coordinates setup
|
@@ -26,9 +28,10 @@ module LicenseFinder
|
|
26
28
|
# rebar_command: "rebar",
|
27
29
|
# rebar_deps_dir: "deps",
|
28
30
|
# }
|
29
|
-
def initialize(
|
30
|
-
@logger = Logger.new(
|
31
|
-
@config =
|
31
|
+
def initialize(configuration)
|
32
|
+
@logger = Logger.new(configuration.logger_mode)
|
33
|
+
@config = configuration
|
34
|
+
@scanner = Scanner.new(options)
|
32
35
|
end
|
33
36
|
|
34
37
|
def modifying
|
@@ -48,11 +51,12 @@ module LicenseFinder
|
|
48
51
|
end
|
49
52
|
|
50
53
|
def decisions
|
51
|
-
@decisions ||=
|
54
|
+
@decisions ||= DecisionsFactory.decisions(config.decisions_file_path)
|
52
55
|
end
|
53
56
|
|
54
57
|
def prepare_projects
|
55
|
-
|
58
|
+
clear_logs
|
59
|
+
package_managers = @scanner.active_package_managers
|
56
60
|
package_managers.each do |manager|
|
57
61
|
logger.debug manager.class, 'Running prepare on project'
|
58
62
|
manager.prepare
|
@@ -74,13 +78,18 @@ module LicenseFinder
|
|
74
78
|
|
75
79
|
def current_packages
|
76
80
|
# lazy, do not move to `initialize`
|
77
|
-
|
81
|
+
@scanner.active_packages
|
82
|
+
end
|
83
|
+
|
84
|
+
def clear_logs
|
85
|
+
FileUtils.rmdir config.log_directory if File.directory? config.log_directory
|
78
86
|
end
|
79
87
|
|
80
88
|
def options
|
81
89
|
{
|
82
90
|
logger: logger,
|
83
91
|
project_path: config.project_path,
|
92
|
+
log_directory: File.join(config.log_directory, project_name),
|
84
93
|
ignored_groups: decisions.ignored_groups,
|
85
94
|
go_full_version: config.go_full_version,
|
86
95
|
gradle_command: config.gradle_command,
|
@@ -92,7 +101,8 @@ module LicenseFinder
|
|
92
101
|
rebar_deps_dir: config.rebar_deps_dir,
|
93
102
|
mix_command: config.mix_command,
|
94
103
|
mix_deps_dir: config.mix_deps_dir,
|
95
|
-
prepare: config.prepare
|
104
|
+
prepare: config.prepare,
|
105
|
+
prepare_no_fail: config.prepare_no_fail
|
96
106
|
}
|
97
107
|
end
|
98
108
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module LicenseFinder
|
2
|
+
class DecisionsFactory
|
3
|
+
@decisions = {}
|
4
|
+
class << self
|
5
|
+
def decisions(decisions_file_path)
|
6
|
+
@decisions[decisions_file_path] = Decisions.fetch_saved(decisions_file_path) if @decisions[decisions_file_path].nil?
|
7
|
+
@decisions[decisions_file_path]
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -10,7 +10,7 @@ modification, are permitted provided that the following conditions are met:
|
|
10
10
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
11
11
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
12
12
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
13
|
-
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
13
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
14
14
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
15
15
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
16
16
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module LicenseFinder
|
2
2
|
class LicenseAggregator
|
3
|
-
def initialize(
|
4
|
-
@
|
3
|
+
def initialize(config, aggregate_paths)
|
4
|
+
@config = config
|
5
5
|
@aggregate_paths = aggregate_paths
|
6
6
|
end
|
7
7
|
|
@@ -10,7 +10,10 @@ module LicenseFinder
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def any_packages?
|
13
|
-
finders.map
|
13
|
+
finders.map do |finder|
|
14
|
+
finder.prepare_projects if @config.prepare
|
15
|
+
finder.any_packages?
|
16
|
+
end.reduce(:|)
|
14
17
|
end
|
15
18
|
|
16
19
|
def unapproved
|
@@ -26,10 +29,12 @@ module LicenseFinder
|
|
26
29
|
def finders
|
27
30
|
return @finders unless @finders.nil?
|
28
31
|
@finders = if @aggregate_paths.nil?
|
29
|
-
[LicenseFinder::Core.new(@
|
32
|
+
[LicenseFinder::Core.new(@config)]
|
30
33
|
else
|
31
34
|
@aggregate_paths.map do |path|
|
32
|
-
|
35
|
+
# Passing file paths as values instead of allowing them to evaluate in config
|
36
|
+
LicenseFinder::Core.new(@config.merge(project_path: path,
|
37
|
+
decisions_file: @config.decisions_file_path))
|
33
38
|
end
|
34
39
|
end
|
35
40
|
end
|
@@ -37,7 +42,7 @@ module LicenseFinder
|
|
37
42
|
def aggregate_packages
|
38
43
|
return @packages unless @packages.nil?
|
39
44
|
all_packages = finders.flat_map do |finder|
|
40
|
-
finder.prepare_projects if @
|
45
|
+
finder.prepare_projects if @config.prepare
|
41
46
|
finder.acknowledged.map { |dep| MergedPackage.new(dep, [finder.project_path]) }
|
42
47
|
end
|
43
48
|
@packages = all_packages.group_by { |package| [package.name, package.version] }
|
@@ -8,13 +8,13 @@ module LicenseFinder
|
|
8
8
|
|
9
9
|
attr_reader :mode
|
10
10
|
|
11
|
-
def initialize(
|
11
|
+
def initialize(mode = nil)
|
12
12
|
@system_logger = ::Logger.new(STDOUT)
|
13
13
|
@system_logger.formatter = proc do |_, _, _, msg|
|
14
14
|
"#{msg}\n"
|
15
15
|
end
|
16
16
|
|
17
|
-
self.mode =
|
17
|
+
self.mode = mode || MODE_INFO
|
18
18
|
end
|
19
19
|
|
20
20
|
[MODE_INFO, MODE_DEBUG].each do |level|
|
@@ -1,5 +1,5 @@
|
|
1
|
-
require 'license_finder/
|
2
|
-
require 'license_finder/
|
1
|
+
require 'license_finder/package_utils/licensing'
|
2
|
+
require 'license_finder/package_utils/license_files'
|
3
3
|
|
4
4
|
module LicenseFinder
|
5
5
|
# Super-class that adapts data from different package management
|
@@ -20,6 +20,7 @@ module LicenseFinder
|
|
20
20
|
def self.license_names_from_standard_spec(spec)
|
21
21
|
licenses = spec['licenses'] || [spec['license']].compact
|
22
22
|
licenses = [licenses] unless licenses.is_a?(Array)
|
23
|
+
licenses = licenses.flatten
|
23
24
|
licenses.map do |license|
|
24
25
|
if license.is_a? Hash
|
25
26
|
license['type']
|
@@ -167,17 +168,18 @@ module LicenseFinder
|
|
167
168
|
end
|
168
169
|
|
169
170
|
require 'license_finder/packages/manual_package'
|
170
|
-
require 'license_finder/
|
171
|
-
require 'license_finder/
|
172
|
-
require 'license_finder/
|
173
|
-
require 'license_finder/
|
174
|
-
require 'license_finder/
|
175
|
-
require 'license_finder/
|
176
|
-
require 'license_finder/
|
177
|
-
require 'license_finder/
|
178
|
-
require 'license_finder/
|
179
|
-
require 'license_finder/
|
180
|
-
require 'license_finder/
|
181
|
-
require 'license_finder/
|
182
|
-
require 'license_finder/
|
183
|
-
require 'license_finder/
|
171
|
+
require 'license_finder/packages/bower_package'
|
172
|
+
require 'license_finder/packages/go_package'
|
173
|
+
require 'license_finder/packages/bundler_package'
|
174
|
+
require 'license_finder/packages/pip_package'
|
175
|
+
require 'license_finder/packages/npm_package'
|
176
|
+
require 'license_finder/packages/maven_package'
|
177
|
+
require 'license_finder/packages/gradle_package'
|
178
|
+
require 'license_finder/packages/cocoa_pods_package'
|
179
|
+
require 'license_finder/packages/carthage_package'
|
180
|
+
require 'license_finder/packages/rebar_package'
|
181
|
+
require 'license_finder/packages/mix_package'
|
182
|
+
require 'license_finder/packages/merged_package'
|
183
|
+
require 'license_finder/packages/nuget_package'
|
184
|
+
require 'license_finder/packages/conan_package'
|
185
|
+
require 'license_finder/packages/yarn_package'
|
@@ -17,39 +17,6 @@ module LicenseFinder
|
|
17
17
|
include LicenseFinder::SharedHelpers
|
18
18
|
|
19
19
|
class << self
|
20
|
-
def package_managers
|
21
|
-
[GoDep, GoWorkspace, Go15VendorExperiment, Glide, Gvt, Govendor, Dep, Bundler, NPM, Pip,
|
22
|
-
Yarn, Bower, Maven, Gradle, CocoaPods, Rebar, Nuget, Carthage, Mix, Conan]
|
23
|
-
end
|
24
|
-
|
25
|
-
def active_packages(options = { project_path: Pathname.new('') })
|
26
|
-
package_managers = active_package_managers(options)
|
27
|
-
installed_package_managers = package_managers.select { |pm| pm.class.installed?(options[:logger]) }
|
28
|
-
installed_package_managers.flat_map(&:current_packages_with_relations)
|
29
|
-
end
|
30
|
-
|
31
|
-
def active_package_managers(options = { project_path: Pathname.new('') })
|
32
|
-
logger = options[:logger]
|
33
|
-
|
34
|
-
active_pm_classes = []
|
35
|
-
package_managers.each do |pm_class|
|
36
|
-
active = pm_class.new(options).active?
|
37
|
-
if active
|
38
|
-
logger.info pm_class, 'is active', color: :green
|
39
|
-
active_pm_classes << pm_class
|
40
|
-
else
|
41
|
-
logger.debug pm_class, 'is not active', color: :red
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
if active_pm_classes.empty?
|
46
|
-
logger.info 'License Finder', 'No active and installed package managers found for project.', color: :red
|
47
|
-
end
|
48
|
-
|
49
|
-
active_pm_classes -= active_pm_classes.map(&:takes_priority_over)
|
50
|
-
active_pm_classes.map { |pm_class| pm_class.new(options) }
|
51
|
-
end
|
52
|
-
|
53
20
|
def takes_priority_over
|
54
21
|
nil
|
55
22
|
end
|
@@ -78,9 +45,22 @@ module LicenseFinder
|
|
78
45
|
end
|
79
46
|
end
|
80
47
|
|
48
|
+
def self.command_exists?(command)
|
49
|
+
_stdout, _stderr, status =
|
50
|
+
if LicenseFinder::Platform.windows?
|
51
|
+
Cmd.run("where #{command}")
|
52
|
+
else
|
53
|
+
Cmd.run("which #{command}")
|
54
|
+
end
|
55
|
+
|
56
|
+
status.success?
|
57
|
+
end
|
58
|
+
|
81
59
|
def initialize(options = {})
|
60
|
+
@prepare_no_fail = options[:prepare_no_fail]
|
82
61
|
@logger = options[:logger] || Core.default_logger
|
83
62
|
@project_path = options[:project_path]
|
63
|
+
@log_directory = options[:log_directory]
|
84
64
|
end
|
85
65
|
|
86
66
|
def active?
|
@@ -94,15 +74,24 @@ module LicenseFinder
|
|
94
74
|
|
95
75
|
def prepare
|
96
76
|
if self.class.prepare_command
|
97
|
-
_stdout,
|
98
|
-
|
77
|
+
_stdout, stderr, status = Cmd.run(self.class.prepare_command)
|
78
|
+
unless status.success?
|
79
|
+
log_errors stderr
|
80
|
+
raise "Prepare command '#{self.class.prepare_command}' failed" unless @prepare_no_fail
|
81
|
+
end
|
99
82
|
else
|
100
83
|
logger.debug self.class, 'no prepare step provided', color: :red
|
101
84
|
end
|
102
85
|
end
|
103
86
|
|
104
87
|
def current_packages_with_relations
|
105
|
-
|
88
|
+
begin
|
89
|
+
packages = current_packages
|
90
|
+
rescue StandardError => e
|
91
|
+
raise e unless @prepare_no_fail
|
92
|
+
packages = []
|
93
|
+
end
|
94
|
+
|
106
95
|
packages.each do |parent|
|
107
96
|
parent.children.each do |child_name|
|
108
97
|
child = packages.detect { |child_package| child_package.name == child_name }
|
@@ -112,20 +101,24 @@ module LicenseFinder
|
|
112
101
|
packages
|
113
102
|
end
|
114
103
|
|
115
|
-
def self.command_exists?(command)
|
116
|
-
_stdout, _stderr, status =
|
117
|
-
if LicenseFinder::Platform.windows?
|
118
|
-
Cmd.run("where #{command}")
|
119
|
-
else
|
120
|
-
Cmd.run("which #{command}")
|
121
|
-
end
|
122
|
-
|
123
|
-
status.success?
|
124
|
-
end
|
125
|
-
|
126
104
|
private
|
127
105
|
|
128
106
|
attr_reader :logger, :project_path
|
107
|
+
|
108
|
+
def log_errors(stderr)
|
109
|
+
logger.info self.class.prepare_command, 'did not succeed.', color: :red
|
110
|
+
logger.info self.class.prepare_command, stderr, color: :red
|
111
|
+
log_to_file stderr
|
112
|
+
end
|
113
|
+
|
114
|
+
def log_to_file(contents)
|
115
|
+
FileUtils.mkdir_p @log_directory
|
116
|
+
log_file = File.join(@log_directory, "prepare_#{self.class.package_management_command || 'errors'}.log")
|
117
|
+
File.open(log_file, 'w') do |f|
|
118
|
+
f.write("Prepare command \"#{self.class.prepare_command}\" failed with:\n")
|
119
|
+
f.write("#{contents}\n\n")
|
120
|
+
end
|
121
|
+
end
|
129
122
|
end
|
130
123
|
end
|
131
124
|
|