license_finder 3.1.1 → 4.0.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -0
- data/features/features/cli/cli_spec.rb +7 -1
- data/features/features/report/diff_spec.rb +10 -10
- data/features/features/report/subproject_spec.rb +6 -6
- data/features/fixtures/gopath_dep/src/foo-dep/Gopkg.lock +5 -0
- data/features/fixtures/gopath_dep/src/foo-dep/vendor/a/b/LICENSE +1 -0
- data/features/support/testing_dsl.rb +13 -1
- data/lib/license_finder/cli/base.rb +11 -1
- data/lib/license_finder/cli/main.rb +8 -7
- data/lib/license_finder/core.rb +4 -3
- data/lib/license_finder/license_aggregator.rb +4 -4
- data/lib/license_finder/logger.rb +41 -27
- data/lib/license_finder/package.rb +3 -3
- data/lib/license_finder/package_delta.rb +2 -2
- data/lib/license_finder/package_manager.rb +28 -21
- data/lib/license_finder/package_managers/bundler.rb +4 -4
- data/lib/license_finder/package_managers/go_workspace.rb +1 -10
- data/lib/license_finder/package_managers/merged_package.rb +4 -4
- data/lib/license_finder/packages/license_files.rb +4 -4
- data/lib/license_finder/packages/possible_license_file.rb +8 -2
- data/lib/license_finder/reports/diff_report.rb +1 -1
- data/lib/license_finder/reports/merged_report.rb +4 -4
- data/lib/license_finder/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 32d2839f00871d5e2e7a3a9e878cff1db69cc16d
|
4
|
+
data.tar.gz: 7efb10b41b8f02f96d76cc8c930e633c968577d6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7788b979fe82a6d433413e3fdfc1c8c0cac611c52f5e6314e6b73a9a4ee5b5e75111ebc6f1fa0b6be9de484b503166c1cc3de63e22772c2751353269a4572dd3
|
7
|
+
data.tar.gz: c09196ab1c745506c23bd7e1e17ed6753ec8e7016195eeb55a458cf5df16cb9fde391f0efe25461ce380948717ebfc830c493524e956cc554c70d4e75a42e381
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
# [4.0.0] / 2017-11-10
|
2
|
+
|
3
|
+
### Changed
|
4
|
+
|
5
|
+
* CLI output has been altered to be clear about active states and installed states.
|
6
|
+
* option `--subprojects`have been renamed to `--aggregate_paths` in order to be clear about its functionality
|
7
|
+
|
8
|
+
### Fixed
|
9
|
+
|
10
|
+
* Fixed issue where dangling symbolic link would cause License Finder to crash and not continue. Instead, License Finder will now warn about the issue and continue.
|
11
|
+
|
1
12
|
# [3.1.0] / 2017-11-10
|
2
13
|
|
3
14
|
### Added
|
@@ -487,6 +498,7 @@ Bugfixes:
|
|
487
498
|
|
488
499
|
|
489
500
|
[Unreleased]: https://github.com/pivotal/LicenseFinder/compare/v3.0.4...HEAD
|
501
|
+
[4.0.0]: https://github.com/pivotal/LicenseFinder/compare/v3.1.0...v4.0.0
|
490
502
|
[3.1.0]: https://github.com/pivotal/LicenseFinder/compare/v3.0.4...v3.1.0
|
491
503
|
[3.0.4]: https://github.com/pivotal/LicenseFinder/compare/v3.0.2...v3.0.4
|
492
504
|
[3.0.2]: https://github.com/pivotal/LicenseFinder/compare/v3.0.1...v3.0.2
|
@@ -1,5 +1,4 @@
|
|
1
1
|
require_relative '../../support/feature_helper'
|
2
|
-
|
3
2
|
describe 'License Finder command line executable' do
|
4
3
|
# As a developer
|
5
4
|
# I want a command-line interface
|
@@ -47,4 +46,11 @@ describe 'License Finder command line executable' do
|
|
47
46
|
expect(developer).to be_seeing("Project path '#{File.absolute_path(path)}' does not exist!")
|
48
47
|
expect(developer).to be_receiving_exit_code(1)
|
49
48
|
end
|
49
|
+
|
50
|
+
specify 'displays an error if symlink to potential license file is dangling' do
|
51
|
+
project = LicenseFinder::TestingDSL::BrokenSymLinkDepProject.create
|
52
|
+
ENV['GOPATH'] = "#{project.project_dir}/gopath_dep"
|
53
|
+
developer.run_license_finder('gopath_dep/src/foo-dep')
|
54
|
+
expect(developer).to be_seeing_something_like %r{ERROR: .*my_app/gopath_dep/src/foo-dep/vendor/a/b/LICENSE does not exists}
|
55
|
+
end
|
50
56
|
end
|
@@ -61,12 +61,12 @@ describe 'Diff report' do
|
|
61
61
|
project2 = developer.create_ruby_app('project_2')
|
62
62
|
project2.depend_on(developer.create_gem('foo', version: '1.0.0', license: 'MIT'))
|
63
63
|
developer
|
64
|
-
.execute_command("license_finder report --columns name version licenses
|
64
|
+
.execute_command("license_finder report --columns name version licenses aggregate_paths --aggregate_paths=#{project1.project_dir} #{project2.project_dir} --save=report-1.csv --format=csv")
|
65
65
|
|
66
66
|
# Second multi-project report
|
67
67
|
project2.depend_on(developer.create_gem('baz', version: '3.0.0', license: 'BSD'))
|
68
68
|
developer
|
69
|
-
.execute_command("license_finder report --columns name version licenses
|
69
|
+
.execute_command("license_finder report --columns name version licenses aggregate_paths --aggregate_paths=#{project1.project_dir} #{project2.project_dir} --save=report-2.csv --format=csv")
|
70
70
|
|
71
71
|
# Diff the reports
|
72
72
|
developer.execute_command('license_finder diff report-1.csv report-2.csv --save=diff.csv --format=csv')
|
@@ -88,14 +88,14 @@ describe 'Diff report' do
|
|
88
88
|
project2 = developer.create_ruby_app('project_2')
|
89
89
|
project2.depend_on(developer.create_gem('foo', version: '1.0.0', license: 'MIT'))
|
90
90
|
developer
|
91
|
-
.execute_command("license_finder report --columns name version licenses
|
91
|
+
.execute_command("license_finder report --columns name version licenses aggregate_paths --aggregate_paths=#{project1.project_dir} #{project2.project_dir} --save=report-1.csv --format=csv")
|
92
92
|
|
93
93
|
# Second multi-project report
|
94
94
|
project2.depend_on(developer.create_gem('baz', version: '3.0.0', license: 'BSD'))
|
95
95
|
project1.depend_on(developer.create_gem('bar', version: '3.0.0', license: 'GPLv2'))
|
96
96
|
|
97
97
|
developer
|
98
|
-
.execute_command("license_finder report --columns name version licenses
|
98
|
+
.execute_command("license_finder report --columns name version licenses aggregate_paths --aggregate_paths=#{project1.project_dir} #{project2.project_dir} --save=report-2.csv --format=csv")
|
99
99
|
|
100
100
|
# Diff the reports
|
101
101
|
developer.execute_command('license_finder diff report-1.csv report-2.csv --save=diff.csv --format=csv')
|
@@ -117,14 +117,14 @@ describe 'Diff report' do
|
|
117
117
|
project2 = developer.create_ruby_app('project_2')
|
118
118
|
project2.depend_on(developer.create_gem('foo', version: '1.0.0', license: 'MIT'))
|
119
119
|
developer
|
120
|
-
.execute_command("license_finder report --columns name version licenses
|
120
|
+
.execute_command("license_finder report --columns name version licenses aggregate_paths --aggregate_paths=#{project1.project_dir} #{project2.project_dir} --save=report-1.csv --format=csv")
|
121
121
|
|
122
122
|
# Second multi-project report
|
123
123
|
project2.depend_on(developer.create_gem('baz', version: '3.0.0', license: 'BSD'))
|
124
124
|
project1.depend_on(developer.create_gem('bar', version: '3.0.0', license: 'MIT'))
|
125
125
|
|
126
126
|
developer
|
127
|
-
.execute_command("license_finder report --columns name version licenses
|
127
|
+
.execute_command("license_finder report --columns name version licenses aggregate_paths --aggregate_paths=#{project1.project_dir} #{project2.project_dir} --save=report-2.csv --format=csv")
|
128
128
|
|
129
129
|
# Diff the reports
|
130
130
|
developer
|
@@ -149,14 +149,14 @@ describe 'Diff report' do
|
|
149
149
|
project2 = developer.create_ruby_app('project_2')
|
150
150
|
project2.depend_on(developer.create_gem('foo', version: '1.0.0', license: 'MIT'))
|
151
151
|
developer
|
152
|
-
.execute_command("license_finder report --columns name version licenses
|
152
|
+
.execute_command("license_finder report --columns name version licenses aggregate_paths --aggregate_paths=#{project1.project_dir} #{project2.project_dir} --save=report-1.csv --format=csv")
|
153
153
|
|
154
154
|
# Second multi-project report
|
155
155
|
project2.depend_on(developer.create_gem('baz', version: '3.0.0', license: 'BSD'))
|
156
156
|
project1.depend_on(developer.create_gem('foo', version: '2.0.0', license: 'BSD'))
|
157
157
|
|
158
158
|
developer
|
159
|
-
.execute_command("license_finder report --columns name version licenses
|
159
|
+
.execute_command("license_finder report --columns name version licenses aggregate_paths --aggregate_paths=#{project1.project_dir} #{project2.project_dir} --save=report-2.csv --format=csv")
|
160
160
|
|
161
161
|
# Diff the reports
|
162
162
|
developer
|
@@ -178,13 +178,13 @@ describe 'Diff report' do
|
|
178
178
|
|
179
179
|
project2 = developer.create_ruby_app('project_2')
|
180
180
|
project2.depend_on(developer.create_gem('foo', version: '2.0.0', license: 'BSD'))
|
181
|
-
developer.execute_command("license_finder report --
|
181
|
+
developer.execute_command("license_finder report --aggregate_paths=#{project1.project_dir} #{project2.project_dir} --save=report-1.csv --format=csv")
|
182
182
|
|
183
183
|
# Second multi-project report
|
184
184
|
project2.depend_on(developer.create_gem('baz', version: '3.0.0', license: 'BSD'))
|
185
185
|
project1.depend_on(developer.create_gem('foo', version: '2.0.0', license: 'BSD'))
|
186
186
|
|
187
|
-
developer.execute_command("license_finder report --
|
187
|
+
developer.execute_command("license_finder report --aggregate_paths=#{project1.project_dir} #{project2.project_dir} --save=report-2.csv --format=csv")
|
188
188
|
|
189
189
|
# Diff the reports
|
190
190
|
developer.execute_command('license_finder diff report-1.csv report-2.csv --save=diff.csv --format=csv')
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require_relative '../../support/feature_helper'
|
2
2
|
|
3
|
-
describe '
|
3
|
+
describe 'Aggregate Paths Projects report' do
|
4
4
|
# As a non-technical product owner
|
5
5
|
# I want a single csv report that includes multiple sub-projects
|
6
6
|
# So that I can easily review my composite application's dependencies and licenses
|
@@ -14,11 +14,11 @@ describe 'Subproject report' do
|
|
14
14
|
project1.depend_on(foo10)
|
15
15
|
|
16
16
|
developer.create_empty_project
|
17
|
-
developer.execute_command("license_finder report --columns name homepage
|
17
|
+
developer.execute_command("license_finder report --columns name homepage aggregate_paths --aggregate_paths #{project1.project_dir} --format=csv")
|
18
18
|
expect(developer).to be_seeing_once("foo,http://example.homepage.com,#{project1.project_dir}")
|
19
19
|
end
|
20
20
|
|
21
|
-
specify 'shows dependencies for multiple
|
21
|
+
specify 'shows dependencies for multiple projects' do
|
22
22
|
project1 = developer.create_ruby_app('project_1')
|
23
23
|
project1.depend_on(developer.create_gem('foo', version: '1.0.0', license: 'MIT'))
|
24
24
|
|
@@ -26,7 +26,7 @@ describe 'Subproject report' do
|
|
26
26
|
project2.depend_on(developer.create_gem('bar', version: '2.0.0', license: 'GPLv2'))
|
27
27
|
|
28
28
|
developer.create_empty_project
|
29
|
-
developer.execute_command("license_finder report --columns name version licenses
|
29
|
+
developer.execute_command("license_finder report --columns name version licenses aggregate_paths --aggregate_paths #{project1.project_dir} #{project2.project_dir} --format=csv")
|
30
30
|
expect(developer).to be_seeing("foo,1.0.0,MIT,#{project1.project_dir}")
|
31
31
|
expect(developer).to be_seeing("bar,2.0.0,GPLv2,#{project2.project_dir}")
|
32
32
|
end
|
@@ -41,7 +41,7 @@ describe 'Subproject report' do
|
|
41
41
|
project2.depend_on(foo)
|
42
42
|
|
43
43
|
developer.create_empty_project
|
44
|
-
developer.execute_command("license_finder report --columns name version licenses
|
44
|
+
developer.execute_command("license_finder report --columns name version licenses aggregate_paths --aggregate_paths #{project1.project_dir} #{project2.project_dir} --format=csv")
|
45
45
|
expect(developer).to be_seeing_once("foo,1.0.0,MIT,\"#{project1.project_dir},#{project2.project_dir}\"")
|
46
46
|
end
|
47
47
|
|
@@ -56,7 +56,7 @@ describe 'Subproject report' do
|
|
56
56
|
project2.depend_on(foo11)
|
57
57
|
|
58
58
|
developer.create_empty_project
|
59
|
-
developer.execute_command("license_finder report --columns name version licenses
|
59
|
+
developer.execute_command("license_finder report --columns name version licenses aggregate_paths --aggregate_paths #{project1.project_dir} #{project2.project_dir} --format=csv")
|
60
60
|
expect(developer).to be_seeing_once("foo,1.0.0,MIT,#{project1.project_dir}")
|
61
61
|
expect(developer).to be_seeing_once("foo,1.1.0,MIT,#{project2.project_dir}")
|
62
62
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
features/fixtures/gopath_dep/src/foo-dep/vendor/a/b/LICENSE
|
@@ -249,6 +249,18 @@ module LicenseFinder
|
|
249
249
|
end
|
250
250
|
end
|
251
251
|
|
252
|
+
class BrokenSymLinkDepProject < Project
|
253
|
+
def add_dep
|
254
|
+
clone('gopath_dep')
|
255
|
+
end
|
256
|
+
|
257
|
+
def install; end
|
258
|
+
|
259
|
+
def shell_out(command)
|
260
|
+
ProjectDir.new(Paths.root.join('tmp', 'projects', 'my_app', 'gopath_dep', 'src', 'foo-dep')).shell_out(command)
|
261
|
+
end
|
262
|
+
end
|
263
|
+
|
252
264
|
class GovendorProject < Project
|
253
265
|
def add_dep
|
254
266
|
clone('gopath_govendor')
|
@@ -463,7 +475,7 @@ module LicenseFinder
|
|
463
475
|
end
|
464
476
|
|
465
477
|
def install_fixture(fixture_name)
|
466
|
-
if
|
478
|
+
if RUBY_PLATFORM =~ /mswin|cygwin|mingw/
|
467
479
|
FileUtils.cp(Paths.fixtures.join(fixture_name), join(fixture_name))
|
468
480
|
else
|
469
481
|
join(fixture_name).make_symlink Paths.fixtures.join(fixture_name)
|
@@ -48,7 +48,17 @@ module LicenseFinder
|
|
48
48
|
end
|
49
49
|
|
50
50
|
def logger_config
|
51
|
-
|
51
|
+
quiet = LicenseFinder::Logger::MODE_QUIET
|
52
|
+
debug = LicenseFinder::Logger::MODE_DEBUG
|
53
|
+
info = LicenseFinder::Logger::MODE_INFO
|
54
|
+
mode = extract_options(quiet, debug)
|
55
|
+
if mode[quiet]
|
56
|
+
{ mode: quiet }
|
57
|
+
elsif mode[debug]
|
58
|
+
{ mode: debug }
|
59
|
+
else
|
60
|
+
{ mode: info }
|
61
|
+
end
|
52
62
|
end
|
53
63
|
|
54
64
|
def say_each(coll)
|
@@ -4,6 +4,7 @@ require 'license_finder/diff'
|
|
4
4
|
require 'license_finder/package_delta'
|
5
5
|
require 'license_finder/license_aggregator'
|
6
6
|
require 'license_finder/project_finder'
|
7
|
+
require 'license_finder/logger'
|
7
8
|
|
8
9
|
module LicenseFinder
|
9
10
|
module CLI
|
@@ -90,15 +91,15 @@ module LicenseFinder
|
|
90
91
|
method_option :recursive, aliases: '-r', type: :boolean, default: false,
|
91
92
|
desc: 'Recursively runs License Finder on all sub-projects'
|
92
93
|
|
93
|
-
method_option :
|
94
|
-
|
94
|
+
method_option :aggregate_paths, aliases: '-a', type: :array,
|
95
|
+
desc: "Generate a single report for multiple projects. Ex: --aggregate_paths='path/to/project1' 'path/to/project2'"
|
95
96
|
def report
|
96
|
-
logger_config[:
|
97
|
-
|
98
|
-
|
97
|
+
logger_config[:mode] = Logger::MODE_QUIET
|
98
|
+
aggregate_paths = options[:aggregate_paths]
|
99
|
+
aggregate_paths = ProjectFinder.new(license_finder.config.project_path).find_projects if options[:recursive]
|
99
100
|
|
100
|
-
if
|
101
|
-
finder = LicenseAggregator.new(license_finder_config,
|
101
|
+
if aggregate_paths && !aggregate_paths.empty?
|
102
|
+
finder = LicenseAggregator.new(license_finder_config, aggregate_paths)
|
102
103
|
report = MergedReport.new(finder.dependencies, options)
|
103
104
|
else
|
104
105
|
run_prepare_phase if prepare?
|
data/lib/license_finder/core.rb
CHANGED
@@ -14,7 +14,7 @@ module LicenseFinder
|
|
14
14
|
attr_reader :config
|
15
15
|
|
16
16
|
def self.default_logger
|
17
|
-
Logger
|
17
|
+
Logger.new
|
18
18
|
end
|
19
19
|
|
20
20
|
# Default +options+:
|
@@ -50,9 +50,9 @@ module LicenseFinder
|
|
50
50
|
def prepare_projects
|
51
51
|
package_managers = PackageManager.active_package_managers options
|
52
52
|
package_managers.each do |manager|
|
53
|
-
logger.
|
53
|
+
logger.debug manager.class, 'Running prepare on project'
|
54
54
|
manager.prepare
|
55
|
-
logger.
|
55
|
+
logger.debug manager.class, 'Finished prepare on project', color: :green
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
@@ -64,6 +64,7 @@ module LicenseFinder
|
|
64
64
|
# packages.
|
65
65
|
def decision_applier
|
66
66
|
# lazy, do not move to `initialize`
|
67
|
+
# Needs to be lazy loaded to prvent multiple decision appliers being created each time
|
67
68
|
@applier ||= DecisionApplier.new(decisions: decisions, packages: current_packages)
|
68
69
|
end
|
69
70
|
|
@@ -1,22 +1,22 @@
|
|
1
1
|
module LicenseFinder
|
2
2
|
class LicenseAggregator
|
3
|
-
def initialize(license_finder_config,
|
3
|
+
def initialize(license_finder_config, aggregate_paths)
|
4
4
|
@license_finder_config = license_finder_config
|
5
|
-
@
|
5
|
+
@aggregate_paths = aggregate_paths
|
6
6
|
end
|
7
7
|
|
8
8
|
def dependencies
|
9
9
|
aggregate_packages
|
10
10
|
.group_by { |package| [package.name, package.version] }
|
11
11
|
.map do |_, packages|
|
12
|
-
MergedPackage.new(packages[0].dependency, packages.flat_map(&:
|
12
|
+
MergedPackage.new(packages[0].dependency, packages.flat_map(&:aggregate_paths))
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
16
|
private
|
17
17
|
|
18
18
|
def aggregate_packages
|
19
|
-
@
|
19
|
+
@aggregate_paths.flat_map do |project_path|
|
20
20
|
finder = LicenseFinder::Core.new(@license_finder_config.merge(project_path: project_path))
|
21
21
|
finder.prepare_projects if @license_finder_config[:prepare]
|
22
22
|
finder.acknowledged.map { |dep| MergedPackage.new(dep, [project_path]) }
|
@@ -1,17 +1,34 @@
|
|
1
|
+
require 'logger'
|
2
|
+
|
1
3
|
module LicenseFinder
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
4
|
+
class Logger
|
5
|
+
MODE_QUIET = :quiet
|
6
|
+
MODE_INFO = :info
|
7
|
+
MODE_DEBUG = :debug
|
8
|
+
|
9
|
+
attr_reader :mode
|
10
|
+
|
11
|
+
def initialize(options = {})
|
12
|
+
@system_logger = ::Logger.new(STDOUT)
|
13
|
+
@system_logger.formatter = proc do |_, _, _, msg|
|
14
|
+
"#{msg}\n"
|
15
|
+
end
|
16
|
+
|
17
|
+
self.mode = options[:mode] || MODE_INFO
|
18
|
+
end
|
19
|
+
|
20
|
+
[MODE_INFO, MODE_DEBUG].each do |level|
|
21
|
+
define_method level do |prefix, string, options = {}|
|
22
|
+
msg = format('%s: %s', prefix, colorize(string, options[:color]))
|
23
|
+
log(msg, level)
|
24
|
+
end
|
12
25
|
end
|
13
26
|
|
14
|
-
|
27
|
+
private
|
28
|
+
|
29
|
+
attr_reader :system_logger
|
30
|
+
|
31
|
+
def colorize(string, color)
|
15
32
|
case color
|
16
33
|
when :red
|
17
34
|
"\e[31m#{string}\e[0m"
|
@@ -22,28 +39,25 @@ module LicenseFinder
|
|
22
39
|
end
|
23
40
|
end
|
24
41
|
|
25
|
-
|
26
|
-
|
27
|
-
raise NotImplementedError, '#log must be implemented'
|
28
|
-
end
|
29
|
-
end
|
42
|
+
def mode=(v)
|
43
|
+
@mode = v
|
30
44
|
|
31
|
-
|
32
|
-
|
45
|
+
return if quiet?
|
46
|
+
level = @mode.equal?(MODE_DEBUG) ? ::Logger::DEBUG : ::Logger::INFO
|
47
|
+
system_logger.level = level
|
33
48
|
end
|
34
49
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
end
|
50
|
+
def log(msg, method)
|
51
|
+
return if quiet?
|
52
|
+
system_logger.send(method, msg)
|
39
53
|
end
|
40
54
|
|
41
|
-
|
42
|
-
|
43
|
-
printf("%s: %s\n", prefix, Logger.colorize(string, options[:color]))
|
44
|
-
end
|
55
|
+
def debug?
|
56
|
+
@mode.equal?(MODE_DEBUG)
|
45
57
|
end
|
46
58
|
|
47
|
-
|
59
|
+
def quiet?
|
60
|
+
@mode.equal?(MODE_QUIET)
|
61
|
+
end
|
48
62
|
end
|
49
63
|
end
|
@@ -142,7 +142,7 @@ module LicenseFinder
|
|
142
142
|
end
|
143
143
|
|
144
144
|
def license_files
|
145
|
-
LicenseFiles.find(install_path)
|
145
|
+
LicenseFiles.find(install_path, logger: logger)
|
146
146
|
end
|
147
147
|
|
148
148
|
def package_manager
|
@@ -156,10 +156,10 @@ module LicenseFinder
|
|
156
156
|
def log_activation(activation)
|
157
157
|
preamble = format('package %s:', activation.package.name)
|
158
158
|
if activation.sources.empty?
|
159
|
-
logger.
|
159
|
+
logger.debug activation.package.class, format('%s no licenses found', preamble)
|
160
160
|
else
|
161
161
|
activation.sources.each do |source|
|
162
|
-
logger.
|
162
|
+
logger.debug activation.package.class, format("%s found license '%s' %s", preamble, activation.license.name, source)
|
163
163
|
end
|
164
164
|
end
|
165
165
|
end
|
@@ -22,12 +22,26 @@ module LicenseFinder
|
|
22
22
|
Yarn, Bower, Maven, Gradle, CocoaPods, Rebar, Nuget, Carthage, Mix, Conan]
|
23
23
|
end
|
24
24
|
|
25
|
-
def active_packages(options)
|
26
|
-
active_package_managers(options)
|
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)
|
27
29
|
end
|
28
30
|
|
29
31
|
def active_package_managers(options = { project_path: Pathname.new('') })
|
30
|
-
|
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
|
+
|
31
45
|
active_pm_classes -= active_pm_classes.map(&:takes_priority_over)
|
32
46
|
active_pm_classes.map { |pm_class| pm_class.new(options) }
|
33
47
|
end
|
@@ -38,13 +52,13 @@ module LicenseFinder
|
|
38
52
|
|
39
53
|
def installed?(logger = Core.default_logger)
|
40
54
|
if package_management_command.nil?
|
41
|
-
logger.
|
55
|
+
logger.debug self, 'no command defined' # TODO: comment me out
|
42
56
|
true
|
43
57
|
elsif command_exists?(package_management_command)
|
44
|
-
logger.
|
58
|
+
logger.debug self, 'is installed', color: :green
|
45
59
|
true
|
46
60
|
else
|
47
|
-
logger.
|
61
|
+
logger.info self, 'is not installed', color: :red
|
48
62
|
false
|
49
63
|
end
|
50
64
|
end
|
@@ -67,15 +81,7 @@ module LicenseFinder
|
|
67
81
|
|
68
82
|
def active?
|
69
83
|
path = detected_package_path
|
70
|
-
|
71
|
-
!path.nil? &&
|
72
|
-
path.exist?.tap do |is_active|
|
73
|
-
if is_active
|
74
|
-
logger.log self.class, 'is active', color: :green
|
75
|
-
else
|
76
|
-
logger.log self.class, 'is not active'
|
77
|
-
end
|
78
|
-
end
|
84
|
+
path && path.exist?
|
79
85
|
end
|
80
86
|
|
81
87
|
def detected_package_path
|
@@ -87,7 +93,7 @@ module LicenseFinder
|
|
87
93
|
_stdout, _stderr, status = Cmd.run(self.class.prepare_command)
|
88
94
|
raise "Prepare command '#{self.class.prepare_command}' failed" unless status.success?
|
89
95
|
else
|
90
|
-
logger.
|
96
|
+
logger.debug self.class, 'no prepare step provided', color: :red
|
91
97
|
end
|
92
98
|
end
|
93
99
|
|
@@ -103,11 +109,12 @@ module LicenseFinder
|
|
103
109
|
end
|
104
110
|
|
105
111
|
def self.command_exists?(command)
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
112
|
+
_stdout, _stderr, status =
|
113
|
+
if LicenseFinder::Platform.windows?
|
114
|
+
Cmd.run("where #{command}")
|
115
|
+
else
|
116
|
+
Cmd.run("which #{command}")
|
117
|
+
end
|
111
118
|
|
112
119
|
status.success?
|
113
120
|
end
|
@@ -9,7 +9,7 @@ module LicenseFinder
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def current_packages
|
12
|
-
logger.
|
12
|
+
logger.debug self.class, "including groups #{included_groups.inspect}"
|
13
13
|
details.map do |gem_detail, bundle_detail|
|
14
14
|
BundlerPackage.new(gem_detail, bundle_detail, logger: logger).tap do |package|
|
15
15
|
log_package_dependencies package
|
@@ -60,11 +60,11 @@ module LicenseFinder
|
|
60
60
|
def log_package_dependencies(package)
|
61
61
|
dependencies = package.children
|
62
62
|
if dependencies.empty?
|
63
|
-
logger.
|
63
|
+
logger.debug self.class, format("package '%s' has no dependencies", package.name)
|
64
64
|
else
|
65
|
-
logger.
|
65
|
+
logger.debug self.class, format("package '%s' has dependencies:", package.name)
|
66
66
|
dependencies.each do |dep|
|
67
|
-
logger.
|
67
|
+
logger.debug self.class, format('- %s', dep)
|
68
68
|
end
|
69
69
|
end
|
70
70
|
end
|
@@ -38,19 +38,10 @@ module LicenseFinder
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def active?
|
41
|
-
return false unless self.class.installed?(logger)
|
42
|
-
|
43
41
|
godep = LicenseFinder::GoDep.new(project_path: Pathname(project_path))
|
44
42
|
# go workspace is only active if GoDep wasn't. There are some projects
|
45
43
|
# that will use the .envrc and have a Godep folder as well.
|
46
|
-
|
47
|
-
active.tap do |is_active|
|
48
|
-
if is_active
|
49
|
-
logger.log self.class, 'is active', color: :green
|
50
|
-
else
|
51
|
-
logger.log self.class, 'is not active'
|
52
|
-
end
|
53
|
-
end
|
44
|
+
!!(!godep.active? && envrc_path && ENVRC_REGEXP.match(IO.read(envrc_path)))
|
54
45
|
end
|
55
46
|
|
56
47
|
private
|
@@ -2,9 +2,9 @@ module LicenseFinder
|
|
2
2
|
class MergedPackage
|
3
3
|
attr_reader :dependency
|
4
4
|
|
5
|
-
def initialize(dependency,
|
5
|
+
def initialize(dependency, aggregate_paths)
|
6
6
|
@dependency = dependency
|
7
|
-
@
|
7
|
+
@aggregate_paths = aggregate_paths.map { |p| Pathname(p) }
|
8
8
|
end
|
9
9
|
|
10
10
|
def name
|
@@ -47,8 +47,8 @@ module LicenseFinder
|
|
47
47
|
dependency.package_manager
|
48
48
|
end
|
49
49
|
|
50
|
-
def
|
51
|
-
@
|
50
|
+
def aggregate_paths
|
51
|
+
@aggregate_paths.map { |p| p.expand_path.to_s }
|
52
52
|
end
|
53
53
|
|
54
54
|
def <=>(other)
|
@@ -5,17 +5,17 @@ module LicenseFinder
|
|
5
5
|
CANDIDATE_FILE_NAMES = %w[LICENSE License Licence COPYING README Readme ReadMe].freeze
|
6
6
|
CANDIDATE_PATH_WILDCARD = "*{#{CANDIDATE_FILE_NAMES.join(',')}}*".freeze
|
7
7
|
|
8
|
-
def self.find(install_path)
|
9
|
-
new(install_path).find
|
8
|
+
def self.find(install_path, options = {})
|
9
|
+
new(install_path).find(options)
|
10
10
|
end
|
11
11
|
|
12
12
|
def initialize(install_path)
|
13
13
|
@install_path = install_path ? Pathname(install_path) : nil
|
14
14
|
end
|
15
15
|
|
16
|
-
def find
|
16
|
+
def find(options = {})
|
17
17
|
paths_of_candidate_files
|
18
|
-
.map { |path| PossibleLicenseFile.new(path) }
|
18
|
+
.map { |path| PossibleLicenseFile.new(path, options) }
|
19
19
|
.reject { |file| file.license.nil? }
|
20
20
|
end
|
21
21
|
|
@@ -1,7 +1,8 @@
|
|
1
1
|
module LicenseFinder
|
2
2
|
class PossibleLicenseFile
|
3
|
-
def initialize(path)
|
3
|
+
def initialize(path, options = {})
|
4
4
|
@path = Pathname(path)
|
5
|
+
@logger = options[:logger]
|
5
6
|
end
|
6
7
|
|
7
8
|
def path
|
@@ -13,7 +14,12 @@ module LicenseFinder
|
|
13
14
|
end
|
14
15
|
|
15
16
|
def text
|
16
|
-
|
17
|
+
if @path.exist?
|
18
|
+
@text ||= (@path.respond_to?(:binread) ? @path.binread : @path.read)
|
19
|
+
else
|
20
|
+
@logger.info('ERROR', "#{@path} does not exists", color: :red)
|
21
|
+
''
|
22
|
+
end
|
17
23
|
end
|
18
24
|
end
|
19
25
|
end
|
@@ -1,14 +1,14 @@
|
|
1
1
|
module LicenseFinder
|
2
2
|
class MergedReport < CsvReport
|
3
|
-
AVAILABLE_COLUMNS = AVAILABLE_COLUMNS + ['
|
3
|
+
AVAILABLE_COLUMNS = AVAILABLE_COLUMNS + ['aggregate_paths']
|
4
4
|
|
5
5
|
def initialize(dependencies, options = {})
|
6
|
-
options[:columns] ||= %w[name version licenses
|
6
|
+
options[:columns] ||= %w[name version licenses aggregate_paths]
|
7
7
|
super(dependencies, options)
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
11
|
-
merged_dep.
|
10
|
+
def format_aggregate_paths(merged_dep)
|
11
|
+
merged_dep.aggregate_paths.join(self.class::COMMA_SEP)
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: license_finder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jacob Maine
|
@@ -363,6 +363,7 @@ files:
|
|
363
363
|
- features/fixtures/gopath_dep/src/foo-dep/Gopkg.toml
|
364
364
|
- features/fixtures/gopath_dep/src/foo-dep/bar/bar.go
|
365
365
|
- features/fixtures/gopath_dep/src/foo-dep/foo.go
|
366
|
+
- features/fixtures/gopath_dep/src/foo-dep/vendor/a/b/LICENSE
|
366
367
|
- features/fixtures/gopath_glide/src/glide.lock
|
367
368
|
- features/fixtures/gopath_glide/src/glide.yaml
|
368
369
|
- features/fixtures/gopath_govendor/src/vendor/vendor.json
|