diff --git a/tool/outdate-bundled-gems.rb b/tool/outdate-bundled-gems.rb index c7583ed67e33cd..0bf0eca1e3337f 100755 --- a/tool/outdate-bundled-gems.rb +++ b/tool/outdate-bundled-gems.rb @@ -24,6 +24,8 @@ ruby_version = $1 when /\A--only=(?:(curdir|srcdir)|all)\z/im only = $1&.downcase + when /\A--all\z/im + all = true when /\A-/ raise "#{$0}: unknown option: #{ARGV.first}" else @@ -91,8 +93,14 @@ def each_directory srcdir = Removal.new(ARGV.shift) curdir = !srcdir.base || File.identical?(srcdir.base, ".") ? srcdir : Removal.new +unless all + bundled = File.read("#{srcdir.base}gems/bundled_gems").scan(/^(\w\S+)\s+(\S+)/).to_h rescue nil +end + srcdir.glob(".bundle/gems/*/") do |dir| - unless srcdir.exist?("gems/#{File.basename(dir)}.gem") + base = File.basename(dir) + next if bundled && !bundled.key?(base[/\A.+(?=-)/]) + unless srcdir.exist?("gems/#{base}.gem") srcdir.rmdir(dir) end end