зеркало из https://github.com/github/ruby.git
[rubygems/rubygems] Remove multiline gem specifications correctly
https://github.com/rubygems/rubygems/commit/8dca0ad56e
This commit is contained in:
Родитель
c91915c183
Коммит
0ae5cd55e5
|
@ -180,8 +180,19 @@ module Bundler
|
|||
def remove_gems_from_gemfile(gems, gemfile_path)
|
||||
patterns = /gem\s+(['"])#{Regexp.union(gems)}\1|gem\s*\((['"])#{Regexp.union(gems)}\2\)/
|
||||
|
||||
# remove lines which match the regex
|
||||
new_gemfile = IO.readlines(gemfile_path).reject {|line| line.match(patterns) }
|
||||
new_gemfile = []
|
||||
multiline_removal = false
|
||||
IO.readlines(gemfile_path).each do |line|
|
||||
if line.match(patterns)
|
||||
multiline_removal = line.rstrip.end_with?(",")
|
||||
# skip lines which match the regex
|
||||
next
|
||||
end
|
||||
|
||||
# skip followup lines until line does not end with ','
|
||||
new_gemfile << line unless multiline_removal
|
||||
multiline_removal = line.rstrip.end_with?(",") if multiline_removal
|
||||
end
|
||||
|
||||
# remove line \n and append them with other strings
|
||||
new_gemfile.each_with_index do |_line, index|
|
||||
|
|
|
@ -44,6 +44,30 @@ RSpec.describe "bundle remove" do
|
|||
source "#{file_uri_for(gem_repo1)}"
|
||||
G
|
||||
end
|
||||
|
||||
context "when gem is specified in multiple lines" do
|
||||
it "shows success for removed gem" do
|
||||
gemfile <<-G
|
||||
source '#{file_uri_for(gem_repo1)}'
|
||||
|
||||
gem 'git'
|
||||
gem 'rack',
|
||||
git: 'https://github.com/rack/rack',
|
||||
branch: 'master'
|
||||
gem 'nokogiri'
|
||||
G
|
||||
|
||||
bundle! "remove rack"
|
||||
|
||||
expect(out).to include("rack was removed.")
|
||||
gemfile_should_be <<-G
|
||||
source '#{file_uri_for(gem_repo1)}'
|
||||
|
||||
gem 'git'
|
||||
gem 'nokogiri'
|
||||
G
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "when gem is not present in gemfile" do
|
||||
|
|
Загрузка…
Ссылка в новой задаче