Class: MultiGit::JGitBackend::Ref::OptimisticUpdater

Inherits:
Updater show all
Defined in:
lib/multi_git/jgit_backend/ref.rb

Instance Attribute Summary

Attributes inherited from Ref::Updater

#ref, #target

Instance Method Summary collapse

Methods inherited from Ref::Updater

#destroy!, #initialize, #name, #repository

Constructor Details

This class inherits a constructor from MultiGit::Ref::Updater

Instance Method Details

#update(nx) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/multi_git/jgit_backend/ref.rb', line 41

def update(nx)
  ru = repository.__backend__.updateRef(name)
  begin
    if !ru.try_lock(false)
      raise
    end
    if ref.direct?
      old_id = ObjectId.toString(ru.old_object_id)
      if target.nil?
        raise Error::ConcurrentRefUpdate if old_id != Utils::NULL_OID
      elsif old_id != target.oid
        raise Error::ConcurrentRefUpdate
      end
    end
    nx = super
    do_update(ru, nx)
    return nx
  ensure
    ru.unlock
  end
end