license_finder 5.5.2 → 5.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8b3e60f771b7ea17a43da24443ac40c0b24c1444d668aa5783f342dcd7c03f2c
4
- data.tar.gz: 4fb2305add20d2af539714e949acb0a4d0025c148a18a1bbd0fd7e1d63b7af5d
3
+ metadata.gz: 6265bc6c40071582ff338579c90cef91431722b4eb3f8926ed99b8e95b651cd0
4
+ data.tar.gz: c9a797ef497cabb668299216bd332848f991539bee726afedd7e0abcbf897318
5
5
  SHA512:
6
- metadata.gz: a3cd9fb22c3b3ec5dd6203c81d6b77f70dbdcbd691e7408c24bad5e89d47dc3a2ba25aa5c96e3025425a63d4a7a94bc12dcc5229d924b56e92a7e34e4e629a6d
7
- data.tar.gz: 3b5e854bd9c1b1c8dd041fe233e5217c2436d26e02ad295486b3ba166c0996732d4266923797ae0d756f33036f0ebd9e2f656e518adfaad092aa0321b3ac76f9
6
+ metadata.gz: 0bbc661bf9b969a3e5deacde655e948877424baa2c602198740b35f9bbf3785392310012ab1a62229ba3012612a46ba47e6078e63701961d48cd0b9e98e29a69
7
+ data.tar.gz: b1c6470777caa3adc876c16d04344d97b07356309e1ae6245b15800f8dbdc6d466bd7bbfd1be58106ca5a5071dc06bd1d4cc878d09b9c47229da9e90b067a76e
data/CONTRIBUTING.md CHANGED
@@ -89,6 +89,8 @@ To successfully run the test suite, you will need the following installed:
89
89
  - Carthage (requires homebrew)
90
90
  - Mix (requires Elixir)
91
91
  - Conan
92
+ - NuGet
93
+ - dotnet
92
94
 
