52 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| # Interface to the Redis-backed cache store
 | |
| module Gitlab
 | |
|   class RepositoryCache
 | |
|     attr_reader :repository, :namespace, :backend
 | |
| 
 | |
|     def initialize(repository, extra_namespace: nil, backend: Rails.cache)
 | |
|       @repository = repository
 | |
|       @namespace = "project:#{repository.project.id}"
 | |
|       @namespace = "#{@namespace}:#{extra_namespace}" if extra_namespace
 | |
|       @backend = backend
 | |
|     end
 | |
| 
 | |
|     def cache_key(type)
 | |
|       "#{namespace}:#{type}"
 | |
|     end
 | |
| 
 | |
|     def expire(key)
 | |
|       backend.delete(cache_key(key))
 | |
|     end
 | |
| 
 | |
|     def fetch(key, &block)
 | |
|       backend.fetch(cache_key(key), &block)
 | |
|     end
 | |
| 
 | |
|     def exist?(key)
 | |
|       backend.exist?(cache_key(key))
 | |
|     end
 | |
| 
 | |
|     def read(key)
 | |
|       backend.read(cache_key(key))
 | |
|     end
 | |
| 
 | |
|     def write(key, value)
 | |
|       backend.write(cache_key(key), value)
 | |
|     end
 | |
| 
 | |
|     def fetch_without_caching_false(key, &block)
 | |
|       value = read(key)
 | |
|       return value if value
 | |
| 
 | |
|       value = yield
 | |
| 
 | |
|       # Don't cache false values
 | |
|       write(key, value) if value
 | |
| 
 | |
|       value
 | |
|     end
 | |
|   end
 | |
| end
 |