• Stan Hu's avatar
    Merge branch '20156-rescue-reference-create-due-to-file-lock-exists' into 'master' · 5dc2cadf
    Stan Hu authored
    Rescue Rugged::OSError (lock exists) when creating references.
    
    Rescue an exception on concurrent scenarios. I was able to create a spec for this, because if you create the lock file before trying to create the reference the reference is created without a problem and the lock file is removed. So IMHO there is a race condition where more than one process is trying to create the same reference at the same time raising the exception, so I just added the patch without specs.
    
    ```ruby
        it "attempting to call keep_around when exists a lock does not fail" do
          ref = repository.send(:keep_around_ref_name, sample_commit.id)
          path = File.join(repository.path, ref)
          lock_path = "#{path}.lock"
    
          FileUtils.mkdir_p(path)
          File.open(lock_path, 'w') { |f| f.write('') }
    
          begin
            # No exception is raised because the lock file is removed at some point in the process
            repository.keep_around(sample_commit.id)
          ensure
            File.delete(path)
            File.delete(lock_path)
          end
        end
    ```
    
    See merge request !5497
    Signed-off-by: default avatarRémy Coutable <remy@rymai.me>
    5dc2cadf
repository.rb 26.6 KB