license_finder 2.1.0.rc1 → 2.1.0.rc2
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 +13 -5
- data/.travis.yml +7 -6
- data/CHANGELOG.rdoc +8 -0
- data/features/fixtures/multi-module-gradle/build.gradle +4 -2
- data/features/fixtures/single-module-gradle/build.gradle +5 -3
- data/lib/license_finder/cli/main.rb +3 -0
- data/lib/license_finder/cli/makes_decisions.rb +2 -0
- data/lib/license_finder/decision_applier.rb +2 -2
- data/lib/license_finder/decisions.rb +26 -6
- data/lib/license_finder/package_managers/go_workspace.rb +15 -9
- data/lib/license_finder/reports/csv_report.rb +5 -1
- data/lib/license_finder/version.rb +1 -1
- data/license_finder.gemspec +4 -1
- data/spec/lib/license_finder/cli/approvals_spec.rb +5 -3
- data/spec/lib/license_finder/cli/dependencies_spec.rb +11 -0
- data/spec/lib/license_finder/decision_applier_spec.rb +46 -0
- data/spec/lib/license_finder/package_managers/go_workspace_spec.rb +47 -25
- data/spec/lib/license_finder/reports/csv_report_spec.rb +6 -0
- metadata +51 -39
checksums.yaml
CHANGED
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
|
|
2
|
+
!binary "U0hBMQ==":
|
|
3
|
+
metadata.gz: !binary |-
|
|
4
|
+
ODI1N2UxNjA0NjVkOWE0MDQ3YTkzY2ZmMDBiNzcwMmNhYzllZDk3NQ==
|
|
5
|
+
data.tar.gz: !binary |-
|
|
6
|
+
M2ViZWI5ZGNhOWJhMDkxMTU2YTcyOWIyZDgwYTk3MzA1NzQ0NTJlYw==
|
|
5
7
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
|
|
8
|
+
metadata.gz: !binary |-
|
|
9
|
+
ODFiNjY1NjdiYzA0MDA3MGMyZTc0NmExNTNjYjNlNDMxMTUwOWQxZTIxM2Mx
|
|
10
|
+
MWY0MmMzNzBkM2E3NjJhMjcxMjQwOGI3MDQ1OWI1MDFjZWFiZDM1MDUwMTYx
|
|
11
|
+
ZTRhMTNkNmM4ZDAxNDkzNGRlZjgyZWIyZWNiOTQ5MDYzMjg4MDE=
|
|
12
|
+
data.tar.gz: !binary |-
|
|
13
|
+
Nzg0M2E4OGM1NDUyMTJlODllNDgyNDQ3YjgzMmI3NzY1NzRmZGVlNDQ1MzYw
|
|
14
|
+
ODRiMDA2NmUzNzRkODVkNTU2Y2IxMWIwOTIxYzNmYjRhYmZhOWFhNTNiMzJk
|
|
15
|
+
OTk0ZTc5MmVkMTk0MzI1YWQ2YzYxOGI0OGUxNTNiMzZhMWY4OTI=
|
data/.travis.yml
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
rvm:
|
|
2
|
-
- 2.1.0
|
|
3
|
-
- 2.0.0
|
|
4
2
|
- 1.9.3
|
|
3
|
+
- 2.0
|
|
4
|
+
- 2.1
|
|
5
|
+
- 2.2
|
|
6
|
+
- 2.3
|
|
5
7
|
- jruby-19mode
|
|
6
|
-
-
|
|
7
|
-
- jruby-
|
|
8
|
+
- jruby-1.7.23
|
|
9
|
+
- jruby-9.0.4.0
|
|
8
10
|
|
|
9
11
|
matrix:
|
|
10
12
|
allow_failures:
|
|
11
|
-
- rvm:
|
|
12
|
-
- rvm: jruby-head
|
|
13
|
+
- rvm: 1.9.3
|
|
13
14
|
|
|
14
15
|
env:
|
|
15
16
|
- PATH=$PATH:$HOME/gradle/bin:$HOME/rebar:$HOME/go/bin GOPATH=$HOME/go
|
data/CHANGELOG.rdoc
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
=== 2.1.0.rc2 / 2015-12-31
|
|
2
|
+
|
|
3
|
+
* Features
|
|
4
|
+
* specific versions of a dependency can be approved (#183, #185). (Thanks, @ipsi!)
|
|
5
|
+
* improved "go workspace" support by looking at git submodules. (Thanks, @jvshahid and @aminjam!)
|
|
6
|
+
* added an "install path" field to the report output. (Thanks, @jvshahid and @aminjam!)
|
|
7
|
+
|
|
1
8
|
=== 2.1.0.rc1 / 2015-11-03
|
|
2
9
|
|
|
3
10
|
* Features
|
|
@@ -11,6 +18,7 @@
|
|
|
11
18
|
* Experimental support for "composite" projects (multiple git submodules)
|
|
12
19
|
* Experimental support for "license diffs" between directories
|
|
13
20
|
|
|
21
|
+
|
|
14
22
|
=== 2.0.4 / 2015-04-16
|
|
15
23
|
|
|
16
24
|
* Features
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
buildscript {
|
|
2
2
|
repositories {
|
|
3
|
-
|
|
3
|
+
maven {
|
|
4
|
+
url 'https://plugins.gradle.org/m2/'
|
|
5
|
+
}
|
|
4
6
|
}
|
|
5
7
|
|
|
6
8
|
dependencies {
|
|
7
|
-
classpath 'nl.javadude.gradle.plugins:license-gradle-plugin:0.
|
|
9
|
+
classpath 'gradle.plugin.nl.javadude.gradle.plugins:license-gradle-plugin:0.12.1'
|
|
8
10
|
}
|
|
9
11
|
}
|
|
10
12
|
|
|
@@ -13,12 +13,14 @@ dependencies {
|
|
|
13
13
|
|
|
14
14
|
buildscript {
|
|
15
15
|
repositories {
|
|
16
|
-
|
|
16
|
+
maven {
|
|
17
|
+
url 'https://plugins.gradle.org/m2/'
|
|
18
|
+
}
|
|
17
19
|
}
|
|
18
20
|
|
|
19
21
|
dependencies {
|
|
20
|
-
classpath 'nl.javadude.gradle.plugins:license-gradle-plugin:0.
|
|
22
|
+
classpath 'gradle.plugin.nl.javadude.gradle.plugins:license-gradle-plugin:0.12.1'
|
|
21
23
|
}
|
|
22
24
|
}
|
|
23
25
|
|
|
24
|
-
apply plugin: 'license'
|
|
26
|
+
apply plugin: 'license'
|
|
@@ -34,6 +34,9 @@ module LicenseFinder
|
|
|
34
34
|
unapproved = license_finder.unapproved
|
|
35
35
|
blacklisted = license_finder.blacklisted
|
|
36
36
|
|
|
37
|
+
# Ensure to start output on a new line even with dot progress indicators.
|
|
38
|
+
say "\n"
|
|
39
|
+
|
|
37
40
|
if unapproved.empty?
|
|
38
41
|
say "All dependencies are approved for use", :green
|
|
39
42
|
else
|
|
@@ -9,6 +9,7 @@ module LicenseFinder
|
|
|
9
9
|
def auditable
|
|
10
10
|
method_option :who, desc: "The person making this decision"
|
|
11
11
|
method_option :why, desc: "The reason for making this decision"
|
|
12
|
+
method_option :version, desc: 'The version that will be approved'
|
|
12
13
|
end
|
|
13
14
|
end
|
|
14
15
|
|
|
@@ -18,6 +19,7 @@ module LicenseFinder
|
|
|
18
19
|
@txn ||= {
|
|
19
20
|
who: options[:who],
|
|
20
21
|
why: options[:why],
|
|
22
|
+
versions: options[:version] ? [options[:version]] : [],
|
|
21
23
|
when: Time.now.getutc
|
|
22
24
|
}
|
|
23
25
|
end
|
|
@@ -42,8 +42,8 @@ module LicenseFinder
|
|
|
42
42
|
def with_approval(package)
|
|
43
43
|
if package.licenses.all? { |license| decisions.blacklisted?(license) }
|
|
44
44
|
package.blacklisted!
|
|
45
|
-
elsif decisions.approved?(package.name)
|
|
46
|
-
package.approved_manually!(decisions.approval_of(package.name))
|
|
45
|
+
elsif decisions.approved?(package.name, package.version)
|
|
46
|
+
package.approved_manually!(decisions.approval_of(package.name, package.version))
|
|
47
47
|
elsif package.licenses.any? { |license| decisions.whitelisted?(license) }
|
|
48
48
|
package.whitelisted!
|
|
49
49
|
end
|
|
@@ -10,12 +10,24 @@ module LicenseFinder
|
|
|
10
10
|
@licenses[name]
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
-
def approval_of(name)
|
|
14
|
-
|
|
13
|
+
def approval_of(name, version=nil)
|
|
14
|
+
if !@approvals.has_key?(name)
|
|
15
|
+
nil
|
|
16
|
+
elsif version != nil
|
|
17
|
+
@approvals[name] if @approvals[name][:safe_versions].empty? || @approvals[name][:safe_versions].include?(version)
|
|
18
|
+
else
|
|
19
|
+
@approvals[name] if @approvals[name][:safe_versions].empty?
|
|
20
|
+
end
|
|
15
21
|
end
|
|
16
22
|
|
|
17
|
-
def approved?(name)
|
|
18
|
-
|
|
23
|
+
def approved?(name, version=nil)
|
|
24
|
+
if !@approvals.has_key?(name)
|
|
25
|
+
nil
|
|
26
|
+
elsif version != nil
|
|
27
|
+
@approvals.has_key?(name) && @approvals[name][:safe_versions].empty? || @approvals[name][:safe_versions].include?(version)
|
|
28
|
+
else
|
|
29
|
+
@approvals.has_key?(name)
|
|
30
|
+
end
|
|
19
31
|
end
|
|
20
32
|
|
|
21
33
|
def whitelisted?(lic)
|
|
@@ -38,9 +50,9 @@ module LicenseFinder
|
|
|
38
50
|
# WRITE
|
|
39
51
|
#######
|
|
40
52
|
|
|
41
|
-
TXN = Struct.new(:who, :why, :safe_when) do
|
|
53
|
+
TXN = Struct.new(:who, :why, :safe_when, :safe_versions) do
|
|
42
54
|
def self.from_hash(txn)
|
|
43
|
-
new(txn[:who], txn[:why], txn[:when])
|
|
55
|
+
new(txn[:who], txn[:why], txn[:when], txn[:versions].nil? ? [] : txn[:versions])
|
|
44
56
|
end
|
|
45
57
|
end
|
|
46
58
|
|
|
@@ -81,7 +93,15 @@ module LicenseFinder
|
|
|
81
93
|
|
|
82
94
|
def approve(name, txn = {})
|
|
83
95
|
@decisions << [:approve, name, txn]
|
|
96
|
+
|
|
97
|
+
versions = []
|
|
98
|
+
if @approvals.has_key?(name)
|
|
99
|
+
versions = @approvals[name][:safe_versions]
|
|
100
|
+
end
|
|
101
|
+
|
|
84
102
|
@approvals[name] = TXN.from_hash(txn)
|
|
103
|
+
|
|
104
|
+
@approvals[name][:safe_versions].concat(versions)
|
|
85
105
|
self
|
|
86
106
|
end
|
|
87
107
|
|
|
@@ -2,10 +2,12 @@ require 'json'
|
|
|
2
2
|
|
|
3
3
|
module LicenseFinder
|
|
4
4
|
class GoWorkspace < PackageManager
|
|
5
|
+
Submodule = Struct.new :path, :revision
|
|
6
|
+
|
|
5
7
|
def current_packages
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
GoPackage.
|
|
8
|
+
submodules.map do |submodule|
|
|
9
|
+
import_path = Pathname.new(submodule.path).relative_path_from(project_src)
|
|
10
|
+
GoPackage.from_dependency({'ImportPath' => import_path.to_s, 'Rev' => submodule.revision}, project_src)
|
|
9
11
|
end
|
|
10
12
|
end
|
|
11
13
|
|
|
@@ -24,12 +26,16 @@ module LicenseFinder
|
|
|
24
26
|
project_path.join('src')
|
|
25
27
|
end
|
|
26
28
|
|
|
27
|
-
def
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
def submodules
|
|
30
|
+
output = Dir.chdir(project_path) do |d|
|
|
31
|
+
result = capture('git submodule status')
|
|
32
|
+
raise 'git submodule status failed' unless result[1]
|
|
33
|
+
result.first
|
|
34
|
+
end
|
|
35
|
+
output.lines.map do |gitmodule|
|
|
36
|
+
columns = gitmodule.split.map(&:strip)
|
|
37
|
+
Submodule.new File.join(project_path,columns[1]), columns[0]
|
|
38
|
+
end
|
|
33
39
|
end
|
|
34
40
|
end
|
|
35
41
|
end
|
|
@@ -3,7 +3,7 @@ require 'csv'
|
|
|
3
3
|
module LicenseFinder
|
|
4
4
|
class CsvReport < Report
|
|
5
5
|
COMMA_SEP = ","
|
|
6
|
-
AVAILABLE_COLUMNS = %w[name version authors licenses approved summary description homepage]
|
|
6
|
+
AVAILABLE_COLUMNS = %w[name version authors licenses approved summary description homepage install_path]
|
|
7
7
|
MISSING_DEPENDENCY_TEXT = "This package is not installed. Please install to determine licenses."
|
|
8
8
|
|
|
9
9
|
def initialize(dependencies, options)
|
|
@@ -62,5 +62,9 @@ module LicenseFinder
|
|
|
62
62
|
def format_description(dep)
|
|
63
63
|
dep.description.to_s.strip
|
|
64
64
|
end
|
|
65
|
+
|
|
66
|
+
def format_install_path(dep)
|
|
67
|
+
dep.install_path
|
|
68
|
+
end
|
|
65
69
|
end
|
|
66
70
|
end
|
data/license_finder.gemspec
CHANGED
|
@@ -50,7 +50,10 @@ Gem::Specification.new do |s|
|
|
|
50
50
|
s.add_development_dependency "rspec", "~> 3"
|
|
51
51
|
s.add_development_dependency "capybara", "~> 2.0.0"
|
|
52
52
|
s.add_development_dependency "webmock", "~> 1.13"
|
|
53
|
-
s.add_development_dependency "cocoapods" if LicenseFinder::Platform.darwin?
|
|
53
|
+
s.add_development_dependency "cocoapods", "0.34.0" if LicenseFinder::Platform.darwin?
|
|
54
|
+
|
|
55
|
+
# temporary to preserve ruby 1.9.3 support.
|
|
56
|
+
s.add_development_dependency "mime-types", "< 3.0"
|
|
54
57
|
|
|
55
58
|
s.files = `git ls-files`.split("\n")
|
|
56
59
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
@@ -31,18 +31,20 @@ module LicenseFinder
|
|
|
31
31
|
end
|
|
32
32
|
end
|
|
33
33
|
|
|
34
|
-
it "sets approver and approval
|
|
34
|
+
it "sets approver, approval message, and approval version" do
|
|
35
35
|
subject.options = {
|
|
36
36
|
who: "Julian",
|
|
37
|
-
why: "We really need this"
|
|
37
|
+
why: "We really need this",
|
|
38
|
+
version: '1.0.0.RELEASE'
|
|
38
39
|
}
|
|
39
40
|
silence_stdout do
|
|
40
41
|
subject.add("foo")
|
|
41
42
|
end
|
|
42
43
|
|
|
43
|
-
approval = subject.decisions.approval_of("foo")
|
|
44
|
+
approval = subject.decisions.approval_of("foo", '1.0.0.RELEASE')
|
|
44
45
|
expect(approval.who).to eq "Julian"
|
|
45
46
|
expect(approval.why).to eq "We really need this"
|
|
47
|
+
expect(approval.safe_versions).to eq ['1.0.0.RELEASE']
|
|
46
48
|
end
|
|
47
49
|
end
|
|
48
50
|
|
|
@@ -39,6 +39,17 @@ module LicenseFinder
|
|
|
39
39
|
expect(approval.who).to eq "Julian"
|
|
40
40
|
expect(approval.why).to eq "We really need this"
|
|
41
41
|
end
|
|
42
|
+
|
|
43
|
+
it 'has an --approve option to approve the added dependency & version combination' do
|
|
44
|
+
subject.options = { approve: true, who: "Julian", why: "We really need this", version: '1.0.0.RELEASE' }
|
|
45
|
+
silence_stdout do
|
|
46
|
+
subject.add("js_dep", "MIT")
|
|
47
|
+
end
|
|
48
|
+
approval = subject.decisions.approval_of("js_dep", '1.0.0.RELEASE')
|
|
49
|
+
expect(approval.who).to eq "Julian"
|
|
50
|
+
expect(approval.why).to eq "We really need this"
|
|
51
|
+
expect(approval.safe_versions).to eq ['1.0.0.RELEASE']
|
|
52
|
+
end
|
|
42
53
|
end
|
|
43
54
|
|
|
44
55
|
describe "remove" do
|
|
@@ -119,6 +119,52 @@ module LicenseFinder
|
|
|
119
119
|
expect(dep).to be_approved
|
|
120
120
|
expect(dep).to be_approved_manually
|
|
121
121
|
end
|
|
122
|
+
|
|
123
|
+
it 'does not return an approval for a package without a version if all approvals have an explicit version' do
|
|
124
|
+
decisions = Decisions.new
|
|
125
|
+
.add_package('spring-boot', nil)
|
|
126
|
+
.approve('spring-boot', versions: ['1.3.0.RELEASE'], who: 'Approver', why: 'Because')
|
|
127
|
+
decision_applier = described_class.new(decisions: decisions, packages: [])
|
|
128
|
+
dep = decision_applier.acknowledged.last
|
|
129
|
+
expect(dep).to_not be_approved
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
it 'does not return an approval if the package has the wrong version' do
|
|
133
|
+
decisions = Decisions.new
|
|
134
|
+
.add_package('spring-boot', '1.3.1.RELEASE')
|
|
135
|
+
.approve('spring-boot', versions: ['1.3.0.RELEASE'], who: 'Approver', why: 'Because')
|
|
136
|
+
decision_applier = described_class.new(decisions: decisions, packages: [])
|
|
137
|
+
dep = decision_applier.acknowledged.last
|
|
138
|
+
expect(dep).to_not be_approved
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
it 'returns an approval if the requested package has an approved version' do
|
|
142
|
+
decisions = Decisions.new
|
|
143
|
+
.add_package('spring-boot', '1.3.0.RELEASE')
|
|
144
|
+
.approve('spring-boot', versions: ['1.3.0.RELEASE'], who: 'Approver', why: 'Because')
|
|
145
|
+
decision_applier = described_class.new(decisions: decisions, packages: [])
|
|
146
|
+
dep = decision_applier.acknowledged.last
|
|
147
|
+
expect(dep).to be_approved
|
|
148
|
+
expect(dep).to be_approved_manually
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
it 'returns an approval if the requested package has been approved, but no version was specified' do
|
|
152
|
+
decisions = Decisions.new
|
|
153
|
+
.add_package('spring-boot', '1.3.0.RELEASE')
|
|
154
|
+
.approve('spring-boot', versions: [], who: 'Approver', why: 'Because')
|
|
155
|
+
decision_applier = described_class.new(decisions: decisions, packages: [])
|
|
156
|
+
dep = decision_applier.acknowledged.last
|
|
157
|
+
expect(dep).to be_approved
|
|
158
|
+
expect(dep).to be_approved_manually
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
it 'does not return an approval if no dependencies have been approved' do
|
|
162
|
+
decisions = Decisions.new
|
|
163
|
+
.add_package('spring-boot', '1.3.0.RELEASE')
|
|
164
|
+
decision_applier = described_class.new(decisions: decisions, packages: [])
|
|
165
|
+
dep = decision_applier.acknowledged.last
|
|
166
|
+
expect(dep).to_not be_approved
|
|
167
|
+
end
|
|
122
168
|
end
|
|
123
169
|
|
|
124
170
|
describe '#unapproved' do
|
|
@@ -8,6 +8,7 @@ module LicenseFinder
|
|
|
8
8
|
describe '#current_packages' do
|
|
9
9
|
let(:content) {
|
|
10
10
|
'_/Users/pivotal/workspace/loggregator/src/bitbucket.org/kardianos/osext
|
|
11
|
+
_/Users/pivotal/workspace/loggregator/src/bitbucket.org/kardianos/osext/something
|
|
11
12
|
_/Users/pivotal/workspace/loggregator/src/deaagent
|
|
12
13
|
_/Users/pivotal/workspace/loggregator/src/deaagent/deaagent
|
|
13
14
|
_/Users/pivotal/workspace/loggregator/src/deaagent/domain
|
|
@@ -18,9 +19,14 @@ module LicenseFinder
|
|
|
18
19
|
_/Users/pivotal/workspace/loggregator/src/doppler/groupedsinks/sink_wrapper'
|
|
19
20
|
}
|
|
20
21
|
|
|
22
|
+
let(:git_modules) {
|
|
23
|
+
"b8a35001b773c267e src/bitbucket.org/kardianos/osext (heads/master)"
|
|
24
|
+
}
|
|
25
|
+
|
|
21
26
|
before do
|
|
22
27
|
allow(Dir).to receive(:chdir).with(Pathname('/Users/pivotal/workspace/loggregator')) { |&block| block.call }
|
|
23
28
|
allow(subject).to receive(:capture).with('go list -f "{{.ImportPath}} " ./...').and_return([content.to_s, true])
|
|
29
|
+
allow(subject).to receive(:capture).with('git submodule status').and_return([git_modules, true])
|
|
24
30
|
end
|
|
25
31
|
|
|
26
32
|
describe 'should return an array of go packages' do
|
|
@@ -28,41 +34,57 @@ module LicenseFinder
|
|
|
28
34
|
packages = subject.current_packages
|
|
29
35
|
first_package = packages.first
|
|
30
36
|
expect(first_package.name).to eq 'bitbucket.org/kardianos/osext'
|
|
31
|
-
expect(first_package.version).to eq '
|
|
37
|
+
expect(first_package.version).to eq 'b8a3500'
|
|
32
38
|
expect(first_package.install_path).to eq '/Users/pivotal/workspace/loggregator/src/bitbucket.org/kardianos/osext'
|
|
33
39
|
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
40
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
41
|
+
it 'should filter the subpackages' do
|
|
42
|
+
packages = subject.current_packages
|
|
43
|
+
packages = packages.select { |p| p.name.include?("bitbucket.org") }
|
|
44
|
+
expect(packages.count).to eq(1)
|
|
45
|
+
end
|
|
42
46
|
|
|
43
|
-
|
|
44
|
-
|
|
47
|
+
context 'if git submodule status fails' do
|
|
48
|
+
before do
|
|
49
|
+
allow(subject).to receive(:capture).with('git submodule status').and_return(['', false])
|
|
50
|
+
end
|
|
45
51
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
52
|
+
it 'should raise an exception' do
|
|
53
|
+
expect { subject.current_packages }.to raise_exception(/git submodule status failed/)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
50
56
|
end
|
|
51
57
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
58
|
+
describe '#package_path' do
|
|
59
|
+
it 'returns the package_path' do
|
|
60
|
+
expect(subject.package_path).to eq Pathname('/Users/pivotal/workspace/loggregator/.envrc')
|
|
61
|
+
end
|
|
56
62
|
end
|
|
57
63
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
expect(subject.active?).to eq(false)
|
|
61
|
-
end
|
|
64
|
+
describe '#active?' do
|
|
65
|
+
let(:envrc) { '/Users/pivotal/workspace/loggregator/.envrc' }
|
|
62
66
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
67
|
+
it 'returns true when .envrc contains GOPATH' do
|
|
68
|
+
allow(FileTest).to receive(:exist?).with(envrc).and_return(true)
|
|
69
|
+
allow(IO).to receive(:read).with(Pathname(envrc)).and_return('export GOPATH=/foo/bar')
|
|
70
|
+
expect(subject.active?).to eq(true)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it 'returns false when .envrc does not contain GOPATH' do
|
|
74
|
+
allow(FileTest).to receive(:exist?).with(envrc).and_return(true)
|
|
75
|
+
allow(IO).to receive(:read).with(Pathname(envrc)).and_return('this is not an envrc file')
|
|
76
|
+
expect(subject.active?).to eq(false)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it 'returns false when .envrc does not exist' do
|
|
80
|
+
allow(FileTest).to receive(:exist?).with(envrc).and_return(false)
|
|
81
|
+
expect(subject.active?).to eq(false)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it 'logs the active state' do
|
|
85
|
+
expect(logger).to receive(:active)
|
|
86
|
+
subject.active?
|
|
87
|
+
end
|
|
66
88
|
end
|
|
67
89
|
end
|
|
68
90
|
end
|
|
@@ -23,6 +23,12 @@ module LicenseFinder
|
|
|
23
23
|
expect(subject.to_s).to eq("\n")
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
+
it 'supports install_path column' do
|
|
27
|
+
dep = Package.new('gem_a', '1.0', install_path: '/tmp/gems/gem_a-1.0')
|
|
28
|
+
subject = described_class.new([dep], columns: %w[name version install_path])
|
|
29
|
+
expect(subject.to_s).to eq("gem_a,1.0,/tmp/gems/gem_a-1.0\n")
|
|
30
|
+
end
|
|
31
|
+
|
|
26
32
|
it "does not include columns that should only be in merged reports" do
|
|
27
33
|
dep = Package.new('gem_a', '1.0')
|
|
28
34
|
subject = described_class.new([dep], columns: %w[subproject_paths])
|
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: 2.1.0.
|
|
4
|
+
version: 2.1.0.rc2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jacob Maine
|
|
@@ -20,167 +20,179 @@ authors:
|
|
|
20
20
|
autorequire:
|
|
21
21
|
bindir: bin
|
|
22
22
|
cert_chain: []
|
|
23
|
-
date: 2015-
|
|
23
|
+
date: 2015-12-31 00:00:00.000000000 Z
|
|
24
24
|
dependencies:
|
|
25
25
|
- !ruby/object:Gem::Dependency
|
|
26
26
|
name: bundler
|
|
27
27
|
requirement: !ruby/object:Gem::Requirement
|
|
28
28
|
requirements:
|
|
29
|
-
- -
|
|
29
|
+
- - ! '>='
|
|
30
30
|
- !ruby/object:Gem::Version
|
|
31
31
|
version: '0'
|
|
32
32
|
type: :runtime
|
|
33
33
|
prerelease: false
|
|
34
34
|
version_requirements: !ruby/object:Gem::Requirement
|
|
35
35
|
requirements:
|
|
36
|
-
- -
|
|
36
|
+
- - ! '>='
|
|
37
37
|
- !ruby/object:Gem::Version
|
|
38
38
|
version: '0'
|
|
39
39
|
- !ruby/object:Gem::Dependency
|
|
40
40
|
name: thor
|
|
41
41
|
requirement: !ruby/object:Gem::Requirement
|
|
42
42
|
requirements:
|
|
43
|
-
- -
|
|
43
|
+
- - ! '>='
|
|
44
44
|
- !ruby/object:Gem::Version
|
|
45
45
|
version: '0'
|
|
46
46
|
type: :runtime
|
|
47
47
|
prerelease: false
|
|
48
48
|
version_requirements: !ruby/object:Gem::Requirement
|
|
49
49
|
requirements:
|
|
50
|
-
- -
|
|
50
|
+
- - ! '>='
|
|
51
51
|
- !ruby/object:Gem::Version
|
|
52
52
|
version: '0'
|
|
53
53
|
- !ruby/object:Gem::Dependency
|
|
54
54
|
name: httparty
|
|
55
55
|
requirement: !ruby/object:Gem::Requirement
|
|
56
56
|
requirements:
|
|
57
|
-
- -
|
|
57
|
+
- - ! '>='
|
|
58
58
|
- !ruby/object:Gem::Version
|
|
59
59
|
version: '0'
|
|
60
60
|
type: :runtime
|
|
61
61
|
prerelease: false
|
|
62
62
|
version_requirements: !ruby/object:Gem::Requirement
|
|
63
63
|
requirements:
|
|
64
|
-
- -
|
|
64
|
+
- - ! '>='
|
|
65
65
|
- !ruby/object:Gem::Version
|
|
66
66
|
version: '0'
|
|
67
67
|
- !ruby/object:Gem::Dependency
|
|
68
68
|
name: xml-simple
|
|
69
69
|
requirement: !ruby/object:Gem::Requirement
|
|
70
70
|
requirements:
|
|
71
|
-
- -
|
|
71
|
+
- - ! '>='
|
|
72
72
|
- !ruby/object:Gem::Version
|
|
73
73
|
version: '0'
|
|
74
74
|
type: :runtime
|
|
75
75
|
prerelease: false
|
|
76
76
|
version_requirements: !ruby/object:Gem::Requirement
|
|
77
77
|
requirements:
|
|
78
|
-
- -
|
|
78
|
+
- - ! '>='
|
|
79
79
|
- !ruby/object:Gem::Version
|
|
80
80
|
version: '0'
|
|
81
81
|
- !ruby/object:Gem::Dependency
|
|
82
82
|
name: rake
|
|
83
83
|
requirement: !ruby/object:Gem::Requirement
|
|
84
84
|
requirements:
|
|
85
|
-
- -
|
|
85
|
+
- - ! '>='
|
|
86
86
|
- !ruby/object:Gem::Version
|
|
87
87
|
version: '0'
|
|
88
88
|
type: :development
|
|
89
89
|
prerelease: false
|
|
90
90
|
version_requirements: !ruby/object:Gem::Requirement
|
|
91
91
|
requirements:
|
|
92
|
-
- -
|
|
92
|
+
- - ! '>='
|
|
93
93
|
- !ruby/object:Gem::Version
|
|
94
94
|
version: '0'
|
|
95
95
|
- !ruby/object:Gem::Dependency
|
|
96
96
|
name: rspec-its
|
|
97
97
|
requirement: !ruby/object:Gem::Requirement
|
|
98
98
|
requirements:
|
|
99
|
-
- -
|
|
99
|
+
- - ! '>='
|
|
100
100
|
- !ruby/object:Gem::Version
|
|
101
101
|
version: '0'
|
|
102
102
|
type: :development
|
|
103
103
|
prerelease: false
|
|
104
104
|
version_requirements: !ruby/object:Gem::Requirement
|
|
105
105
|
requirements:
|
|
106
|
-
- -
|
|
106
|
+
- - ! '>='
|
|
107
107
|
- !ruby/object:Gem::Version
|
|
108
108
|
version: '0'
|
|
109
109
|
- !ruby/object:Gem::Dependency
|
|
110
110
|
name: fakefs
|
|
111
111
|
requirement: !ruby/object:Gem::Requirement
|
|
112
112
|
requirements:
|
|
113
|
-
- -
|
|
113
|
+
- - ! '>='
|
|
114
114
|
- !ruby/object:Gem::Version
|
|
115
115
|
version: '0'
|
|
116
116
|
type: :development
|
|
117
117
|
prerelease: false
|
|
118
118
|
version_requirements: !ruby/object:Gem::Requirement
|
|
119
119
|
requirements:
|
|
120
|
-
- -
|
|
120
|
+
- - ! '>='
|
|
121
121
|
- !ruby/object:Gem::Version
|
|
122
122
|
version: '0'
|
|
123
123
|
- !ruby/object:Gem::Dependency
|
|
124
124
|
name: pry
|
|
125
125
|
requirement: !ruby/object:Gem::Requirement
|
|
126
126
|
requirements:
|
|
127
|
-
- -
|
|
127
|
+
- - ! '>='
|
|
128
128
|
- !ruby/object:Gem::Version
|
|
129
129
|
version: '0'
|
|
130
130
|
type: :development
|
|
131
131
|
prerelease: false
|
|
132
132
|
version_requirements: !ruby/object:Gem::Requirement
|
|
133
133
|
requirements:
|
|
134
|
-
- -
|
|
134
|
+
- - ! '>='
|
|
135
135
|
- !ruby/object:Gem::Version
|
|
136
136
|
version: '0'
|
|
137
137
|
- !ruby/object:Gem::Dependency
|
|
138
138
|
name: rspec
|
|
139
139
|
requirement: !ruby/object:Gem::Requirement
|
|
140
140
|
requirements:
|
|
141
|
-
- -
|
|
141
|
+
- - ~>
|
|
142
142
|
- !ruby/object:Gem::Version
|
|
143
143
|
version: '3'
|
|
144
144
|
type: :development
|
|
145
145
|
prerelease: false
|
|
146
146
|
version_requirements: !ruby/object:Gem::Requirement
|
|
147
147
|
requirements:
|
|
148
|
-
- -
|
|
148
|
+
- - ~>
|
|
149
149
|
- !ruby/object:Gem::Version
|
|
150
150
|
version: '3'
|
|
151
151
|
- !ruby/object:Gem::Dependency
|
|
152
152
|
name: capybara
|
|
153
153
|
requirement: !ruby/object:Gem::Requirement
|
|
154
154
|
requirements:
|
|
155
|
-
- -
|
|
155
|
+
- - ~>
|
|
156
156
|
- !ruby/object:Gem::Version
|
|
157
157
|
version: 2.0.0
|
|
158
158
|
type: :development
|
|
159
159
|
prerelease: false
|
|
160
160
|
version_requirements: !ruby/object:Gem::Requirement
|
|
161
161
|
requirements:
|
|
162
|
-
- -
|
|
162
|
+
- - ~>
|
|
163
163
|
- !ruby/object:Gem::Version
|
|
164
164
|
version: 2.0.0
|
|
165
165
|
- !ruby/object:Gem::Dependency
|
|
166
166
|
name: webmock
|
|
167
167
|
requirement: !ruby/object:Gem::Requirement
|
|
168
168
|
requirements:
|
|
169
|
-
- -
|
|
169
|
+
- - ~>
|
|
170
170
|
- !ruby/object:Gem::Version
|
|
171
171
|
version: '1.13'
|
|
172
172
|
type: :development
|
|
173
173
|
prerelease: false
|
|
174
174
|
version_requirements: !ruby/object:Gem::Requirement
|
|
175
175
|
requirements:
|
|
176
|
-
- -
|
|
176
|
+
- - ~>
|
|
177
177
|
- !ruby/object:Gem::Version
|
|
178
178
|
version: '1.13'
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
179
|
+
- !ruby/object:Gem::Dependency
|
|
180
|
+
name: mime-types
|
|
181
|
+
requirement: !ruby/object:Gem::Requirement
|
|
182
|
+
requirements:
|
|
183
|
+
- - <
|
|
184
|
+
- !ruby/object:Gem::Version
|
|
185
|
+
version: '3.0'
|
|
186
|
+
type: :development
|
|
187
|
+
prerelease: false
|
|
188
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
189
|
+
requirements:
|
|
190
|
+
- - <
|
|
191
|
+
- !ruby/object:Gem::Version
|
|
192
|
+
version: '3.0'
|
|
193
|
+
description: ! " LicenseFinder works with your package managers to find\n dependencies,
|
|
194
|
+
detect the licenses of the packages in them, compare\n those licenses against
|
|
195
|
+
a user-defined whitelist, and give you an\n actionable exception report.\n"
|
|
184
196
|
email:
|
|
185
197
|
- commoncode@pivotalabs.com
|
|
186
198
|
executables:
|
|
@@ -189,14 +201,14 @@ executables:
|
|
|
189
201
|
extensions: []
|
|
190
202
|
extra_rdoc_files: []
|
|
191
203
|
files:
|
|
192
|
-
-
|
|
193
|
-
-
|
|
194
|
-
-
|
|
195
|
-
-
|
|
196
|
-
-
|
|
197
|
-
-
|
|
198
|
-
-
|
|
199
|
-
-
|
|
204
|
+
- .force-build
|
|
205
|
+
- .gitignore
|
|
206
|
+
- .rspec
|
|
207
|
+
- .travis.yml
|
|
208
|
+
- .travis/install_bower.sh
|
|
209
|
+
- .travis/install_godep.sh
|
|
210
|
+
- .travis/install_gradle.sh
|
|
211
|
+
- .travis/install_rebar.sh
|
|
200
212
|
- CHANGELOG.rdoc
|
|
201
213
|
- CONTRIBUTING.md
|
|
202
214
|
- Gemfile
|
|
@@ -434,12 +446,12 @@ require_paths:
|
|
|
434
446
|
- lib
|
|
435
447
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
436
448
|
requirements:
|
|
437
|
-
- -
|
|
449
|
+
- - ! '>='
|
|
438
450
|
- !ruby/object:Gem::Version
|
|
439
451
|
version: 1.9.3
|
|
440
452
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
441
453
|
requirements:
|
|
442
|
-
- -
|
|
454
|
+
- - ! '>'
|
|
443
455
|
- !ruby/object:Gem::Version
|
|
444
456
|
version: 1.3.1
|
|
445
457
|
requirements: []
|