diff options
| author | mo khan <mo.khan@gmail.com> | 2020-05-25 11:01:03 -0600 |
|---|---|---|
| committer | mo khan <mo.khan@gmail.com> | 2020-05-26 19:33:44 -0600 |
| commit | 80fa34dd2bd72af88efcb85844302d04450a0e1e (patch) | |
| tree | 2a5ba8dfc9bdb61c58633373be122ae2f83df1e7 /lib/license/finder | |
| parent | bff873a938de126d2b79e799df325f3d5c31295b (diff) | |
Scan Conan projects
* Scan the conan examples project
* Split licenses by comma
* Add integration test job for c projects
* Add package_manager, version and path to v2.1 report
* Detect collisions between names from different package managers
* Add CHANGELOG entry
* Update README to indicate Conan support
* Print timestamps in install script
Diffstat (limited to 'lib/license/finder')
| -rw-r--r-- | lib/license/finder/ext.rb | 2 | ||||
| -rw-r--r-- | lib/license/finder/ext/bower.rb | 8 | ||||
| -rw-r--r-- | lib/license/finder/ext/conan.rb | 42 | ||||
| -rw-r--r-- | lib/license/finder/ext/dependency.rb | 27 | ||||
| -rw-r--r-- | lib/license/finder/ext/go_modules.rb | 8 | ||||
| -rw-r--r-- | lib/license/finder/ext/gradle.rb | 2 | ||||
| -rw-r--r-- | lib/license/finder/ext/maven.rb | 2 | ||||
| -rw-r--r-- | lib/license/finder/ext/npm.rb | 4 | ||||
| -rw-r--r-- | lib/license/finder/ext/pip.rb | 6 | ||||
| -rw-r--r-- | lib/license/finder/ext/pipenv.rb | 2 | ||||
| -rw-r--r-- | lib/license/finder/ext/yarn.rb | 14 |
11 files changed, 100 insertions, 17 deletions
diff --git a/lib/license/finder/ext.rb b/lib/license/finder/ext.rb index 3c56c7a..8d76172 100644 --- a/lib/license/finder/ext.rb +++ b/lib/license/finder/ext.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true require 'license/finder/ext/bower' +require 'license/finder/ext/conan' +require 'license/finder/ext/dependency' require 'license/finder/ext/go_modules' require 'license/finder/ext/gradle' require 'license/finder/ext/license' diff --git a/lib/license/finder/ext/bower.rb b/lib/license/finder/ext/bower.rb index d288b05..2219b18 100644 --- a/lib/license/finder/ext/bower.rb +++ b/lib/license/finder/ext/bower.rb @@ -34,14 +34,16 @@ module LicenseFinder meta = bower_module.fetch('pkgMeta', {}) endpoint = bower_module.fetch('endpoint', {}) - Package.new( + Dependency.new( + 'Bower', meta['name'] || endpoint['name'], meta['version'] || endpoint['target'], - summary: meta['description'], description: meta['readme'], + detection_path: detected_package_path, homepage: meta['homepage'], + install_path: bower_module['canonicalDir'], spec_licenses: Package.license_names_from_standard_spec(meta), - install_path: bower_module['canonicalDir'] + summary: meta['description'] ) end diff --git a/lib/license/finder/ext/conan.rb b/lib/license/finder/ext/conan.rb new file mode 100644 index 0000000..1369e6a --- /dev/null +++ b/lib/license/finder/ext/conan.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +module LicenseFinder + class Conan + def possible_package_paths + [project_path.join('conanfile.txt')] + end + + def current_packages + Dir.chdir(project_path) do + shell.execute([:conan, :install, '.']) + end + stdout, _stderr, status = Dir.chdir(project_path) do + shell.execute([:conan, :info, '-j', '/dev/stdout', '.']) + end + return [] unless status.success? + + parse(stdout.lines[0]).map { |dependency| map_from(dependency) }.compact + end + + private + + def extract_name_version_from(name) + name.split('@', 2).first.split('/', 2) + end + + def map_from(dependency) + name, version = extract_name_version_from(dependency['reference']) + return if name == 'conanfile.txt' + + Dependency.new('Conan', name, version, spec_licenses: licenses_for(dependency), detection_path: detected_package_path) + end + + def licenses_for(dependency) + dependency['license'] + end + + def parse(line) + JSON.parse(line) + end + end +end diff --git a/lib/license/finder/ext/dependency.rb b/lib/license/finder/ext/dependency.rb new file mode 100644 index 0000000..48939bf --- /dev/null +++ b/lib/license/finder/ext/dependency.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +module LicenseFinder + class Dependency < Package + attr_accessor :detection_path, :package_manager + + def initialize(package_manager, name, version, options = {}) + @package_manager = package_manager + @detection_path = options[:detection_path] || Pathname.pwd + super(name, version, options) + end + + def self.from(other, detection_path) + new( + other.package_manager, + other.name, + other.version, + description: other.description, + detection_path: detection_path, + homepage: other.homepage, + install_path: other.install_path, + spec_licenses: other.license_names_from_spec, + summary: other.summary + ) + end + end +end diff --git a/lib/license/finder/ext/go_modules.rb b/lib/license/finder/ext/go_modules.rb index 3b9042e..e2f025f 100644 --- a/lib/license/finder/ext/go_modules.rb +++ b/lib/license/finder/ext/go_modules.rb @@ -8,7 +8,7 @@ module LicenseFinder end def active? - Dir[project_path.join('go.sum')].any? + sum_files.any? end def current_packages @@ -20,6 +20,10 @@ module LicenseFinder private + def sum_files + Pathname.glob(project_path.join('go.sum')) + end + def go_list_command [:go, :list, '-m', '-f', "'{{.Path}},{{.Version}},{{.Dir}}'", :all] end @@ -33,7 +37,7 @@ module LicenseFinder return if dir.nil? return if Pathname(dir).cleanpath == absolute_project_path - Package.new(name, version, install_path: dir) + Dependency.new('Go', name, version, install_path: dir, detection_path: sum_files.find(&:exist?)) end end end diff --git a/lib/license/finder/ext/gradle.rb b/lib/license/finder/ext/gradle.rb index 3357042..8328300 100644 --- a/lib/license/finder/ext/gradle.rb +++ b/lib/license/finder/ext/gradle.rb @@ -44,7 +44,7 @@ module LicenseFinder end def map_from(hash) - GradlePackage.new(hash, include_groups: @include_groups) + Dependency.from(GradlePackage.new(hash, include_groups: @include_groups), detected_package_path) end end end diff --git a/lib/license/finder/ext/maven.rb b/lib/license/finder/ext/maven.rb index 159f9f9..d6a08dc 100644 --- a/lib/license/finder/ext/maven.rb +++ b/lib/license/finder/ext/maven.rb @@ -38,7 +38,7 @@ module LicenseFinder ::License::Management.logger.debug(xml) XmlSimple .xml_in(xml, XML_PARSE_OPTIONS)['dependencies'] - .map { |dependency| MavenPackage.new(dependency) } + .map { |dependency| Dependency.from(MavenPackage.new(dependency), detected_package_path) } end end end diff --git a/lib/license/finder/ext/npm.rb b/lib/license/finder/ext/npm.rb index 48741f9..e0d4e41 100644 --- a/lib/license/finder/ext/npm.rb +++ b/lib/license/finder/ext/npm.rb @@ -3,7 +3,9 @@ module LicenseFinder class NPM def current_packages - NpmPackage.packages_from_json(npm_json, detected_package_path) + NpmPackage.packages_from_json(npm_json, detected_package_path).map do |item| + Dependency.from(item, detected_package_path) + end end def prepare_command diff --git a/lib/license/finder/ext/pip.rb b/lib/license/finder/ext/pip.rb index 596cd4c..bdeffc3 100644 --- a/lib/license/finder/ext/pip.rb +++ b/lib/license/finder/ext/pip.rb @@ -5,7 +5,7 @@ module LicenseFinder def current_packages return legacy_results unless virtual_env? - dependencies = python.pip_licenses + dependencies = python.pip_licenses(detection_path: detected_package_path) dependencies.any? ? dependencies : legacy_results end @@ -58,10 +58,12 @@ module LicenseFinder def legacy_results pip_output.map do |name, version, _children, _location| spec = PyPI.definition(name, version) - Package.new( + Dependency.new( + 'Pip', name, version, description: spec['description'], + detection_path: detected_package_path, homepage: spec['home_page'], spec_licenses: PipPackage.license_names_from_spec(spec) ) diff --git a/lib/license/finder/ext/pipenv.rb b/lib/license/finder/ext/pipenv.rb index 17b7391..687c6fc 100644 --- a/lib/license/finder/ext/pipenv.rb +++ b/lib/license/finder/ext/pipenv.rb @@ -12,7 +12,7 @@ module LicenseFinder def current_packages return legacy_results unless pipfile? - python.pip_licenses + python.pip_licenses(detection_path: detected_package_path) end private diff --git a/lib/license/finder/ext/yarn.rb b/lib/license/finder/ext/yarn.rb index f9187ce..4ad97d4 100644 --- a/lib/license/finder/ext/yarn.rb +++ b/lib/license/finder/ext/yarn.rb @@ -54,13 +54,11 @@ module LicenseFinder end def map_from(hash) - name = hash['Name'] - - YarnPackage.new( - name, + build( + hash['Name'], hash['Version'], spec_licenses: [hash['License']], - install_path: install_path_for(name).to_s, + install_path: install_path_for(hash['Name']).to_s, homepage: hash['VendorUrl'] ) end @@ -88,7 +86,11 @@ module LicenseFinder matches = json['data'].to_s.match(INCOMPATIBLE_PACKAGE_REGEX) return [] unless matches - [YarnPackage.new(matches['name'], matches['version'], spec_licenses: ['unknown'])] + [build(matches['name'], matches['version'], spec_licenses: ['unknown'])] + end + + def build(name, version, options = {}) + Dependency.new('Yarn', name, version, options.merge(detection_path: detected_package_path)) end def default_env |
