From 32e15d3f76571de60a37ee8c6b7ca6ee5198f5bf Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 29 Mar 2019 13:08:07 -0400 Subject: [PATCH 1/2] Revert "Revert "Fixes bundler env configuration for vendored gems"" This reverts commit 98b2bb85b858d639d9b938dbe183b96d52164486. --- ci/scripts/run-tests.sh | 2 +- .../configure/set_project_path_spec.rb | 6 ++++ .../features/package_managers/bundler_spec.rb | 22 ++++++++++++ features/support/testing_dsl.rb | 35 +++++++++++++++++-- .../package_managers/bundler.rb | 5 +++ 5 files changed, 66 insertions(+), 4 deletions(-) create mode 100644 features/features/package_managers/bundler_spec.rb diff --git a/ci/scripts/run-tests.sh b/ci/scripts/run-tests.sh index 8c548d243..03da611cc 100755 --- a/ci/scripts/run-tests.sh +++ b/ci/scripts/run-tests.sh @@ -19,6 +19,6 @@ pushd "$PROJECT_ROOT" bundle exec rake install bundle exec rake spec - bundle exec rake features + bundle exec rake features popd diff --git a/features/features/configure/set_project_path_spec.rb b/features/features/configure/set_project_path_spec.rb index 144992426..7fcfadde9 100644 --- a/features/features/configure/set_project_path_spec.rb +++ b/features/features/configure/set_project_path_spec.rb @@ -16,4 +16,10 @@ developer.execute_command_outside_project("license_finder --quiet --project_path #{project.project_dir}") expect(developer).to be_seeing 'mitlicensed_dep, 1.2.3, MIT' end + + specify 'works with vendored bundle and a project_path' do + project = LicenseFinder::TestingDSL::VendorBundlerProject.create + developer.execute_command_outside_project("license_finder --quiet --project_path #{project.project_dir}") + expect(developer).to be_seeing_line 'rake, 12.3.0, MIT' + end end diff --git a/features/features/package_managers/bundler_spec.rb b/features/features/package_managers/bundler_spec.rb new file mode 100644 index 000000000..c693ff4c8 --- /dev/null +++ b/features/features/package_managers/bundler_spec.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +require_relative '../../support/feature_helper' +require_relative '../../../lib/license_finder/version' + +describe 'Bundler Dependencies' do + let(:bundler_developer) { LicenseFinder::TestingDSL::User.new } + + specify 'are shown in reports' do + LicenseFinder::TestingDSL::BundlerProject.create + puts 'bundler project created' + bundler_developer.run_license_finder + expect(bundler_developer).to be_seeing_line "license_finder, #{LicenseFinder::VERSION}, MIT" + end + + specify 'works with vendored bundle' do + LicenseFinder::TestingDSL::VendorBundlerProject.create + puts 'bundler project created' + bundler_developer.run_license_finder + expect(bundler_developer).to be_seeing_line 'rake, 12.3.0, MIT' + end +end diff --git a/features/support/testing_dsl.rb b/features/support/testing_dsl.rb index 1c27beba5..53468df63 100644 --- a/features/support/testing_dsl.rb +++ b/features/support/testing_dsl.rb @@ -35,7 +35,7 @@ def execute_command(command) end def execute_command_outside_project(command) - execute_command_in_path(command, Paths.root) + execute_command_in_path(command, Paths.tmpdir) end def seeing?(content) @@ -431,7 +431,9 @@ def add_dep end def install - shell_out('bundle install') + ::Bundler.with_original_env do + shell_out('bundle install') + end end def depend_on(gem, bundler_options = {}) @@ -450,6 +452,29 @@ def add_to_gemfile(content) end end + class VendorBundlerProject < Project + def add_dep + add_to_gemfile("source 'https://rubygems.org'") + add_gem_to_gemfile('rake', '12.3.0') + end + + def install + ::Bundler.with_original_env do + shell_out('bundle install --path="vendor/bundle"') + end + end + + private + + def add_gem_to_gemfile(gem_name, options) + add_to_gemfile("gem #{gem_name.inspect}, #{options.inspect}") + end + + def add_to_gemfile(content) + add_to_file('Gemfile', content) + end + end + # lives adjacent to a BundlerProject, so has a different lifecycle from other Projects and doesn't inherit class GemProject def self.create(name, options) @@ -581,8 +606,12 @@ def fixtures root.join('features', 'fixtures') end + def tmpdir + ProjectDir.new(Pathname.new(Dir.tmpdir)) + end + def projects - ProjectDir.new(Pathname.new(Dir.tmpdir)).join('projects') + tmpdir.join('projects') end def project(name = 'my_app') diff --git a/lib/license_finder/package_managers/bundler.rb b/lib/license_finder/package_managers/bundler.rb index dd1ce618a..a093e458d 100644 --- a/lib/license_finder/package_managers/bundler.rb +++ b/lib/license_finder/package_managers/bundler.rb @@ -37,6 +37,9 @@ def possible_package_paths def definition # DI + ENV['BUNDLE_PATH'] = project_path.to_s + ENV['BUNDLE_GEMFILE'] = "#{project_path}/Gemfile" + @definition ||= ::Bundler::Definition.build(detected_package_path, lockfile_path, nil) end @@ -52,6 +55,8 @@ def gem_details # clear gem paths before runninng specs_for Gem.clear_paths + ::Bundler.reset! + ::Bundler.configure @gem_details = definition.specs_for(included_groups) end From cd0f063060ddbb626d0912bc46c70093a977b5e4 Mon Sep 17 00:00:00 2001 From: Dwayne Forde Date: Mon, 6 May 2019 11:37:22 -0400 Subject: [PATCH 2/2] Fixes issue with non-vendored Bundler projects --- features/features/package_managers/bundler_spec.rb | 4 ++-- features/support/testing_dsl.rb | 2 +- lib/license_finder/package_managers/bundler.rb | 10 ++++++++-- .../license_finder/package_managers/bundler_spec.rb | 2 +- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/features/features/package_managers/bundler_spec.rb b/features/features/package_managers/bundler_spec.rb index c693ff4c8..e8986216e 100644 --- a/features/features/package_managers/bundler_spec.rb +++ b/features/features/package_managers/bundler_spec.rb @@ -10,13 +10,13 @@ LicenseFinder::TestingDSL::BundlerProject.create puts 'bundler project created' bundler_developer.run_license_finder - expect(bundler_developer).to be_seeing_line "license_finder, #{LicenseFinder::VERSION}, MIT" + expect(bundler_developer).to be_seeing_something_like /bundler.*MIT/ end specify 'works with vendored bundle' do LicenseFinder::TestingDSL::VendorBundlerProject.create puts 'bundler project created' bundler_developer.run_license_finder - expect(bundler_developer).to be_seeing_line 'rake, 12.3.0, MIT' + expect(bundler_developer).to be_seeing_something_like /rake.*MIT/ end end diff --git a/features/support/testing_dsl.rb b/features/support/testing_dsl.rb index 53468df63..fa1db4c48 100644 --- a/features/support/testing_dsl.rb +++ b/features/support/testing_dsl.rb @@ -427,7 +427,7 @@ def add_dep class BundlerProject < Project def add_dep add_to_gemfile("source 'https://rubygems.org'") - add_gem_to_gemfile('license_finder', path: Paths.root.to_s) + add_to_gemfile("gem 'license_finder'") end def install diff --git a/lib/license_finder/package_managers/bundler.rb b/lib/license_finder/package_managers/bundler.rb index a093e458d..cf3e0c64a 100644 --- a/lib/license_finder/package_managers/bundler.rb +++ b/lib/license_finder/package_managers/bundler.rb @@ -55,8 +55,10 @@ def gem_details # clear gem paths before runninng specs_for Gem.clear_paths - ::Bundler.reset! - ::Bundler.configure + if File.exist?(bundler_config_path) + ::Bundler.reset! + ::Bundler.configure + end @gem_details = definition.specs_for(included_groups) end @@ -72,6 +74,10 @@ def lockfile_path project_path.join('Gemfile.lock') end + def bundler_config_path + project_path.join('.bundle') + end + def log_package_dependencies(package) dependencies = package.children if dependencies.empty? diff --git a/spec/lib/license_finder/package_managers/bundler_spec.rb b/spec/lib/license_finder/package_managers/bundler_spec.rb index ddaeedc31..7e6699be6 100644 --- a/spec/lib/license_finder/package_managers/bundler_spec.rb +++ b/spec/lib/license_finder/package_managers/bundler_spec.rb @@ -34,7 +34,7 @@ def build_gemspec(name, version, dependency = nil) describe '.current_packages' do subject do - Bundler.new(ignored_groups: %w[dev test], definition: definition).current_packages + Bundler.new(ignored_groups: %w[dev test], project_path: Pathname.new('.'), definition: definition).current_packages end it 'should have 2 dependencies' do