license_finder 1.1.1-java → 1.2-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +2 -2
- data/CHANGELOG.rdoc +10 -0
- data/Gemfile +1 -1
- data/README.md +363 -0
- data/Rakefile +30 -1
- data/TODO.md +28 -0
- data/bin/license_finder_pip.py +18 -0
- data/db/migrate/201410031451_rename_dependency_license_name.rb +6 -0
- data/features/multiple_licenses.feature +9 -0
- data/features/step_definitions/cli_steps.rb +9 -9
- data/features/step_definitions/cocoapod_steps.rb +1 -1
- data/features/step_definitions/configure_bundler_groups_steps.rb +3 -3
- data/features/step_definitions/configure_whitelist_steps.rb +4 -4
- data/features/step_definitions/gradle_steps.rb +1 -1
- data/features/step_definitions/manually_added_steps.rb +3 -3
- data/features/step_definitions/manually_approved_steps.rb +5 -5
- data/features/step_definitions/manually_assigned_license_steps.rb +4 -4
- data/features/step_definitions/maven_steps.rb +1 -1
- data/features/step_definitions/multiple_licenses_steps.rb +14 -0
- data/features/step_definitions/node_steps.rb +1 -1
- data/features/step_definitions/python_steps.rb +1 -1
- data/features/step_definitions/report_csv_steps.rb +3 -3
- data/features/step_definitions/report_html_steps.rb +5 -5
- data/features/step_definitions/shared_steps.rb +23 -6
- data/lib/license_finder.rb +3 -0
- data/lib/license_finder/cli.rb +13 -34
- data/lib/license_finder/configuration.rb +8 -4
- data/lib/license_finder/dependency_manager.rb +25 -15
- data/lib/license_finder/license.rb +8 -0
- data/lib/license_finder/logger.rb +59 -0
- data/lib/license_finder/package.rb +37 -30
- data/lib/license_finder/package_manager.rb +20 -0
- data/lib/license_finder/package_managers/bower.rb +4 -9
- data/lib/license_finder/package_managers/bower_package.rb +2 -1
- data/lib/license_finder/package_managers/bundler.rb +26 -41
- data/lib/license_finder/package_managers/bundler_package.rb +6 -3
- data/lib/license_finder/package_managers/cocoa_pods.rb +18 -10
- data/lib/license_finder/package_managers/cocoa_pods_package.rb +4 -3
- data/lib/license_finder/package_managers/gradle.rb +7 -11
- data/lib/license_finder/package_managers/gradle_package.rb +2 -7
- data/lib/license_finder/package_managers/maven.rb +5 -9
- data/lib/license_finder/package_managers/maven_package.rb +4 -8
- data/lib/license_finder/package_managers/npm.rb +6 -10
- data/lib/license_finder/package_managers/npm_package.rb +2 -1
- data/lib/license_finder/package_managers/pip.rb +11 -24
- data/lib/license_finder/package_managers/pip_package.rb +2 -1
- data/lib/license_finder/package_saver.rb +2 -2
- data/lib/license_finder/platform.rb +4 -0
- data/lib/license_finder/possible_license_file.rb +4 -0
- data/lib/license_finder/possible_license_files.rb +2 -1
- data/lib/license_finder/reports/detailed_text_report.rb +1 -1
- data/lib/license_finder/reports/formatted_report.rb +1 -1
- data/lib/license_finder/tables/dependency.rb +22 -12
- data/lib/license_finder/yml_to_sql.rb +1 -1
- data/lib/templates/html_report.erb +4 -4
- data/lib/templates/markdown_report.erb +4 -4
- data/lib/templates/text_report.erb +1 -1
- data/license_finder.gemspec +28 -12
- data/spec/lib/license_finder/cli_spec.rb +193 -185
- data/spec/lib/license_finder/configuration_spec.rb +46 -47
- data/spec/lib/license_finder/dependency_manager_spec.rb +48 -44
- data/spec/lib/license_finder/license/definitions_spec.rb +26 -26
- data/spec/lib/license_finder/license_spec.rb +25 -25
- data/spec/lib/license_finder/package_managers/bower_package_spec.rb +33 -17
- data/spec/lib/license_finder/package_managers/bower_spec.rb +35 -35
- data/spec/lib/license_finder/package_managers/bundler_package_spec.rb +20 -15
- data/spec/lib/license_finder/package_managers/bundler_spec.rb +12 -19
- data/spec/lib/license_finder/package_managers/cocoa_pods_package_spec.rb +8 -5
- data/spec/lib/license_finder/package_managers/cocoa_pods_spec.rb +20 -22
- data/spec/lib/license_finder/package_managers/gradle_package_spec.rb +8 -5
- data/spec/lib/license_finder/package_managers/gradle_spec.rb +20 -20
- data/spec/lib/license_finder/package_managers/maven_package_spec.rb +8 -5
- data/spec/lib/license_finder/package_managers/maven_spec.rb +18 -18
- data/spec/lib/license_finder/package_managers/npm_package_spec.rb +36 -17
- data/spec/lib/license_finder/package_managers/npm_spec.rb +17 -17
- data/spec/lib/license_finder/package_managers/pip_package_spec.rb +16 -10
- data/spec/lib/license_finder/package_managers/pip_spec.rb +21 -18
- data/spec/lib/license_finder/package_saver_spec.rb +15 -25
- data/spec/lib/license_finder/possible_license_file_spec.rb +5 -4
- data/spec/lib/license_finder/possible_license_files_spec.rb +11 -5
- data/spec/lib/license_finder/reports/detailed_text_report_spec.rb +3 -3
- data/spec/lib/license_finder/reports/html_report_spec.rb +23 -23
- data/spec/lib/license_finder/reports/markdown_report_spec.rb +12 -12
- data/spec/lib/license_finder/reports/reporter_spec.rb +11 -11
- data/spec/lib/license_finder/reports/text_report_spec.rb +3 -3
- data/spec/lib/license_finder/tables/dependency_spec.rb +59 -41
- data/spec/lib/license_finder/yml_to_sql_spec.rb +21 -21
- data/spec/lib/license_finder_spec.rb +1 -1
- data/spec/spec_helper.rb +0 -13
- data/spec/support/shared_examples_for_package.rb +46 -0
- data/spec/support/shared_examples_for_package_manager.rb +15 -0
- metadata +19 -100
- data/readme.md +0 -259
data/TODO.md
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
|
2
|
+
# immediate
|
3
|
+
|
4
|
+
- gradle and maven are broken
|
5
|
+
- [x] let's refactor `PossibleLicenseFiles` to accept a nil install_path
|
6
|
+
- [x] then remove `#licenses_from_files` from `{maven,gradle}_package.rb`
|
7
|
+
- [x] update docs in package.rb to reflect what our expectations are.
|
8
|
+
- [x] commit the rest of the WIP
|
9
|
+
|
10
|
+
|
11
|
+
# architecture
|
12
|
+
|
13
|
+
- [x] package managers should use instance methods so we can inject things like loggers
|
14
|
+
- [ ] are we sprinkling database logic around too much? see 23f4cae for related work.
|
15
|
+
|
16
|
+
|
17
|
+
# renamings, etc.
|
18
|
+
|
19
|
+
- [x] retitle the shared example "it conforms to interface required by PackageSaver"
|
20
|
+
- [x] shared specs should go into a separate file(s)
|
21
|
+
- [ ] classes under `package_managers` should be in a PackageManagers module
|
22
|
+
- [ ] `license_names_from_standard_spec` should be the default instance method
|
23
|
+
- [ ] #groups in some Packages, #included_groups etc. in others
|
24
|
+
|
25
|
+
|
26
|
+
# docs
|
27
|
+
|
28
|
+
- [ ] specify gradle version >= 1.8
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#! /usr/bin/env python
|
2
|
+
|
3
|
+
import json
|
4
|
+
from pip.util import get_installed_distributions
|
5
|
+
|
6
|
+
packages = []
|
7
|
+
|
8
|
+
for dist in get_installed_distributions():
|
9
|
+
packages.append(
|
10
|
+
{
|
11
|
+
"name": dist.project_name,
|
12
|
+
"version": dist.version,
|
13
|
+
"location": dist.location,
|
14
|
+
"dependencies": map(lambda dependency: dependency.project_name, dist.requires())
|
15
|
+
}
|
16
|
+
)
|
17
|
+
|
18
|
+
print json.dumps(packages)
|
@@ -0,0 +1,9 @@
|
|
1
|
+
Feature: Dependencies with multiple licenses
|
2
|
+
As a developer
|
3
|
+
I want multi-licensed dependencies to be approved if one license is whitelisted
|
4
|
+
So that any dependencies with those licenses do not show up as action items
|
5
|
+
|
6
|
+
Scenario: Depending on whitelisted licenses
|
7
|
+
Given I have an app that depends on BSD and GPL-2 licenses
|
8
|
+
When I whitelist the GPL-2 license
|
9
|
+
Then I should not see a BSD and GPL-2 licensed gem unapproved
|
@@ -3,7 +3,7 @@ Given(/^I have an app that has no config directory$/) do
|
|
3
3
|
@user.create_ruby_app
|
4
4
|
path = @user.config_path
|
5
5
|
path.rmtree if path.exist?
|
6
|
-
path.
|
6
|
+
expect(path).to_not be_exist
|
7
7
|
end
|
8
8
|
|
9
9
|
Given(/^I have an app with an unapproved dependency$/) do
|
@@ -21,31 +21,31 @@ When(/^I run license_finder help$/) do
|
|
21
21
|
end
|
22
22
|
|
23
23
|
Then(/^it creates a config directory with the license_finder config$/) do
|
24
|
-
@user.config_path.
|
24
|
+
expect(@user.config_path).to be_exist
|
25
25
|
text = %|---\nwhitelist:\n#- MIT\n#- Apache 2.0\nignore_groups:\n#- test\n#- development\nignore_dependencies:\n#- bundler\ndependencies_file_dir: './doc/'\nproject_name: # project name\ngradle_command: # only meaningful if used with a Java/gradle project. Defaults to "gradle".\n|
|
26
|
-
@user.config_file.read.
|
26
|
+
expect(@user.config_file.read).to eq(text.gsub(/^\s+/, ""))
|
27
27
|
end
|
28
28
|
|
29
29
|
Then /^it should exit with status code (\d)$/ do |status|
|
30
|
-
|
30
|
+
expect($last_command_exit_status.exitstatus).to eq(status.to_i)
|
31
31
|
end
|
32
32
|
|
33
33
|
Then(/^should list my unapproved dependency in the output$/) do
|
34
|
-
@user.
|
34
|
+
expect(@user).to be_seeing 'unapproved_gem'
|
35
35
|
end
|
36
36
|
|
37
37
|
Then(/^I should see all dependencies approved for use$/) do
|
38
|
-
@user.
|
38
|
+
expect(@user).to be_seeing 'All dependencies are approved for use'
|
39
39
|
end
|
40
40
|
|
41
41
|
Then(/^I should see the correct subcommand usage instructions$/) do
|
42
|
-
@user.
|
42
|
+
expect(@user).to be_seeing 'license_finder ignored_bundler_groups add GROUP'
|
43
43
|
end
|
44
44
|
|
45
45
|
Then(/^I should see the default usage instructions$/) do
|
46
|
-
@user.
|
46
|
+
expect(@user).to be_seeing 'license_finder help [COMMAND]'
|
47
47
|
end
|
48
48
|
|
49
49
|
Then(/^I should see License Finder has the MIT license$/) do
|
50
|
-
@user.
|
50
|
+
expect(@user).to be_seeing_something_like /license_finder.*MIT/
|
51
51
|
end
|
@@ -18,13 +18,13 @@ When(/^I get the ignored groups$/) do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
Then(/^I should not see the test gem in the output$/) do
|
21
|
-
@user.
|
21
|
+
expect(@user).to_not be_seeing 'gpl_gem'
|
22
22
|
end
|
23
23
|
|
24
24
|
Then(/^I should see the test group in the output$/) do
|
25
|
-
@user.
|
25
|
+
expect(@user).to be_seeing 'test'
|
26
26
|
end
|
27
27
|
|
28
28
|
Then(/^I should not see the test group in the output$/) do
|
29
|
-
@user.
|
29
|
+
expect(@user).to_not be_seeing 'test'
|
30
30
|
end
|
@@ -28,18 +28,18 @@ end
|
|
28
28
|
|
29
29
|
Then(/^I should not see a MIT licensed gem unapproved$/) do
|
30
30
|
@user.execute_command 'license_finder --quiet'
|
31
|
-
@user.
|
31
|
+
expect(@user).to_not be_seeing 'mit_gem'
|
32
32
|
end
|
33
33
|
|
34
34
|
Then(/^I should see Expat in the output$/) do
|
35
|
-
@user.
|
35
|
+
expect(@user).to be_seeing 'Expat'
|
36
36
|
end
|
37
37
|
|
38
38
|
Then(/^I should not see Expat in the output$/) do
|
39
|
-
@user.
|
39
|
+
expect(@user).to_not be_seeing 'Expat'
|
40
40
|
end
|
41
41
|
|
42
42
|
Then(/^I should not see a BSD licensed gem unapproved$/) do
|
43
43
|
@user.execute_command 'license_finder --quiet'
|
44
|
-
@user.
|
44
|
+
expect(@user).to_not be_seeing 'bsd_gem'
|
45
45
|
end
|
@@ -4,5 +4,5 @@ Given(/^A build.gradle file with dependencies$/) do
|
|
4
4
|
end
|
5
5
|
|
6
6
|
Then(/^I should see a Gradle dependency with a license$/) do
|
7
|
-
@user.
|
7
|
+
expect(@user).to be_seeing_line "junit, 4.11, Common Public License Version 1.0"
|
8
8
|
end
|
@@ -10,7 +10,7 @@ end
|
|
10
10
|
|
11
11
|
When(/^I add my JS dependency with an approval flag$/) do
|
12
12
|
@user.execute_command 'license_finder dependencies add --approve MIT my_js_dep 1.2.3'
|
13
|
-
@user.
|
13
|
+
expect(@user).to be_seeing "The my_js_dep dependency has been added and approved"
|
14
14
|
end
|
15
15
|
|
16
16
|
When(/^I remove my JS dependency$/) do
|
@@ -19,10 +19,10 @@ end
|
|
19
19
|
|
20
20
|
Then(/^I should see the JS dependency in the console output$/) do
|
21
21
|
@user.execute_command 'license_finder --quiet'
|
22
|
-
@user.
|
22
|
+
expect(@user).to be_seeing 'my_js_dep, 1.2.3, MIT'
|
23
23
|
end
|
24
24
|
|
25
25
|
Then(/^I should not see the JS dependency in the console output$/) do
|
26
26
|
@user.execute_command 'license_finder --quiet'
|
27
|
-
@user.
|
27
|
+
expect(@user).to_not be_seeing 'my_js_dep, 1.2.3, MIT'
|
28
28
|
end
|
@@ -6,19 +6,19 @@ end
|
|
6
6
|
|
7
7
|
When(/^I approve that gem$/) do
|
8
8
|
@user.execute_command "license_finder"
|
9
|
-
@user.
|
9
|
+
expect(@user).to be_seeing "gpl_gem"
|
10
10
|
@user.execute_command "license_finder approve gpl_gem --approver 'Julian' --message 'We really need this'"
|
11
11
|
@user.execute_command "license_finder --quiet"
|
12
12
|
end
|
13
13
|
|
14
14
|
Then(/^I should not see that gem in the console output$/) do
|
15
|
-
@user.
|
15
|
+
expect(@user).to_not be_seeing "gpl_gem"
|
16
16
|
end
|
17
17
|
|
18
18
|
Then(/^I should see that gem approved in dependencies\.html$/) do
|
19
19
|
@user.in_gem_html("gpl_gem") do |gpl_gem|
|
20
|
-
gpl_gem[:class].split(' ').
|
21
|
-
gpl_gem.
|
22
|
-
gpl_gem.
|
20
|
+
expect(gpl_gem[:class].split(' ')).to include "approved"
|
21
|
+
expect(gpl_gem).to have_content "Julian"
|
22
|
+
expect(gpl_gem).to have_content "We really need this"
|
23
23
|
end
|
24
24
|
end
|
@@ -12,11 +12,11 @@ When(/^I set one gem's license to MIT from the command line$/) do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
Then(/^I should see that gem's license set to MIT$/) do
|
15
|
-
@user.
|
15
|
+
expect(@user).to be_seeing 'other_gem, 1.0, MIT'
|
16
16
|
end
|
17
17
|
|
18
18
|
Then(/^I should see other gems have not changed their licenses$/) do
|
19
|
-
@user.
|
19
|
+
expect(@user).to be_seeing 'control_gem, 1.0, other'
|
20
20
|
end
|
21
21
|
|
22
22
|
Given(/^I have an app that depends on a manually licensed gem$/) do
|
@@ -25,10 +25,10 @@ Given(/^I have an app that depends on a manually licensed gem$/) do
|
|
25
25
|
@user.create_and_depend_on_gem 'changed_gem', license: 'MIT'
|
26
26
|
@user.execute_command "license_finder --quiet"
|
27
27
|
@user.execute_command "license_finder license Ruby changed_gem"
|
28
|
-
@user.
|
28
|
+
expect(@user).to be_seeing_something_like /changed_gem.*Ruby/
|
29
29
|
end
|
30
30
|
|
31
31
|
Then(/^the gem should keep its manually assigned license$/) do
|
32
|
-
@user.
|
32
|
+
expect(@user).to be_seeing_something_like /changed_gem.*ruby/
|
33
33
|
end
|
34
34
|
|
@@ -4,5 +4,5 @@ Given(/^A pom file with dependencies$/) do
|
|
4
4
|
end
|
5
5
|
|
6
6
|
Then(/^I should see a Maven dependency with a license$/) do
|
7
|
-
@user.
|
7
|
+
expect(@user).to be_seeing_line "junit, 4.11, Common Public License Version 1.0"
|
8
8
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
Given(/^I have an app that depends on BSD and GPL-2 licenses$/) do
|
2
|
+
@user = ::DSL::User.new
|
3
|
+
@user.create_ruby_app
|
4
|
+
@user.create_and_depend_on_gem 'bsd_and_gpl2_gem', licenses: %w(BSD GPL-2)
|
5
|
+
end
|
6
|
+
|
7
|
+
When(/^I whitelist the GPL-2 license$/) do
|
8
|
+
@user.execute_command 'license_finder whitelist add GPL-2'
|
9
|
+
end
|
10
|
+
|
11
|
+
Then(/^I should not see a BSD and GPL-2 licensed gem unapproved$/) do
|
12
|
+
@user.execute_command 'license_finder --quiet'
|
13
|
+
expect(@user).to_not be_seeing 'bsd_and_gpl2_gem'
|
14
|
+
end
|
@@ -4,5 +4,5 @@ Given(/^A requirements file with dependencies$/) do
|
|
4
4
|
end
|
5
5
|
|
6
6
|
Then(/^I should see a Python dependency with a license$/) do
|
7
|
-
@user.
|
7
|
+
expect(@user).to be_seeing_line "argparse, 1.2.1, Python Software Foundation License"
|
8
8
|
end
|
@@ -11,10 +11,10 @@ Given(/^I have a dependencies\.txt file$/) do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
Then(/^I should see those version and license details in the dependencies\.csv file$/) do
|
14
|
-
@user.app_path("doc/dependencies.csv").read.
|
14
|
+
expect(@user.app_path("doc/dependencies.csv").read).to include "info_gem, 1.1.1, MIT"
|
15
15
|
end
|
16
16
|
|
17
17
|
Then(/^I should see dependencies\.txt replaced by dependencies\.csv$/) do
|
18
|
-
@user.app_path("doc/dependencies.txt").
|
19
|
-
@user.app_path("doc/dependencies.csv").
|
18
|
+
expect(@user.app_path("doc/dependencies.txt")).to_not be_exist
|
19
|
+
expect(@user.app_path("doc/dependencies.csv")).to be_exist
|
20
20
|
end
|
@@ -30,9 +30,9 @@ end
|
|
30
30
|
|
31
31
|
Then(/^I should see my specific gem details listed in the html$/) do
|
32
32
|
@user.in_gem_html(@gem_name) do |section|
|
33
|
-
section.find("a[href='#{@gem_homepage}']", text: @gem_name).
|
33
|
+
expect(section.find("a[href='#{@gem_homepage}']", text: @gem_name)).to be
|
34
34
|
@table.values.each do |property_value|
|
35
|
-
section.
|
35
|
+
expect(section).to have_content property_value
|
36
36
|
end
|
37
37
|
end
|
38
38
|
end
|
@@ -47,14 +47,14 @@ end
|
|
47
47
|
|
48
48
|
Then(/^I should see only see GPL liceneses as unapproved in the html$/) do
|
49
49
|
@user.in_html do |page|
|
50
|
-
page.
|
50
|
+
expect(page).to have_content '1 GPL'
|
51
51
|
action_items = page.find('.action-items')
|
52
|
-
action_items.
|
52
|
+
expect(action_items).to have_content '(GPL)'
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
56
|
def is_html_status?(gem, approval)
|
57
57
|
@user.in_gem_html(gem) do |gpl_gem|
|
58
|
-
gpl_gem[:class].split(' ').
|
58
|
+
expect(gpl_gem[:class].split(' ')).to include approval
|
59
59
|
end
|
60
60
|
end
|
@@ -2,6 +2,7 @@ require 'fileutils'
|
|
2
2
|
require 'pathname'
|
3
3
|
require 'bundler'
|
4
4
|
require 'capybara'
|
5
|
+
require 'open3'
|
5
6
|
|
6
7
|
########## COMMON STEPS ##########
|
7
8
|
|
@@ -23,7 +24,7 @@ Then(/^I should see the project name (\w+) in the html$/) do |project_name|
|
|
23
24
|
@user.in_html do |page|
|
24
25
|
title = page.find("h1")
|
25
26
|
|
26
|
-
title.
|
27
|
+
expect(title).to have_content project_name
|
27
28
|
end
|
28
29
|
end
|
29
30
|
|
@@ -171,7 +172,12 @@ module DSL
|
|
171
172
|
private
|
172
173
|
|
173
174
|
def gemspec_string(gem_name, options)
|
174
|
-
license
|
175
|
+
if options.has_key?(:license) && options.has_key?(:licenses)
|
176
|
+
raise "Can't specify both `license` and `licenses`"
|
177
|
+
end
|
178
|
+
|
179
|
+
license_key = ([:license, :licenses] & options.keys).first
|
180
|
+
license_value = options.fetch(license_key)
|
175
181
|
summary = options.fetch(:summary, "")
|
176
182
|
description = options.fetch(:description, "")
|
177
183
|
version = options[:version] || "0.0.0"
|
@@ -183,7 +189,7 @@ module DSL
|
|
183
189
|
s.version = "#{version}"
|
184
190
|
s.author = "Cucumber"
|
185
191
|
s.summary = "#{summary}"
|
186
|
-
s
|
192
|
+
s.#{license_key} = #{license_value.inspect}
|
187
193
|
s.description = "#{description}"
|
188
194
|
s.homepage = "#{homepage}"
|
189
195
|
end
|
@@ -224,7 +230,7 @@ module DSL
|
|
224
230
|
|
225
231
|
def bundle_install
|
226
232
|
::Bundler.with_clean_env do
|
227
|
-
shell_out("
|
233
|
+
shell_out("cd #{app_path} && bundle check || bundle install")
|
228
234
|
end
|
229
235
|
end
|
230
236
|
|
@@ -282,8 +288,19 @@ module DSL
|
|
282
288
|
end
|
283
289
|
|
284
290
|
def shell_out(command, allow_failures = false)
|
285
|
-
output = `#{command}`
|
286
|
-
|
291
|
+
output = `#{command} 2>&1`
|
292
|
+
status = $?
|
293
|
+
unless status.success? || allow_failures
|
294
|
+
message_format = <<EOM
|
295
|
+
Command failed: `%s`
|
296
|
+
output: %s
|
297
|
+
exit: %d
|
298
|
+
EOM
|
299
|
+
message = sprintf message_format, command, output.chomp, status.exitstatus
|
300
|
+
raise RuntimeError.new(message)
|
301
|
+
end
|
302
|
+
|
303
|
+
$last_command_exit_status = status
|
287
304
|
output
|
288
305
|
end
|
289
306
|
end
|
data/lib/license_finder.rb
CHANGED
@@ -4,10 +4,13 @@ require 'erb'
|
|
4
4
|
|
5
5
|
module LicenseFinder
|
6
6
|
ROOT_PATH = Pathname.new(__FILE__).dirname
|
7
|
+
BIN_PATH = ROOT_PATH.join("../bin")
|
7
8
|
|
8
9
|
Error = Class.new(StandardError)
|
9
10
|
|
11
|
+
autoload :Logger, 'license_finder/logger'
|
10
12
|
autoload :CLI, 'license_finder/cli'
|
13
|
+
autoload :PackageManager, 'license_finder/package_manager'
|
11
14
|
autoload :DependencyManager, 'license_finder/dependency_manager'
|
12
15
|
autoload :PackageSaver, 'license_finder/package_saver'
|
13
16
|
autoload :License, 'license_finder/license'
|
data/lib/license_finder/cli.rb
CHANGED
@@ -11,11 +11,10 @@ module LicenseFinder
|
|
11
11
|
|
12
12
|
private
|
13
13
|
|
14
|
-
def
|
14
|
+
def sync_with_package_managers options={}
|
15
15
|
die_on_error {
|
16
|
-
|
17
|
-
|
18
|
-
}
|
16
|
+
logger = LicenseFinder::Logger.new options
|
17
|
+
DependencyManager.new(logger: logger).sync_with_package_managers
|
19
18
|
}
|
20
19
|
end
|
21
20
|
|
@@ -25,29 +24,6 @@ module LicenseFinder
|
|
25
24
|
say e.message, :red
|
26
25
|
exit 1
|
27
26
|
end
|
28
|
-
|
29
|
-
def spinner
|
30
|
-
if options[:quiet]
|
31
|
-
yield
|
32
|
-
else
|
33
|
-
begin
|
34
|
-
thread = Thread.new {
|
35
|
-
wheel = '\|/-'
|
36
|
-
i = 0
|
37
|
-
while true do
|
38
|
-
print "\r ---------- #{wheel[i]} ----------"
|
39
|
-
i = (i + 1) % 4
|
40
|
-
end
|
41
|
-
}
|
42
|
-
yield
|
43
|
-
ensure
|
44
|
-
if thread
|
45
|
-
thread.kill
|
46
|
-
puts "\r" + " "*24
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
27
|
end
|
52
28
|
|
53
29
|
# Thor fix for `license_finder <subcommand> help <action>`
|
@@ -76,8 +52,10 @@ module LicenseFinder
|
|
76
52
|
desc "add LICENSE DEPENDENCY_NAME [VERSION] [--approve] [--approver APPROVER_NAME] [--message APPROVAL_MESSAGE]", "Add a dependency that is not managed by a package manager, optionally storing who approved the dependency and why"
|
77
53
|
def add(license, name, version = nil)
|
78
54
|
die_on_error {
|
79
|
-
DependencyManager.
|
80
|
-
|
55
|
+
DependencyManager.new.tap do |dependency_manager|
|
56
|
+
dependency_manager.manually_add(license, name, version)
|
57
|
+
dependency_manager.approve!(name, options[:approver], options[:message]) if options[:approve]
|
58
|
+
end
|
81
59
|
}
|
82
60
|
if options[:approve]
|
83
61
|
say "The #{name} dependency has been added and approved!", :green
|
@@ -89,7 +67,7 @@ module LicenseFinder
|
|
89
67
|
desc "remove DEPENDENCY_NAME", "Remove a dependency that is not managed by a package manager"
|
90
68
|
def remove(name)
|
91
69
|
die_on_error {
|
92
|
-
DependencyManager.manually_remove(name)
|
70
|
+
DependencyManager.new.manually_remove(name)
|
93
71
|
}
|
94
72
|
|
95
73
|
say "The #{name} dependency has been removed.", :green
|
@@ -104,7 +82,7 @@ module LicenseFinder
|
|
104
82
|
yield
|
105
83
|
|
106
84
|
LicenseFinder.config.save
|
107
|
-
|
85
|
+
sync_with_package_managers
|
108
86
|
}
|
109
87
|
end
|
110
88
|
end
|
@@ -215,9 +193,10 @@ module LicenseFinder
|
|
215
193
|
|
216
194
|
class Main < Base
|
217
195
|
method_option :quiet, type: :boolean, desc: "silences loading output"
|
196
|
+
method_option :debug, type: :boolean, desc: "emit detailed info about what LicenseFinder is doing"
|
218
197
|
desc "rescan", "Find new dependencies. (Default action)"
|
219
198
|
def rescan
|
220
|
-
|
199
|
+
sync_with_package_managers options
|
221
200
|
show_results
|
222
201
|
end
|
223
202
|
|
@@ -235,7 +214,7 @@ module LicenseFinder
|
|
235
214
|
def approve(name, *other_names)
|
236
215
|
names = other_names.unshift name
|
237
216
|
die_on_error {
|
238
|
-
names.each { |name| DependencyManager.approve!(name, options[:approver], options[:message]) }
|
217
|
+
names.each { |name| DependencyManager.new.approve!(name, options[:approver], options[:message]) }
|
239
218
|
}
|
240
219
|
|
241
220
|
say "The #{names.join(", ")} dependency has been approved!", :green
|
@@ -244,7 +223,7 @@ module LicenseFinder
|
|
244
223
|
desc "license LICENSE DEPENDENCY_NAME", "Update a dependency's license"
|
245
224
|
def license(license, name)
|
246
225
|
die_on_error {
|
247
|
-
DependencyManager.license!(name, license)
|
226
|
+
DependencyManager.new.license!(name, license)
|
248
227
|
}
|
249
228
|
|
250
229
|
say "The #{name} dependency has been marked as using #{license} license!", :green
|