diff options
Diffstat (limited to 'lib/rubygems/commands/contents_command.rb')
-rw-r--r-- | lib/rubygems/commands/contents_command.rb | 40 |
1 files changed, 29 insertions, 11 deletions
diff --git a/lib/rubygems/commands/contents_command.rb b/lib/rubygems/commands/contents_command.rb index e483484615..404c6745bd 100644 --- a/lib/rubygems/commands/contents_command.rb +++ b/lib/rubygems/commands/contents_command.rb @@ -1,3 +1,4 @@ +require 'English' require 'rubygems/command' require 'rubygems/version_option' @@ -80,19 +81,36 @@ class Gem::Commands::ContentsCommand < Gem::Command terminate_interaction 1 if gem_names.length == 1 end - gem_path = spec.full_gem_path - extra = "/{#{spec.require_paths.join ','}}" if options[:lib_only] - glob = "#{gem_path}#{extra}/**/*" - files = Dir[glob] - - gem_path = File.join gem_path, '' # add trailing / if missing - - files.sort.each do |file| - next if File.directory? file + if spec.default_gem? + files = spec.files.map do |file| + case file + when /\A#{spec.bindir}\// + [Gem::ConfigMap[:bindir], $POSTMATCH] + when /\.so\z/ + [Gem::ConfigMap[:archdir], file] + else + [Gem::ConfigMap[:rubylibdir], file] + end + end + else + gem_path = spec.full_gem_path + extra = "/{#{spec.require_paths.join ','}}" if options[:lib_only] + glob = "#{gem_path}#{extra}/**/*" + prefix_re = /#{Regexp.escape(gem_path)}\// + files = Dir[glob].map do |file| + [gem_path, file.sub(prefix_re, "")] + end + end - file = file.sub gem_path, '' unless options[:prefix] + files.sort.each do |prefix, basename| + absolute_path = File.join(prefix, basename) + next if File.directory? absolute_path - say file + if options[:prefix] + say absolute_path + else + say basename + end end end end |