From 067eb1916ce024039631bdbd4114ababa6c02c3a Mon Sep 17 00:00:00 2001 From: Sven Dunemann Date: Tue, 5 May 2020 10:46:47 +0200 Subject: [PATCH] GoModules: fix compute with vendor mod --- .../package_managers/go_modules.rb | 15 +++++++++++---- .../package_managers/go_modules_spec.rb | 19 +++++++++++++++++++ 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/lib/license_finder/package_managers/go_modules.rb b/lib/license_finder/package_managers/go_modules.rb index 66f7b477b..58b9a1e15 100644 --- a/lib/license_finder/package_managers/go_modules.rb +++ b/lib/license_finder/package_managers/go_modules.rb @@ -21,12 +21,10 @@ def active? end def current_packages - info_output, _stderr, _status = Cmd.run("GO111MODULE=on go list -m -mod=vendor -f '{{.Path}},{{.Version}},{{.Dir}}' all") - packages_info = info_output.split("\n") packages = packages_info.map do |package| name, version, install_path = package.split(',') - read_package(install_path, name, version) - end + read_package(install_path, name, version) if install_path.to_s != "" + end.compact packages.reject do |package| Pathname(package.install_path).cleanpath == Pathname(project_path).cleanpath end @@ -34,6 +32,15 @@ def current_packages private + def packages_info + info_output, stderr, _status = Cmd.run("GO111MODULE=on go list -m -mod=vendor -f '{{.Path}},{{.Version}},{{.Dir}}' all") + if stderr =~ Regexp.compile("can't compute 'all' using the vendor directory") + info_output, _stderr, _status = Cmd.run("GO111MODULE=on go list -m -f '{{.Path}},{{.Version}},{{.Dir}}' all") + end + + info_output.split("\n") + end + def sum_files? sum_file_paths.any? end diff --git a/spec/lib/license_finder/package_managers/go_modules_spec.rb b/spec/lib/license_finder/package_managers/go_modules_spec.rb index 204e68c19..fec716c67 100644 --- a/spec/lib/license_finder/package_managers/go_modules_spec.rb +++ b/spec/lib/license_finder/package_managers/go_modules_spec.rb @@ -54,6 +54,25 @@ module LicenseFinder expect(packages.first.package_manager).to eq 'Go' end + + context 'when compute is not allowed on vendor' do + before do + allow(SharedHelpers::Cmd).to receive(:run).with("GO111MODULE=on go list -m -mod=vendor -f '{{.Path}},{{.Version}},{{.Dir}}' all").and_return(["", "go list -m: can't compute 'all' using the vendor directory\n\t(Use -mod=mod or -mod=readonly to bypass.)\n", 1]) + allow(SharedHelpers::Cmd).to receive(:run).with("GO111MODULE=on go list -m -f '{{.Path}},{{.Version}},{{.Dir}}' all").and_return(go_list_string) + end + + it 'finds all the packages all go.sum files' do + packages = subject.current_packages + + expect(packages.length).to eq 2 + + expect(packages.first.name).to eq 'gopkg.in/check.v1' + expect(packages.first.version).to eq 'v0.0.0-20161208181325-20d25e280405' + + expect(packages.last.name).to eq 'gopkg.in/yaml.v2' + expect(packages.last.version).to eq 'v2.2.1' + end + end end describe '.prepare_command' do