summaryrefslogtreecommitdiff
path: root/lib/bundler/process_lock.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/bundler/process_lock.rb')
-rw-r--r--lib/bundler/process_lock.rb20
1 files changed, 20 insertions, 0 deletions
diff --git a/lib/bundler/process_lock.rb b/lib/bundler/process_lock.rb
new file mode 100644
index 0000000000..784b17e363
--- /dev/null
+++ b/lib/bundler/process_lock.rb
@@ -0,0 +1,20 @@
+# frozen_string_literal: true
+
+module Bundler
+ class ProcessLock
+ def self.lock(bundle_path = Bundler.bundle_path, &block)
+ lock_file_path = File.join(bundle_path, "bundler.lock")
+ base_lock_file_path = lock_file_path.delete_suffix(".lock")
+
+ require "fileutils" if Bundler.rubygems.provides?("< 3.6.0")
+
+ begin
+ SharedHelpers.filesystem_access(lock_file_path, :write) do
+ Gem.open_file_with_lock(base_lock_file_path, &block)
+ end
+ rescue PermissionError
+ block.call
+ end
+ end
+ end
+end