diff options
| author | Markus Reiter | 2017-05-22 03:23:50 +0200 | 
|---|---|---|
| committer | Markus Reiter | 2017-05-25 06:18:52 +0200 | 
| commit | 060af0a26ab7219e46b500fd1c7f420b6cc74cbb (patch) | |
| tree | 649593bf35ab82c344d7f7ca9456f26d118f6f45 /Library/Homebrew/lock_file.rb | |
| parent | e931fee732d9d8d34eb9d689782bafb3822302f7 (diff) | |
| download | brew-060af0a26ab7219e46b500fd1c7f420b6cc74cbb.tar.bz2 | |
Rename `FormulaLock` to `LockFile`.
Diffstat (limited to 'Library/Homebrew/lock_file.rb')
| -rw-r--r-- | Library/Homebrew/lock_file.rb | 49 | 
1 files changed, 49 insertions, 0 deletions
| diff --git a/Library/Homebrew/lock_file.rb b/Library/Homebrew/lock_file.rb new file mode 100644 index 000000000..83743b744 --- /dev/null +++ b/Library/Homebrew/lock_file.rb @@ -0,0 +1,49 @@ +require "fcntl" + +class LockFile +  def initialize(name) +    @name = name +    @path = HOMEBREW_LOCK_DIR/"#{@name}.lock" +    @lockfile = nil +  end + +  def lock +    @path.parent.mkpath +    create_lockfile +    return if @lockfile.flock(File::LOCK_EX | File::LOCK_NB) +    raise OperationInProgressError, @name +  end + +  def unlock +    return if @lockfile.nil? || @lockfile.closed? +    @lockfile.flock(File::LOCK_UN) +    @lockfile.close +  end + +  def with_lock +    lock +    yield +  ensure +    unlock +  end + +  private + +  def create_lockfile +    return unless @lockfile.nil? || @lockfile.closed? +    @lockfile = @path.open(File::RDWR | File::CREAT) +    @lockfile.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC) +  end +end + +class FormulaLock < LockFile +  def initialize(name) +    super("#{name}.formula") +  end +end + +class CaskLock < LockFile +  def initialize(name) +    super("#{name}.cask") +  end +end | 
