From 86ae4bc2d9d472ac6309742392218a9b3d015cf4 Mon Sep 17 00:00:00 2001 From: nagachika Date: Sun, 17 Mar 2013 15:02:50 +0000 Subject: merge revision(s) 39607: [Backport #7713] * lib/rubygems.rb: Allow specification of directory permissions. [ruby-trunk - Bug #7713] * test/rubygems/test_gem.rb: Test for the above. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_0_0@39798 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 6 ++++++ lib/rubygems.rb | 14 +++++++++++--- test/rubygems/test_gem.rb | 12 ++++++++++++ version.h | 2 +- 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 48e8c69d8d..3685ae372f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Mon Mar 18 00:02:27 2013 Eric Hodel + + * lib/rubygems.rb: Allow specification of directory permissions. + [ruby-trunk - Bug #7713] + * test/rubygems/test_gem.rb: Test for the above. + Mon Mar 18 00:00:32 2013 Eric Hodel * test/rubygems/test_gem_spec_fetcher.rb: Removed unused variable. diff --git a/lib/rubygems.rb b/lib/rubygems.rb index ac992d09d6..80e6a1ff74 100644 --- a/lib/rubygems.rb +++ b/lib/rubygems.rb @@ -375,20 +375,28 @@ module Gem end ## - # Quietly ensure the named Gem directory contains all the proper + # Quietly ensure the Gem directory +dir+ contains all the proper # subdirectories. If we can't create a directory due to a permission # problem, then we will silently continue. + # + # If +mode+ is given, missing directories are created with this mode. + # + # World-writable directories will never be created. - def self.ensure_gem_subdirectories dir = Gem.dir + def self.ensure_gem_subdirectories dir = Gem.dir, mode = nil old_umask = File.umask File.umask old_umask | 002 require 'fileutils' + options = {} + + options[:mode] = mode if mode + REPOSITORY_SUBDIRECTORIES.each do |name| subdir = File.join dir, name next if File.exist? subdir - FileUtils.mkdir_p subdir rescue nil # in case of perms issues -- lame + FileUtils.mkdir_p subdir, options rescue nil end ensure File.umask old_umask diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb index 9be77e1375..b6c74659b1 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb @@ -700,6 +700,18 @@ class TestGem < Gem::TestCase assert File.directory? File.join(@gemhome, "cache") end + def test_self_ensure_gem_directories_permissions + FileUtils.rm_r @gemhome + Gem.use_paths @gemhome + + Gem.ensure_gem_subdirectories @gemhome, 0750 + + assert File.directory? File.join(@gemhome, "cache") + + assert_equal 0750, File::Stat.new(@gemhome).mode & 0777 + assert_equal 0750, File::Stat.new(File.join(@gemhome, "cache")).mode & 0777 + end unless win_platform? + def test_self_ensure_gem_directories_safe_permissions FileUtils.rm_r @gemhome Gem.use_paths @gemhome diff --git a/version.h b/version.h index ad0f8d29f2..ab17b6ce06 100644 --- a/version.h +++ b/version.h @@ -1,6 +1,6 @@ #define RUBY_VERSION "2.0.0" #define RUBY_RELEASE_DATE "2013-03-18" -#define RUBY_PATCHLEVEL 67 +#define RUBY_PATCHLEVEL 68 #define RUBY_RELEASE_YEAR 2013 #define RUBY_RELEASE_MONTH 3 -- cgit v1.2.3