license_finder 2.1.2 → 3.0.0
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/.gitignore +1 -0
- data/CHANGELOG.md +29 -0
- data/CONTRIBUTING.md +28 -3
- data/Dockerfile +82 -0
- data/README.md +11 -2
- data/Rakefile +27 -0
- data/appveyor.yml +21 -0
- data/bin/license_finder_pip.py +1 -1
- data/ci/pipelines/pipeline.yml.erb +78 -0
- data/ci/scripts/test.sh +27 -0
- data/ci/tasks/build.yml +16 -0
- data/features/features/package_managers/gradle_spec.rb +6 -0
- data/features/features/package_managers/maven_spec.rb +9 -0
- data/features/features/report/diff_spec.rb +26 -23
- data/features/fixtures/alternate-build-file-gradle/build-alt.gradle +26 -0
- data/features/fixtures/alternate-build-file-gradle/settings.gradle +1 -0
- data/features/fixtures/file-based-libs-gradle/build.gradle +1 -1
- data/features/fixtures/gradle-wrapper/build.gradle +26 -0
- data/features/fixtures/gradle-wrapper/gradlew +3 -0
- data/features/fixtures/gradle-wrapper/gradlew.bat +1 -0
- data/features/fixtures/maven-wrapper/mvnw +3 -0
- data/features/fixtures/maven-wrapper/mvnw.cmd +7 -0
- data/features/fixtures/maven-wrapper/pom.xml +37 -0
- data/features/support/testing_dsl.rb +12 -5
- data/lib/license_finder/cli/base.rb +1 -0
- data/lib/license_finder/cli/main.rb +2 -1
- data/lib/license_finder/configuration.rb +6 -13
- data/lib/license_finder/core.rb +2 -1
- data/lib/license_finder/diff.rb +4 -4
- data/lib/license_finder/package.rb +5 -3
- data/lib/license_finder/package_delta.rb +2 -5
- data/lib/license_finder/package_managers/bower.rb +1 -1
- data/lib/license_finder/package_managers/bundler.rb +4 -4
- data/lib/license_finder/package_managers/go_dep.rb +21 -4
- data/lib/license_finder/package_managers/go_package.rb +2 -1
- data/lib/license_finder/package_managers/go_vendor.rb +21 -7
- data/lib/license_finder/package_managers/go_workspace.rb +18 -11
- data/lib/license_finder/package_managers/gradle.rb +42 -15
- data/lib/license_finder/package_managers/maven.rb +31 -17
- data/lib/license_finder/package_managers/maven_dependency_finder.rb +13 -0
- data/lib/license_finder/package_managers/maven_package.rb +6 -1
- data/lib/license_finder/package_managers/npm.rb +4 -4
- data/lib/license_finder/package_managers/rebar.rb +1 -1
- data/lib/license_finder/reports/csv_report.rb +5 -1
- data/lib/license_finder/reports/diff_report.rb +3 -7
- data/lib/license_finder/reports/text_report.rb +6 -1
- data/lib/license_finder/version.rb +1 -1
- data/license_finder.gemspec +6 -0
- data/spec/lib/license_finder/configuration_spec.rb +0 -8
- data/spec/lib/license_finder/core_spec.rb +2 -1
- data/spec/lib/license_finder/diff_spec.rb +50 -27
- data/spec/lib/license_finder/package_managers/bower_spec.rb +1 -1
- data/spec/lib/license_finder/package_managers/bundler_spec.rb +1 -1
- data/spec/lib/license_finder/package_managers/go_dep_spec.rb +14 -1
- data/spec/lib/license_finder/package_managers/go_vendor_spec.rb +23 -2
- data/spec/lib/license_finder/package_managers/go_workspace_spec.rb +23 -7
- data/spec/lib/license_finder/package_managers/gradle_spec.rb +55 -2
- data/spec/lib/license_finder/package_managers/maven_package_spec.rb +16 -3
- data/spec/lib/license_finder/package_managers/maven_spec.rb +56 -4
- data/spec/lib/license_finder/package_managers/merged_package_spec.rb +8 -4
- data/spec/lib/license_finder/package_spec.rb +4 -1
- data/spec/lib/license_finder/reports/csv_report_spec.rb +8 -0
- data/spec/lib/license_finder/reports/diff_report_spec.rb +5 -5
- data/spec/lib/license_finder/reports/text_report_spec.rb +5 -0
- metadata +218 -9
- data/.travis.yml +0 -37
- data/.travis/install_bower.sh +0 -5
- data/.travis/install_godep.sh +0 -6
- data/.travis/install_gradle.sh +0 -12
- data/.travis/install_rebar.sh +0 -14
@@ -19,11 +19,13 @@ module LicenseFinder
|
|
19
19
|
submodule.install_path =~ /#{repo_name(gp)}$/
|
20
20
|
}.first
|
21
21
|
if import_path then
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
22
|
+
dependency_info = {
|
23
|
+
'ImportPath' => repo_name(import_path),
|
24
|
+
'Homepage' => repo_name(import_path),
|
25
|
+
'InstallPath' => submodule.install_path,
|
26
|
+
'Rev' => submodule.revision
|
27
|
+
}
|
28
|
+
GoPackage.from_dependency(dependency_info, nil, @full_version)
|
27
29
|
end
|
28
30
|
end.compact
|
29
31
|
end
|
@@ -69,13 +71,18 @@ module LicenseFinder
|
|
69
71
|
# discovered that `go list' will print a warning and unfortunately exit
|
70
72
|
# with status code 1. Setting GOPATH to nil removes those warnings.
|
71
73
|
ENV['GOPATH'] = nil
|
72
|
-
val = capture('go list -f
|
74
|
+
val = capture('go list -f "{{join .Deps \"\n\"}}" ./...')
|
73
75
|
raise 'go list failed' unless val.last
|
74
|
-
# Select non-standard packages.
|
75
|
-
#
|
76
|
-
#
|
77
|
-
|
78
|
-
|
76
|
+
# Select non-standard packages. `go list std` returns the list of standard
|
77
|
+
# dependencies. We then filter those dependencies out of the full list of
|
78
|
+
# dependencies.
|
79
|
+
deps = val.first.split("\n")
|
80
|
+
capture('go list std').first.split("\n").each do |std|
|
81
|
+
deps.delete_if do |dep|
|
82
|
+
dep =~ /(\/|^)#{std}(\/|$)/
|
83
|
+
end
|
84
|
+
end
|
85
|
+
deps
|
79
86
|
end
|
80
87
|
end
|
81
88
|
|
@@ -1,39 +1,66 @@
|
|
1
1
|
require 'xmlsimple'
|
2
|
+
require 'with_env'
|
2
3
|
require_relative 'gradle_dependency_finder'
|
3
4
|
|
4
5
|
module LicenseFinder
|
5
6
|
class Gradle < PackageManager
|
6
7
|
def initialize(options={})
|
7
8
|
super
|
8
|
-
@command = options[:gradle_command] ||
|
9
|
+
@command = options[:gradle_command] || package_management_command
|
9
10
|
@include_groups = options[:gradle_include_groups]
|
10
11
|
end
|
11
12
|
|
12
13
|
def current_packages
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
14
|
+
WithEnv.with_env({"TERM" => "dumb"}) do
|
15
|
+
command = "#{@command} downloadLicenses"
|
16
|
+
output, success = Dir.chdir(project_path) { capture(command) }
|
17
|
+
raise "Command '#{command}' failed to execute: #{output}" unless success
|
18
|
+
|
19
|
+
dependencies = GradleDependencyFinder.new(project_path).dependencies
|
20
|
+
packages = dependencies.flat_map do |xml_file|
|
21
|
+
options = {'GroupTags' => {'dependencies' => 'dependency'}}
|
22
|
+
contents = XmlSimple.xml_in(xml_file, options).fetch('dependency', [])
|
23
|
+
contents.map do |dep|
|
24
|
+
GradlePackage.new(dep, logger: logger, include_groups: @include_groups)
|
25
|
+
end
|
23
26
|
end
|
27
|
+
packages.uniq
|
24
28
|
end
|
25
|
-
|
26
|
-
packages.uniq
|
27
29
|
end
|
28
30
|
|
29
|
-
def
|
30
|
-
|
31
|
+
def package_management_command
|
32
|
+
if Platform.windows?
|
33
|
+
wrapper = 'gradlew.bat'
|
34
|
+
gradle = 'gradle.bat'
|
35
|
+
else
|
36
|
+
wrapper = './gradlew'
|
37
|
+
gradle = 'gradle'
|
38
|
+
end
|
39
|
+
|
40
|
+
File.exist?(File.join(project_path, wrapper)) ? wrapper : gradle
|
31
41
|
end
|
32
42
|
|
33
43
|
private
|
34
44
|
|
35
45
|
def package_path
|
46
|
+
alternate_build_file = build_file_from_settings(project_path)
|
47
|
+
return alternate_build_file if alternate_build_file
|
48
|
+
|
36
49
|
project_path.join('build.gradle')
|
37
50
|
end
|
51
|
+
|
52
|
+
def build_file_from_settings(project_path)
|
53
|
+
settings_gradle_path = project_path.join 'settings.gradle'
|
54
|
+
|
55
|
+
return nil unless File.exists? settings_gradle_path
|
56
|
+
|
57
|
+
settings_gradle = File.read settings_gradle_path
|
58
|
+
|
59
|
+
match = /rootProject.buildFileName = ['"](?<build_file>.*)['"]/.match settings_gradle
|
60
|
+
|
61
|
+
return nil unless match
|
62
|
+
|
63
|
+
return project_path.join match[:build_file]
|
64
|
+
end
|
38
65
|
end
|
39
66
|
end
|
@@ -1,35 +1,49 @@
|
|
1
1
|
require "xmlsimple"
|
2
|
+
require_relative "maven_dependency_finder"
|
2
3
|
|
3
4
|
module LicenseFinder
|
4
5
|
class Maven < PackageManager
|
6
|
+
def initialize(options={})
|
7
|
+
super
|
8
|
+
@ignored_groups = options[:ignored_groups]
|
9
|
+
@include_groups = options[:maven_include_groups]
|
10
|
+
end
|
11
|
+
|
5
12
|
def current_packages
|
6
|
-
command =
|
13
|
+
command = "#{package_management_command} org.codehaus.mojo:license-maven-plugin:download-licenses"
|
14
|
+
command += " -Dlicense.excludedScopes=#{@ignored_groups.to_a.join(',')}" if @ignored_groups and !@ignored_groups.empty?
|
15
|
+
|
7
16
|
output, success = Dir.chdir(project_path) { capture(command) }
|
8
17
|
raise "Command '#{command}' failed to execute: #{output}" unless success
|
9
18
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
19
|
+
dependencies = MavenDependencyFinder.new(project_path).dependencies
|
20
|
+
packages = dependencies.flat_map do |xml|
|
21
|
+
options = {
|
22
|
+
'GroupTags' => { 'licenses' => 'license', 'dependencies' => 'dependency' },
|
23
|
+
'ForceArray' => ['license', 'dependency']
|
24
|
+
}
|
25
|
+
contents = XmlSimple.xml_in(xml, options)["dependencies"]
|
26
|
+
contents.map do |dep|
|
27
|
+
MavenPackage.new(dep, logger: logger, include_groups: @include_groups)
|
28
|
+
end
|
20
29
|
end
|
30
|
+
packages.uniq
|
21
31
|
end
|
22
32
|
|
23
|
-
def
|
24
|
-
|
33
|
+
def package_management_command
|
34
|
+
if Platform.windows?
|
35
|
+
wrapper = 'mvnw.cmd'
|
36
|
+
maven = 'mvn'
|
37
|
+
else
|
38
|
+
wrapper = './mvnw'
|
39
|
+
maven = 'mvn'
|
40
|
+
end
|
41
|
+
|
42
|
+
File.exist?(File.join(project_path, wrapper)) ? wrapper : maven
|
25
43
|
end
|
26
44
|
|
27
45
|
private
|
28
46
|
|
29
|
-
def license_report
|
30
|
-
project_path.join('target/generated-resources/licenses.xml')
|
31
|
-
end
|
32
|
-
|
33
47
|
def package_path
|
34
48
|
project_path.join('pom.xml')
|
35
49
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module LicenseFinder
|
2
|
+
class MavenDependencyFinder
|
3
|
+
def initialize(project_path)
|
4
|
+
@project_path = project_path
|
5
|
+
end
|
6
|
+
|
7
|
+
def dependencies
|
8
|
+
Pathname
|
9
|
+
.glob(@project_path.join('**', 'target', 'generated-resources', 'licenses.xml'))
|
10
|
+
.map(&:read)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -1,8 +1,13 @@
|
|
1
1
|
module LicenseFinder
|
2
2
|
class MavenPackage < Package
|
3
3
|
def initialize(spec, options={})
|
4
|
+
name = spec['artifactId']
|
5
|
+
if options[:include_groups]
|
6
|
+
name = "#{spec['groupId']}:#{name}"
|
7
|
+
end
|
8
|
+
|
4
9
|
super(
|
5
|
-
|
10
|
+
name,
|
6
11
|
spec["version"],
|
7
12
|
options.merge(
|
8
13
|
spec_licenses: Array(spec["licenses"]).map { |l| l["name"] }
|
@@ -29,7 +29,7 @@ module LicenseFinder
|
|
29
29
|
private
|
30
30
|
|
31
31
|
def direct_dependencies
|
32
|
-
package_json = JSON.parse(File.read(package_path))
|
32
|
+
package_json = JSON.parse(File.read(package_path), :max_nesting => false)
|
33
33
|
DEPENDENCY_GROUPS.map do |group|
|
34
34
|
package_json.fetch(group, {}).keys.map do |dependency|
|
35
35
|
{
|
@@ -51,14 +51,14 @@ module LicenseFinder
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def npm_json
|
54
|
-
command =
|
54
|
+
command = "#{NPM::package_management_command} list --json --long"
|
55
55
|
output, success = Dir.chdir(project_path) { capture(command) }
|
56
56
|
|
57
57
|
if success
|
58
|
-
json = JSON(output)
|
58
|
+
json = JSON(output, :max_nesting => false)
|
59
59
|
else
|
60
60
|
json = begin
|
61
|
-
JSON(output)
|
61
|
+
JSON(output, :max_nesting => false)
|
62
62
|
rescue JSON::ParserError
|
63
63
|
nil
|
64
64
|
end
|
@@ -2,7 +2,7 @@ module LicenseFinder
|
|
2
2
|
class Rebar < PackageManager
|
3
3
|
def initialize(options={})
|
4
4
|
super
|
5
|
-
@command = options[:rebar_command] ||
|
5
|
+
@command = options[:rebar_command] || Rebar::package_management_command
|
6
6
|
@deps_path = Pathname(options[:rebar_deps_dir] || "deps")
|
7
7
|
end
|
8
8
|
|
@@ -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 install_path package_manager groups]
|
6
|
+
AVAILABLE_COLUMNS = %w[name version authors licenses license_links approved summary description homepage install_path package_manager groups]
|
7
7
|
MISSING_DEPENDENCY_TEXT = "This package is not installed. Please install to determine licenses."
|
8
8
|
|
9
9
|
def initialize(dependencies, options)
|
@@ -51,6 +51,10 @@ module LicenseFinder
|
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
|
+
def format_license_links(dep)
|
55
|
+
dep.licenses.map(&:url).join(self.class::COMMA_SEP)
|
56
|
+
end
|
57
|
+
|
54
58
|
def format_approved(dep)
|
55
59
|
dep.approved? ? "Approved" : "Not approved"
|
56
60
|
end
|
@@ -10,12 +10,8 @@ module LicenseFinder
|
|
10
10
|
dep.status
|
11
11
|
end
|
12
12
|
|
13
|
-
def
|
14
|
-
dep.
|
15
|
-
end
|
16
|
-
|
17
|
-
def format_previous_version(dep)
|
18
|
-
dep.previous_version
|
13
|
+
def format_version(dep)
|
14
|
+
dep.version
|
19
15
|
end
|
20
16
|
|
21
17
|
def format_project_paths(dep)
|
@@ -25,7 +21,7 @@ module LicenseFinder
|
|
25
21
|
private
|
26
22
|
|
27
23
|
def build_columns(dependencies)
|
28
|
-
columns = %w[status name
|
24
|
+
columns = %w[status name version licenses]
|
29
25
|
columns << 'project_paths' if dependencies.all? { |delta| delta.merged_package? }
|
30
26
|
columns
|
31
27
|
end
|
@@ -3,7 +3,12 @@ module LicenseFinder
|
|
3
3
|
COMMA_SEP = ", "
|
4
4
|
|
5
5
|
def initialize(dependencies, options={})
|
6
|
-
super(dependencies, options
|
6
|
+
super(dependencies, options)
|
7
|
+
|
8
|
+
default_columns = %w[name version licenses]
|
9
|
+
if @columns.empty?
|
10
|
+
@columns = default_columns
|
11
|
+
end
|
7
12
|
end
|
8
13
|
end
|
9
14
|
end
|
data/license_finder.gemspec
CHANGED
@@ -43,6 +43,8 @@ Gem::Specification.new do |s|
|
|
43
43
|
s.add_dependency "httparty"
|
44
44
|
s.add_dependency "xml-simple"
|
45
45
|
s.add_dependency "rubyzip"
|
46
|
+
# to preserve ruby 1.9.3 support
|
47
|
+
s.add_dependency 'with_env', ((RUBY_VERSION <= '1.9.3') ? '1.0.0' : '> 1.0')
|
46
48
|
|
47
49
|
s.add_development_dependency "capybara", "~> 2.0.0"
|
48
50
|
s.add_development_dependency "cocoapods", "0.34.0" if LicenseFinder::Platform.darwin?
|
@@ -53,8 +55,12 @@ Gem::Specification.new do |s|
|
|
53
55
|
s.add_development_dependency "rspec-its"
|
54
56
|
s.add_development_dependency "webmock", "~> 1.13"
|
55
57
|
|
58
|
+
# to preserve ruby < 2.2.2 support.
|
59
|
+
s.add_development_dependency 'rack', ((RUBY_VERSION < '2.2.2') ? '1.6.0' : '> 1.6')
|
60
|
+
|
56
61
|
# temporary to preserve ruby 1.9.3 support.
|
57
62
|
s.add_development_dependency "mime-types", "< 3.0"
|
63
|
+
s.add_development_dependency "addressable", "< 2.5.0"
|
58
64
|
|
59
65
|
s.files = `git ls-files`.split("\n")
|
60
66
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
@@ -47,14 +47,6 @@ module LicenseFinder
|
|
47
47
|
)
|
48
48
|
expect(subject.gradle_command).to eq "secondary"
|
49
49
|
end
|
50
|
-
|
51
|
-
it "has default" do
|
52
|
-
subject = described_class.new(
|
53
|
-
{gradle_command: nil},
|
54
|
-
{"gradle_command" => nil}
|
55
|
-
)
|
56
|
-
expect(subject.gradle_command).to eq "gradle --console plain"
|
57
|
-
end
|
58
50
|
end
|
59
51
|
|
60
52
|
describe "decisions_file" do
|
@@ -26,10 +26,11 @@ module LicenseFinder
|
|
26
26
|
{
|
27
27
|
logger: logger,
|
28
28
|
project_path: configuration.project_path,
|
29
|
-
|
29
|
+
ignored_groups: Set.new,
|
30
30
|
go_full_version: nil,
|
31
31
|
gradle_command: configuration.gradle_command,
|
32
32
|
gradle_include_groups: nil,
|
33
|
+
maven_include_groups: nil,
|
33
34
|
rebar_command: configuration.rebar_command,
|
34
35
|
rebar_deps_dir: configuration.rebar_deps_dir
|
35
36
|
}
|
@@ -6,8 +6,8 @@ module LicenseFinder
|
|
6
6
|
|
7
7
|
let(:diff) { subject.compare(file1_content, file2_content) }
|
8
8
|
|
9
|
-
def
|
10
|
-
diff.
|
9
|
+
def find_package_with_name(name)
|
10
|
+
diff.find_all { |d| d.name == name }
|
11
11
|
end
|
12
12
|
|
13
13
|
describe '#compare' do
|
@@ -16,7 +16,7 @@ module LicenseFinder
|
|
16
16
|
let(:file2_content) { "nokogiri,1.6.6.2,MIT\nrspec,3.2.0,MIT" }
|
17
17
|
|
18
18
|
it 'should create and set packages with added diff state' do
|
19
|
-
rspec =
|
19
|
+
rspec = find_package_with_name('rspec')[0]
|
20
20
|
expect(rspec.status).to eq :added
|
21
21
|
end
|
22
22
|
end
|
@@ -26,7 +26,7 @@ module LicenseFinder
|
|
26
26
|
let(:file2_content) { "nokogiri,1.6.6.2,MIT" }
|
27
27
|
|
28
28
|
it 'should create and set packages with removed diff state' do
|
29
|
-
rspec =
|
29
|
+
rspec = find_package_with_name('rspec')[0]
|
30
30
|
expect(rspec.status).to eq :removed
|
31
31
|
end
|
32
32
|
end
|
@@ -36,7 +36,7 @@ module LicenseFinder
|
|
36
36
|
let(:file2_content) { "nokogiri,1.6.6.2,MIT" }
|
37
37
|
|
38
38
|
it 'should create and set packages with unchanged diff state' do
|
39
|
-
nokogiri =
|
39
|
+
nokogiri = find_package_with_name('nokogiri')[0]
|
40
40
|
expect(nokogiri.status).to eq :unchanged
|
41
41
|
end
|
42
42
|
end
|
@@ -46,9 +46,9 @@ module LicenseFinder
|
|
46
46
|
let(:file2_content) { "nokogiri,1.6.6.2,MIT\nminitest,5.7.0,MIT\nfakefs,0.6.7,BSD" }
|
47
47
|
|
48
48
|
it 'should create and set packages diff states' do
|
49
|
-
expect(
|
50
|
-
expect(
|
51
|
-
expect(
|
49
|
+
expect(find_package_with_name('minitest')[0].status).to eq :added
|
50
|
+
expect(find_package_with_name('rspec')[0].status).to eq :removed
|
51
|
+
expect(find_package_with_name('nokogiri')[0].status).to eq :unchanged
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
@@ -56,12 +56,37 @@ module LicenseFinder
|
|
56
56
|
let(:file1_content) { "rspec,3.2.0,MIT" }
|
57
57
|
let(:file2_content) { "rspec,3.3.0,MIT" }
|
58
58
|
|
59
|
-
it 'should
|
60
|
-
|
59
|
+
it 'should add the new version and remove the previous version' do
|
60
|
+
rspecs = find_package_with_name('rspec')
|
61
|
+
expect(rspecs.size).to eq(2)
|
62
|
+
rspecs.each do |rspec|
|
63
|
+
case rspec.status
|
64
|
+
when :removed
|
65
|
+
expect(rspec.version).to eq('3.2.0')
|
66
|
+
when :added
|
67
|
+
expect(rspec.version).to eq('3.3.0')
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
61
71
|
|
62
|
-
|
63
|
-
|
64
|
-
|
72
|
+
context 'when there are two versions of the same dependency' do
|
73
|
+
let(:file1_content) { "rspec,3.2.0,MIT\nrspec,1.1.0,MIT\nnokogiri,1.6.6.2,MIT" }
|
74
|
+
let(:file2_content) { "rspec,3.3.0,MIT\nrspec,1.1.0,MIT\nnokogiri,1.6.6.2,MIT" }
|
75
|
+
it 'should identify which version was updated' do
|
76
|
+
rspecs = find_package_with_name('rspec')
|
77
|
+
expect(rspecs.size).to eq(3)
|
78
|
+
rspecs.each do |rspec|
|
79
|
+
case rspec.status
|
80
|
+
when :removed
|
81
|
+
expect(rspec.version).to eq('3.2.0')
|
82
|
+
when :added
|
83
|
+
expect(rspec.version).to eq('3.3.0')
|
84
|
+
else
|
85
|
+
expect(rspec.status).to eq(:unchanged)
|
86
|
+
expect(rspec.version).to eq('1.1.0')
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
65
90
|
end
|
66
91
|
end
|
67
92
|
|
@@ -70,16 +95,14 @@ module LicenseFinder
|
|
70
95
|
let(:file2_content) { "rspec,3.3.0,GPLv2" }
|
71
96
|
|
72
97
|
it 'should set the state to unchanged and record the version change' do
|
73
|
-
rspec_old = diff.find {|p| p.
|
74
|
-
rspec_new = diff.find {|p| p.
|
98
|
+
rspec_old = diff.find {|p| p.version == '3.2.0'}
|
99
|
+
rspec_new = diff.find {|p| p.version == '3.3.0'}
|
75
100
|
|
76
101
|
expect(rspec_old.status).to eq(:removed)
|
77
|
-
expect(rspec_old.
|
78
|
-
expect(rspec_old.previous_version).to eq('3.2.0')
|
102
|
+
expect(rspec_old.version).to eq('3.2.0')
|
79
103
|
|
80
104
|
expect(rspec_new.status).to eq(:added)
|
81
|
-
expect(rspec_new.
|
82
|
-
expect(rspec_new.previous_version).to eq(nil)
|
105
|
+
expect(rspec_new.version).to eq('3.3.0')
|
83
106
|
end
|
84
107
|
end
|
85
108
|
|
@@ -88,17 +111,17 @@ module LicenseFinder
|
|
88
111
|
let(:file2_content) { "rspec,3.2.0,MIT,\"/path/to/project1,/path/to/project2\"\nrails,4.2.0,MIT,/path/to/project1" }
|
89
112
|
|
90
113
|
it 'should show the diff of the reports' do
|
91
|
-
rspec =
|
114
|
+
rspec = find_package_with_name('rspec')[0]
|
92
115
|
expect(rspec.status).to eq(:unchanged)
|
93
|
-
expect(rspec.
|
94
|
-
|
95
|
-
expect(rspec.subproject_paths).to match_array(
|
116
|
+
expect(rspec.version).to eq('3.2.0')
|
117
|
+
paths = ['/path/to/project1', '/path/to/project2'].map { |p| File.absolute_path(p) }
|
118
|
+
expect(rspec.subproject_paths).to match_array(paths)
|
96
119
|
|
97
|
-
rails =
|
120
|
+
rails = find_package_with_name('rails')[0]
|
98
121
|
expect(rails.status).to eq(:added)
|
99
|
-
expect(rails.
|
100
|
-
|
101
|
-
expect(rails.subproject_paths).to match_array(
|
122
|
+
expect(rails.version).to eq('4.2.0')
|
123
|
+
paths = ['/path/to/project1'].map { |p| File.absolute_path(p) }
|
124
|
+
expect(rails.subproject_paths).to match_array(paths)
|
102
125
|
end
|
103
126
|
end
|
104
127
|
end
|