Module: Gem

Defined in:
lib/bundler/rubygems_ext.rb

Defined Under Namespace

Modules: BetterPermissionError, FixFullNameEncoding Classes: BasicSpecification, Dependency, NameTuple, Package, Platform, Requirement, Specification, SpecificationPolicy, StubSpecification

Constant Summary collapse

VALIDATES_FOR_RESOLUTION =

Can be removed once RubyGems 3.5.14 support is dropped

Specification.new.respond_to?(:validate_for_resolution).freeze
FLATTENS_REQUIRED_PATHS =

Can be removed once RubyGems 3.3.15 support is dropped

Specification.new.respond_to?(:flatten_require_paths).freeze

Class Method Summary collapse

Class Method Details

.freebsd_platform?Boolean

Returns:

  • (Boolean)


28
29
30
# File 'lib/bundler/rubygems_ext.rb', line 28

def self.freebsd_platform?
  RbConfig::CONFIG["host_os"].to_s.include?("bsd")
end

.open_file_with_flock(path, &block) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/bundler/rubygems_ext.rb', line 38

def open_file_with_flock(path, &block)
  # read-write mode is used rather than read-only in order to support NFS
  mode = IO::RDWR | IO::APPEND | IO::CREAT | IO::BINARY
  mode |= IO::SHARE_DELETE if IO.const_defined?(:SHARE_DELETE)

  File.open(path, mode) do |io|
    begin
      io.flock(File::LOCK_EX)
    rescue Errno::ENOSYS, Errno::ENOTSUP
    end
    yield io
  end
end

.open_file_with_lock(path, &block) ⇒ Object



52
53
54
55
56
57
# File 'lib/bundler/rubygems_ext.rb', line 52

def open_file_with_lock(path, &block)
  file_lock = "#{path}.lock"
  open_file_with_flock(file_lock, &block)
ensure
  FileUtils.rm_f file_lock
end