93
95
  The [LicenseFinder docker image](https://hub.docker.com/r/licensefinder/license_finder/) already contains these dependencies.
94
96
 
data/Dockerfile CHANGED
@@ -2,10 +2,10 @@ FROM ubuntu:xenial
2
2
 
3
3
  # Versioning
4
4
  ENV PIP_INSTALL_VERSION 10.0.1
5
- ENV GO_LANG_VERSION 1.11
5
+ ENV GO_LANG_VERSION 1.11.2
6
6
  ENV MAVEN_VERSION 3.5.3
7
7
  ENV SBT_VERSION 1.1.1
8
- ENV GRADLE_VERSION 4.2
8
+ ENV GRADLE_VERSION 4.10
9
9
  ENV RUBY_VERSION 2.5.1
10
10
  ENV MIX_VERSION 1.0
11
11
 
@@ -35,10 +35,10 @@ RUN npm install -g bower && \
35
35
  #install java 8
36
36
  #http://askubuntu.com/questions/521145/how-to-install-oracle-java-on-ubuntu-14-04
37
37
  RUN cd /tmp && \
38
- wget --quiet --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u191-b12/2787e4a523244c269598db4e85c51e0c/jdk-8u191-linux-x64.tar.gz -O jdk-8.tgz && \
38
+ wget --quiet --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u192-b12/750e1c8617c5452694857ad95c3ee230/jdk-8u192-linux-x64.tar.gz -O jdk-8.tgz && \
39
39
  tar xf /tmp/jdk-8.tgz && \
40
40
  mkdir -p /usr/lib/jvm && \
41
- mv jdk1.8.0_191 /usr/lib/jvm/oracle_jdk8 && \
41
+ mv jdk1.8.0_192 /usr/lib/jvm/oracle_jdk8 && \
42
42
  rm /tmp/jdk-8.tgz
43
43
 
44
44
  ENV J2SDKDIR=/usr/lib/jvm/oracle_jdk8
@@ -106,7 +106,8 @@ ENV LANGUAGE=en_US:en
106
106
  ENV LC_ALL=en_US.UTF-8
107
107
 
108
108
  #install rvm
109
- RUN curl -sSL https://rvm.io/mpapis.asc | gpg --import && \
109
+ RUN gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB && \
110
+ curl -sSL https://rvm.io/mpapis.asc | gpg --import && \
110
111
  curl -sSL https://get.rvm.io | sudo bash -s stable --ruby=$RUBY_VERSION
111
112
  ENV PATH=/usr/local/rvm/bin:$PATH
112
113
 
@@ -138,6 +139,12 @@ RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E03280
138
139
  curl -o /usr/local/bin/nuget.exe https://dist.nuget.org/win-x86-commandline/latest/nuget.exe &&\
139
140
  echo "alias nuget=\"mono /usr/local/bin/nuget.exe\"" >> ~/.bash_aliases
140
141
 
142
+ # install dotnet core
143
+ RUN wget -q https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb &&\
144
+ sudo dpkg -i packages-microsoft-prod.deb &&\
145
+ sudo apt-get update &&\
146
+ sudo apt-get install -y dotnet-runtime-2.1
147
+
141
148
  # install license_finder
142
149
  COPY . /LicenseFinder
143
150
  RUN bash -lc "cd /LicenseFinder && bundle install -j4 && rake install"
data/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  [![Code Climate](https://codeclimate.com/github/pivotal-legacy/LicenseFinder.png)](https://codeclimate.com/github/pivotal-legacy/LicenseFinder)
4
4
 
5
5
  Build status
6
- * Ruby 2.3.7 [![Ruby 2.3.7 build status](https://norsk.cf-app.com/api/v1/teams/main/pipelines/LicenseFinder/jobs/ruby-2.3.7/badge)](https://norsk.cf-app.com/teams/main/pipelines/LicenseFinder)
6
+ * Ruby 2.3.3 [![Ruby 2.3.3 build status](https://norsk.cf-app.com/api/v1/teams/main/pipelines/LicenseFinder/jobs/ruby-2.3.3/badge)](https://norsk.cf-app.com/teams/main/pipelines/LicenseFinder)
7
7
  * Ruby 2.4.4 [![Ruby 2.4.4 build status](https://norsk.cf-app.com/api/v1/teams/main/pipelines/LicenseFinder/jobs/ruby-2.4.4/badge)](https://norsk.cf-app.com/teams/main/pipelines/LicenseFinder)
8
8
  * Ruby 2.5.1 [![Ruby 2.5.1 build status](https://norsk.cf-app.com/api/v1/teams/main/pipelines/LicenseFinder/jobs/ruby-2.5.1/badge)](https://norsk.cf-app.com/teams/main/pipelines/LicenseFinder)
9
9
  * JRuby 9.1.17.0 [![JRuby 9.1.17.0 build status](https://norsk.cf-app.com/api/v1/teams/main/pipelines/LicenseFinder/jobs/ruby-jruby-9.1.17.0/badge)](https://norsk.cf-app.com/teams/main/pipelines/LicenseFinder)
@@ -54,7 +54,7 @@ report.
54
54
 
55
55
  ## Installation
56
56
 
57
- License Finder requires Ruby 1.9.3 or greater to run. If you have an older
57
+ License Finder requires Ruby 2.3.3 or greater to run. If you have an older
58
58
  version of Ruby installed, you can update via Homebrew:
59
59
 
60
60
  ```sh
data/Rakefile CHANGED
@@ -6,33 +6,42 @@ Bundler::GemHelper.install_tasks
6
6
  require './lib/license_finder/platform'
7
7
  require 'rspec/core/rake_task'
8
8
 
9
- desc 'Run all specs in spec/'
10
- task :spec do
11
- RSpec::Core::RakeTask.new(:spec) do |t|
9
+ namespace :spec do
10
+ desc 'Run test tagged \'focus\''
11
+ RSpec::Core::RakeTask.new(:focus) do |t|
12
12
  t.fail_on_error = true
13
13
  t.pattern = './spec/**/*_spec.rb'
14
- t.rspec_opts = %w[--color]
14
+ t.rspec_opts = %w[--color --tag focus]
15
15
  end
16
16
  end
17
17
 
18
- desc 'Only run cocoapods specs'
19
- RSpec::Core::RakeTask.new('spec:cocoapods') do |t|
18
+ desc 'Run all specs in spec/'
19
+ RSpec::Core::RakeTask.new(:spec) do |t|
20
20
  t.fail_on_error = true
21
- t.pattern = './spec/lib/license_finder/package_managers/cocoa_pods_*spec.rb'
21
+ t.pattern = './spec/**/*_spec.rb'
22
22
  t.rspec_opts = %w[--color]
23
23
  end
24
24
 
25
- desc 'Run all specs in features/'
26
- task :features do
27
- RSpec::Core::RakeTask.new(:features) do |t|
25
+ namespace :features do
26
+ desc 'Run test tagged \'focus\''
27
+ RSpec::Core::RakeTask.new(:focus) do |t|
28
28
  t.fail_on_error = true
29
29
  t.pattern = './features/**/*_spec.rb'
30
- opts = %w[--color --format d]
30
+ opts = %w[--color --format d --tag focus]
31
31
  opts += LicenseFinder::Platform.darwin? ? [] : %w[--tag ~ios]
32
32
  t.rspec_opts = opts
33
33
  end
34
34
  end
35
35
 
36
+ desc 'Run all specs in features/'
37
+ RSpec::Core::RakeTask.new(:features) do |t|
38
+ t.fail_on_error = true
39
+ t.pattern = './features/**/*_spec.rb'
40
+ opts = %w[--color --format d]
41
+ opts += LicenseFinder::Platform.darwin? ? [] : %w[--tag ~ios]
42
+ t.rspec_opts = opts
43
+ end
44
+
36
45
  desc 'Check for non-Ruby development dependencies.'
37
46
  task :check_dependencies do
38
47
  require './lib/license_finder'
@@ -54,7 +63,7 @@ task :update_pipeline, [:slack_url, :slack_channel] do |_, args|
54
63
  puts 'Warning: You should provide slack channel and url to receive slack notifications on build failures'
55
64
  end
56
65
 
57
- ruby_versions = %w[2.5.1 2.4.4 2.3.7 jruby-9.1.17.0 jruby-9.2.0.0]
66
+ ruby_versions = %w[2.5.1 2.4.4 2.3.3 jruby-9.1.17.0 jruby-9.2.0.0]
58
67
 
59
68
  params = []
60
69
  params << "ruby_versions=#{ruby_versions.join(',')}"
@@ -77,7 +86,8 @@ task :update_release_pipeline do
77
86
  system(cmd)
78
87
  end
79
88
 
89
+ task default: %i[spec features]
80
90
  task spec: :check_dependencies
81
91
  task features: :check_dependencies
82
-
83
- task default: %i[spec features]
92
+ task 'spec:focus': :check_dependencies
93
+ task 'features:focus': :check_dependencies
@@ -16,7 +16,9 @@ module LicenseFinder
16
16
  'text' => TextReport,
17
17
  'html' => HtmlReport,
18
18
  'markdown' => MarkdownReport,
19
- 'csv' => CsvReport
19
+ 'csv' => CsvReport,
20
+ 'xml' => XmlReport,
21
+ 'json' => JsonReport
20
22
  }.freeze
21
23
 
22
24
  class_option :go_full_version, desc: 'Whether dependency version should include full version. Only meaningful if used with a Go project. Defaults to false.'
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'license_finder/package_utils/licensing'
4
4
  require 'license_finder/package_utils/license_files'
5
+ require 'license_finder/package_utils/notice_files'
5
6
 
6
7
  module LicenseFinder
7
8
  # Super-class that adapts data from different package management
@@ -149,6 +150,10 @@ module LicenseFinder
149
150
  LicenseFiles.find(install_path, logger: logger)
150
151
  end
151
152
 
153
+ def notice_files
154
+ NoticeFiles.find(install_path, logger: logger)
155
+ end
156
+
152
157
  def package_manager
153
158
  'unknown'
154
159
  end
@@ -80,7 +80,10 @@ module LicenseFinder
80
80
  _stdout, stderr, status = Dir.chdir(project_path) { Cmd.run(self.class.prepare_command) }
81
81
  unless status.success?
82
82
  log_errors stderr
83
- raise "Prepare command '#{self.class.prepare_command}' failed" unless @prepare_no_fail
83
+
84
+ error_message = "Prepare command '#{self.class.prepare_command}' failed\n#{stderr}"
85
+
86
+ raise error_message unless @prepare_no_fail
84
87
  end
85
88
  else
86
89
  logger.debug self.class, 'no prepare step provided', color: :red
@@ -117,7 +120,11 @@ module LicenseFinder
117
120
 
118
121
  def log_to_file(contents)
119
122
  FileUtils.mkdir_p @log_directory
120
- log_file = File.join(@log_directory, "prepare_#{self.class.package_management_command || 'errors'}.log")
123
+
124
+ # replace whitespace with underscores and remove slashes
125
+ log_file_name = self.class.package_management_command&.gsub(/\s/, '_')&.gsub(%r{/}, '')
126
+ log_file = File.join(@log_directory, "prepare_#{log_file_name || 'errors'}.log")
127
+
121
128
  File.open(log_file, 'w') do |f|
122
129
  f.write("Prepare command \"#{self.class.prepare_command}\" failed with:\n")
123
130
  f.write("#{contents}\n\n")
@@ -145,6 +152,7 @@ require 'license_finder/package_managers/carthage'
145
152
  require 'license_finder/package_managers/gradle'
146
153
  require 'license_finder/package_managers/rebar'
147
154
  require 'license_finder/package_managers/nuget'
155
+ require 'license_finder/package_managers/dotnet'
148
156
  require 'license_finder/package_managers/dep'
149
157
  require 'license_finder/package_managers/conan'
150
158
  require 'license_finder/package_managers/sbt'
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'pathname'
4
+ require 'json'
5
+
6
+ module LicenseFinder
7
+ class Dotnet < PackageManager
8
+ class AssetFile
9
+ def initialize(path)
10
+ @manifest = JSON.parse(File.read(path))
11
+ end
12
+
13
+ def dependencies
14
+ libs = @manifest.fetch('libraries').reject do |_, v|
15
+ v.fetch('type') == 'project'
16
+ end
17
+
18
+ libs.keys.map do |name|
19
+ parts = name.split('/')
20
+ PackageMetadata.new(parts[0], parts[1], possible_spec_paths(name))
21
+ end
22
+ end
23
+
24
+ def possible_spec_paths(package_key)
25
+ lib = @manifest.fetch('libraries').fetch(package_key)
26
+ spec_filename = lib.fetch('files').find { |f| f.end_with?('.nuspec') }
27
+ return [] if spec_filename.nil?
28
+
29
+ @manifest.fetch('packageFolders').keys.map do |root|
30
+ Pathname(root).join(lib.fetch('path'), spec_filename).to_s
31
+ end
32
+ end
33
+ end
34
+
35
+ class PackageMetadata
36
+ attr_reader :name, :version, :possible_spec_paths
37
+
38
+ def initialize(name, version, possible_spec_paths)
39
+ @name = name
40
+ @version = version
41
+ @possible_spec_paths = possible_spec_paths
42
+ end
43
+
44
+ def read_license_urls
45
+ possible_spec_paths.flat_map do |path|
46
+ Nuget.nuspec_license_urls(File.read(path)) if File.exist? path
47
+ end.compact
48
+ end
49
+
50
+ def ==(other)
51
+ other.name == name && other.version == version && other.possible_spec_paths == possible_spec_paths
52
+ end
53
+ end
54
+
55
+ def possible_package_paths
56
+ paths = Dir[project_path.join('**/*.csproj')]
57
+ paths.map { |p| Pathname(p) }
58
+ end
59
+
60
+ def current_packages
61
+ package_metadatas = asset_files
62
+ .flat_map { |path| AssetFile.new(path).dependencies }
63
+ .uniq { |d| [d.name, d.version] }
64
+
65
+ package_metadatas.map do |d|
66
+ NugetPackage.new(d.name, d.version, spec_licenses: d.read_license_urls)
67
+ end
68
+ end
69
+
70
+ def asset_files
71
+ Dir[project_path.join('**/project.assets.json')]
72
+ end
73
+
74
+ def self.package_management_command
75
+ 'dotnet'
76
+ end
77
+
78
+ def self.prepare_command
79
+ "#{package_management_command} restore"
80
+ end
81
+ end
82
+ end
@@ -21,9 +21,16 @@ module LicenseFinder
21
21
  end
22
22
 
23
23
  def current_packages
24
- sum_file_paths.uniq.map do |file_path|
25
- read_sum(file_path)
26
- end.flatten
24
+ info_output, _stderr, _status = Cmd.run("GO111MODULE=on go list -m -mod=vendor -f '{{.Path}},{{.Version}},{{.Dir}}' all")
25
+ packages_info = info_output.split("\n")
26
+ packages = packages_info.map do |package|
27
+ name, version, install_path = package.split(',')
28
+ read_package(install_path, name, version)
29
+ end
30
+ packages.reject do |package|
31
+ Pathname(package.install_path).cleanpath == Pathname(project_path).cleanpath
32
+ end
33
+ # binding.pry
27
34
  end
28
35
 
29
36
  private
@@ -36,20 +43,7 @@ module LicenseFinder
36
43
  Dir[project_path.join(PACKAGES_FILE)]
37
44
  end
38
45
 
39
- def read_sum(file_path)
40
- contents = File.read(file_path)
41
- contents.each_line.map do |line|
42
- line.include?('go.mod') ? nil : read_package(file_path, line)
43
- end.compact
44
- end
45
-
46
- def read_package(file_path, line)
47
- parts = line.split(' ')
48
- install_path = File.dirname(file_path)
49
-
50
- name = parts[0]
51
- version = parts[1]
52
-
46
+ def read_package(install_path, name, version)
53
47
  info = {
54
48
  'ImportPath' => name,
55
49
  'InstallPath' => install_path,
@@ -2,6 +2,9 @@
2
2
 
3
3
  require 'json'
4
4
  module LicenseFinder
5
+ class GoWorkspacePackageManagerError < ::StandardError
6
+ end
7
+
5
8
  class GoWorkspace < PackageManager
6
9
  Submodule = Struct.new :install_path, :revision
7
10
  ENVRC_REGEXP = /GOPATH|GO15VENDOREXPERIMENT/
@@ -77,9 +80,9 @@ module LicenseFinder
77
80
  # with status code 1. Setting GOPATH to nil removes those warnings.
78
81
  orig_gopath = ENV['GOPATH']
79
82
  ENV['GOPATH'] = nil
80
- val, _stderr, status = Cmd.run('go list -f "{{join .Deps \"\n\"}}" ./...')
83
+ val, stderr, status = Cmd.run('go list -f "{{join .Deps \"\n\"}}" ./...')
81
84
  ENV['GOPATH'] = orig_gopath
82
- raise 'go list failed' unless status.success?
85
+ raise GoWorkspacePackageManagerError, "go list failed:\n#{stderr}" unless status.success?
83
86
 
84
87
  # Select non-standard packages. `go list std` returns the list of standard
85
88
  # dependencies. We then filter those dependencies out of the full list of
@@ -48,6 +48,13 @@ module LicenseFinder
48
48
  alternate_build_file = build_file_from_settings(project_path)
49
49
  return alternate_build_file if alternate_build_file
50
50
 
51
+ build_gradle_file
52
+ end
53
+
54
+ def build_gradle_file
55
+ kotlin_gradle_path = project_path.join('build.gradle.kts')
56
+ return kotlin_gradle_path if File.exist? kotlin_gradle_path
57
+
51
58
  project_path.join('build.gradle')
52
59
  end
53
60
 
@@ -14,7 +14,7 @@ module LicenseFinder
14
14
  end
15
15
 
16
16
  def self.prepare_command
17
- 'npm install'
17
+ 'npm install --no-save'
18
18
  end
19
19
 
20
20
  def possible_package_paths
@@ -63,8 +63,7 @@ module LicenseFinder
63
63
  file = files.first
64
64
  Zip::File.open file do |zipfile|
65
65
  content = zipfile.read(dep.name + '.nuspec')
66
- xml = REXML::Document.new(content)
67
- REXML::XPath.match(xml, '//metadata//licenseUrl').map(&:get_text).map(&:to_s)
66
+ Nuget.nuspec_license_urls(content)
68
67
  end
69
68
  end
70
69
 
@@ -97,5 +96,12 @@ module LicenseFinder
97
96
 
98
97
  'which mono && ls /usr/local/bin/nuget.exe'
99
98
  end
99
+
100
+ def self.nuspec_license_urls(specfile_content)
101
+ xml = REXML::Document.new(specfile_content)
102
+ REXML::XPath.match(xml, '//metadata//licenseUrl')
103
+ .map(&:get_text)
104
+ .map(&:to_s)
105
+ end
100
106
  end
101
107
  end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'license_finder/package_utils/possible_license_file'
4
+
5
+ module LicenseFinder
6
+ class NoticeFiles
7
+ CANDIDATE_FILE_NAMES = %w[NOTICE Notice].freeze
8
+ CANDIDATE_PATH_WILDCARD = "*{#{CANDIDATE_FILE_NAMES.join(',')}}*"
9
+
10
+ def self.find(install_path, options = {})
11
+ new(install_path).find(options)
12
+ end
13
+
14
+ def initialize(install_path)
15
+ @install_path = install_path ? Pathname(install_path) : nil
16
+ end
17
+
18
+ def find(options = {})
19
+ paths_of_candidate_files
20
+ .map { |path| PossibleLicenseFile.new(path, options) } # Not really possible license files, but that class has all we need.
21
+ end
22
+
23
+ private
24
+
25
+ attr_reader :install_path
26
+
27
+ def paths_of_candidate_files
28
+ candidate_files_and_dirs
29
+ .flat_map { |path| path.directory? ? path.children : path }
30
+ .reject(&:directory?)
31
+ .uniq
32
+ end
33
+
34
+ def candidate_files_and_dirs
35
+ return [] if install_path.nil?
36
+
37
+ Pathname.glob(install_path.join('**', CANDIDATE_PATH_WILDCARD))
38
+ end
39
+ end
40
+ end
@@ -15,7 +15,7 @@ module LicenseFinder
15
15
  :groups, :whitelisted, :blacklisted, :manual_approval, :install_path, :licenses, :approved_manually?,
16
16
  :approved_manually!, :approved?, :whitelisted!, :whitelisted?, :blacklisted!, :blacklisted?, :hash,
17
17
  :activations, :missing, :license_names_from_spec, :decided_licenses, :licensing, :decide_on_license,
18
- :license_files, :package_manager, :missing?, :log_activation
18
+ :license_files, :package_manager, :missing?, :log_activation, :notice_files
19
19
 
20
20
  def aggregate_paths
21
21
  @aggregate_paths.map { |p| p.expand_path.to_s }
@@ -23,7 +23,6 @@ module LicenseFinder
23
23
  is_active_project = active_project?(potential_project_path)
24
24
  return unless is_active_project
25
25
 
26
- remove_nested(potential_project_path, all_paths)
27
26
  potential_project_path.to_s
28
27
  end
29
28
 
@@ -28,3 +28,5 @@ require 'license_finder/reports/diff_report'
28
28
  require 'license_finder/reports/merged_report'
29
29
  require 'license_finder/reports/html_report'
30
30
  require 'license_finder/reports/markdown_report'
31
+ require 'license_finder/reports/xml_report'
32
+ require 'license_finder/reports/json_report'
@@ -3,7 +3,7 @@ require 'csv'
3
3
  module LicenseFinder
4
4
  class CsvReport < Report
5
5
  COMMA_SEP = ','.freeze
6
- AVAILABLE_COLUMNS = %w[name version authors licenses license_links approved summary description homepage install_path package_manager groups].freeze
6
+ AVAILABLE_COLUMNS = %w[name version authors licenses license_links approved summary description homepage install_path package_manager groups texts notice].freeze
7
7
  MISSING_DEPENDENCY_TEXT = 'This package is not installed. Please install to determine licenses.'.freeze
8
8
 
9
9
  def initialize(dependencies, options)
@@ -28,6 +28,14 @@ module LicenseFinder
28
28
  end
29
29
  end
30
30
 
31
+ def format_texts(dep)
32
+ dep.license_files.map { |file| file.text.split(/[\n\r]+/).join("\\@NL") }.join("\\@NL").force_encoding("ISO-8859-1").encode("UTF-8")
33
+ end
34
+
35
+ def format_notice(dep)
36
+ dep.notice_files.map { |file| file.text.split(/[\n\r]+/).join("\\@NL") }.join("\\@NL").force_encoding("ISO-8859-1").encode("UTF-8")
37
+ end
38
+
31
39
  def format_name(dep)
32
40
  dep.name
33
41
  end
@@ -0,0 +1,28 @@
1
+ require 'csv'
2
+
3
+ module LicenseFinder
4
+ class JsonReport < CsvReport
5
+ def initialize(dependencies, options)
6
+ super(dependencies, options)
7
+ end
8
+
9
+ def to_s
10
+ {dependencies: build_deps}.to_json
11
+ end
12
+
13
+ private
14
+
15
+ def build_deps
16
+ sorted_dependencies.map do |dep|
17
+ @columns.inject({}) do |memo, column|
18
+ memo[column] = send("format_#{column}", dep)
19
+ memo
20
+ end
21
+ end
22
+ end
23
+
24
+ def format_licenses(dep)
25
+ dep.missing? ? [] : dep.licenses.map(&:name)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,19 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <licenseSummary>
3
+ <dependencies>
4
+ <% sorted_dependencies.each do |dependency| -%>
5
+ <dependency>
6
+ <packageName><%= dependency.name %></packageName>
7
+ <version><%= dependency.version %></version>
8
+ <licenses>
9
+ <% dependency.licenses.each do |license| -%>
10
+ <license>
11
+ <name><%= license.name %></name>
12
+ <url><%= license.url %></url>
13
+ </license>
14
+ <% end -%>
15
+ </licenses>
16
+ </dependency>
17
+ <% end -%>
18
+ </dependencies>
19
+ </licenseSummary>
@@ -0,0 +1,19 @@
1
+ require 'license_finder/reports/erb_report'
2
+
3
+ module LicenseFinder
4
+ class XmlReport < ErbReport
5
+ ROOT_PATH = Pathname.new(__FILE__).dirname
6
+ TEMPLATE_PATH = ROOT_PATH.join('templates')
7
+
8
+ def to_s(filename = TEMPLATE_PATH.join("#{template_name}.erb"))
9
+ template = ERB.new(filename.read, nil, '-')
10
+ template.result(binding)
11
+ end
12
+
13
+ private
14
+
15
+ def template_name
16
+ 'xml_report'
17
+ end
18
+ end
19
+ end
@@ -3,7 +3,7 @@
3
3
  module LicenseFinder
4
4
  class Scanner
5
5
  PACKAGE_MANAGERS = [GoModules, GoDep, GoWorkspace, Go15VendorExperiment, Glide, Gvt, Govendor, Dep, Bundler, NPM, Pip,
6
- Yarn, Bower, Maven, Gradle, CocoaPods, Rebar, Nuget, Carthage, Mix, Conan, Sbt, Cargo].freeze
6
+ Yarn, Bower, Maven, Gradle, CocoaPods, Rebar, Nuget, Carthage, Mix, Conan, Sbt, Cargo, Dotnet].freeze
7
7
 
8
8
  def initialize(config = { project_path: Pathname.new('') })
9
9
  @config = config
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module LicenseFinder
4
- VERSION = '5.5.2'
4
+ VERSION = '5.6.0'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: license_finder
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.5.2
4
+ version: 5.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Collins
@@ -27,7 +27,7 @@ authors:
27
27
  autorequire:
28
28
  bindir: bin
29
29
  cert_chain: []
30
- date: 2018-10-17 00:00:00.000000000 Z
30
+ date: 2018-12-19 00:00:00.000000000 Z
31
31
  dependencies:
32
32
  - !ruby/object:Gem::Dependency
33
33
  name: bundler
@@ -379,6 +379,7 @@ files:
379
379
  - lib/license_finder/package_managers/cocoa_pods.rb
380
380
  - lib/license_finder/package_managers/conan.rb
381
381
  - lib/license_finder/package_managers/dep.rb
382
+ - lib/license_finder/package_managers/dotnet.rb
382
383
  - lib/license_finder/package_managers/glide.rb
383
384
  - lib/license_finder/package_managers/go_15vendorexperiment.rb
384
385
  - lib/license_finder/package_managers/go_dep.rb
@@ -401,6 +402,7 @@ files:
401
402
  - lib/license_finder/package_utils/license_files.rb
402
403
  - lib/license_finder/package_utils/licensing.rb
403
404
  - lib/license_finder/package_utils/maven_dependency_finder.rb
405
+ - lib/license_finder/package_utils/notice_files.rb
404
406
  - lib/license_finder/package_utils/possible_license_file.rb
405
407
  - lib/license_finder/package_utils/sbt_dependency_finder.rb
406
408
  - lib/license_finder/packages/bower_package.rb
@@ -428,12 +430,15 @@ files:
428
430
  - lib/license_finder/reports/diff_report.rb
429
431
  - lib/license_finder/reports/erb_report.rb
430
432
  - lib/license_finder/reports/html_report.rb
433
+ - lib/license_finder/reports/json_report.rb
431
434
  - lib/license_finder/reports/markdown_report.rb
432
435
  - lib/license_finder/reports/merged_report.rb
433
436
  - lib/license_finder/reports/templates/bootstrap.css
434
437
  - lib/license_finder/reports/templates/html_report.erb
435
438
  - lib/license_finder/reports/templates/markdown_report.erb
439
+ - lib/license_finder/reports/templates/xml_report.erb
436
440
  - lib/license_finder/reports/text_report.rb
441
+ - lib/license_finder/reports/xml_report.rb
437
442
  - lib/license_finder/scanner.rb
438
443
  - lib/license_finder/shared_helpers/cmd.rb
439
444
  - lib/license_finder/shared_helpers/common_path.rb
@@ -459,8 +464,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
459
464
  - !ruby/object:Gem::Version
460
465
  version: '0'
461
466
  requirements: []
462
- rubyforge_project:
463
- rubygems_version: 2.7.7
467
+ rubygems_version: 3.0.0
464
468
  signing_key:
465
469
  specification_version: 4
466
470
  summary: Audit the OSS licenses of your application's dependencies.