diff options
Diffstat (limited to 'lib/rubygems/defaults.rb')
-rw-r--r-- | lib/rubygems/defaults.rb | 102 |
1 files changed, 98 insertions, 4 deletions
diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb index 0e83f1b006..2d0b077fdc 100644 --- a/lib/rubygems/defaults.rb +++ b/lib/rubygems/defaults.rb @@ -20,7 +20,13 @@ module Gem # specified in the environment def self.default_spec_cache_dir - File.join Gem.user_home, '.gem', 'specs' + default_spec_cache_dir = File.join Gem.user_home, '.gem', 'specs' + + unless File.exist?(default_spec_cache_dir) + default_spec_cache_dir = File.join Gem.data_home, 'gem', 'specs' + end + + default_spec_cache_dir end ## @@ -71,15 +77,91 @@ module Gem end ## + # Finds the user's home directory. + #-- + # Some comments from the ruby-talk list regarding finding the home + # directory: + # + # I have HOME, USERPROFILE and HOMEDRIVE + HOMEPATH. Ruby seems + # to be depending on HOME in those code samples. I propose that + # it should fallback to USERPROFILE and HOMEDRIVE + HOMEPATH (at + # least on Win32). + #++ + #-- + # + #++ + + def self.find_home + Dir.home.dup + rescue + if Gem.win_platform? + File.expand_path File.join(ENV['HOMEDRIVE'] || ENV['SystemDrive'], '/') + else + File.expand_path "/" + end + end + + private_class_method :find_home + + ## + # The home directory for the user. + + def self.user_home + @user_home ||= find_home.tap(&Gem::UNTAINT) + end + + ## # Path for gems in the user's home directory def self.user_dir - parts = [Gem.user_home, '.gem', ruby_engine] + gem_dir = File.join(Gem.user_home, ".gem") + gem_dir = File.join(Gem.data_home, "gem") unless File.exist?(gem_dir) + parts = [gem_dir, ruby_engine] parts << RbConfig::CONFIG['ruby_version'] unless RbConfig::CONFIG['ruby_version'].empty? File.join parts end ## + # The path to standard location of the user's configuration directory. + + def self.config_home + @config_home ||= (ENV["XDG_CONFIG_HOME"] || File.join(Gem.user_home, '.config')) + end + + ## + # Finds the user's config file + + def self.find_config_file + gemrc = File.join Gem.user_home, '.gemrc' + if File.exist? gemrc + gemrc + else + File.join Gem.config_home, "gem", "gemrc" + end + end + + ## + # The path to standard location of the user's .gemrc file. + + def self.config_file + @config_file ||= find_config_file.tap(&Gem::UNTAINT) + end + + ## + # The path to standard location of the user's cache directory. + + def self.cache_home + @cache_home ||= (ENV["XDG_CACHE_HOME"] || File.join(Gem.user_home, '.cache')) + end + + ## + # The path to standard location of the user's data directory. + + def self.data_home + @data_home ||= (ENV["XDG_DATA_HOME"] || File.join(Gem.user_home, '.local', 'share')) + end + + ## # How String Gem paths should be split. Overridable for esoteric platforms. def self.path_separator @@ -130,14 +212,26 @@ module Gem # The default signing key path def self.default_key_path - File.join Gem.user_home, ".gem", "gem-private_key.pem" + default_key_path = File.join Gem.user_home, ".gem", "gem-private_key.pem" + + unless File.exist?(default_key_path) + default_key_path = File.join Gem.data_home, "gem", "gem-private_key.pem" + end + + default_key_path end ## # The default signing certificate chain path def self.default_cert_path - File.join Gem.user_home, ".gem", "gem-public_cert.pem" + default_cert_path = File.join Gem.user_home, ".gem", "gem-public_cert.pem" + + unless File.exist?(default_cert_path) + default_cert_path = File.join Gem.data_home, "gem", "gem-public_cert.pem" + end + + default_cert_path end ## |