Skip to content
This repository has been archived by the owner on Apr 14, 2021. It is now read-only.

Correctly re-install extensions when running pristine for a git source #6303

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions lib/bundler/cli/pristine.rb
Expand Up @@ -30,6 +30,7 @@ def run
FileUtils.rm_rf spec.full_gem_path
when Source::Git
source.remote!
FileUtils.rm_rf spec.extension_dir if spec.have_extensions?
FileUtils.rm_rf spec.full_gem_path
else
Bundler.ui.warn("Cannot pristine #{gem_name}. Gem is sourced from local path.")
Expand Down
19 changes: 19 additions & 0 deletions spec/commands/pristine_spec.rb
Expand Up @@ -14,6 +14,7 @@
build_gem "baz-dev", "1.0.0"
build_gem "very_simple_binary", &:add_c_extension
build_git "foo", :path => lib_path("foo")
build_git "git_with_ext", :path => lib_path("git_with_ext"), &:add_c_extension
build_lib "bar", :path => lib_path("bar")
end

Expand All @@ -22,6 +23,7 @@
gem "weakling"
gem "very_simple_binary"
gem "foo", :git => "#{lib_path("foo")}"
gem "git_with_ext", :git => "#{lib_path("git_with_ext")}"
gem "bar", :path => "#{lib_path("bar")}"

gemspec
Expand Down Expand Up @@ -163,4 +165,21 @@
expect(makefile_contents).to match(/LIBPATH =.*-L#{c_ext_dir}/)
end
end

context "when a build config exists for a git sourced gem" do
let(:git_with_ext) { Bundler.definition.specs["git_with_ext"].first }
let(:c_ext_dir) { Pathname.new(git_with_ext.full_gem_path).join("ext") }
let(:build_opt) { "--with-ext-lib=#{c_ext_dir}" }
before { bundle "config build.git_with_ext -- #{build_opt}" }

# This just verifies that the generated Makefile from the c_ext gem makes
# use of the build_args from the bundle config
it "applies the config when installing the gem" do
bundle! "pristine"

makefile_contents = File.read(c_ext_dir.join("Makefile").to_s)
expect(makefile_contents).to match(/libpath =.*#{c_ext_dir}/)
expect(makefile_contents).to match(/LIBPATH =.*-L#{c_ext_dir}/)
end
end
end