license_finder 1.1.1-java → 1.2-java
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/.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
|