Moved cache expiration code to Repository hooks
This keeps all the cache expiration code in a single file/class instead of spreading it all across the codebase.
This commit is contained in:
parent
884094a77e
commit
ff28a7cc36
7 changed files with 47 additions and 14 deletions
|
@ -801,10 +801,7 @@ class Project < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def change_head(branch)
|
||||
# Cached divergent commit counts are based on repository head
|
||||
repository.expire_branch_cache
|
||||
repository.expire_root_ref_cache
|
||||
|
||||
repository.before_change_head
|
||||
gitlab_shell.update_repository_head(self.path_with_namespace, branch)
|
||||
reload_default_branch
|
||||
end
|
||||
|
|
|
@ -307,6 +307,44 @@ class Repository
|
|||
cache.expire(:branch_names)
|
||||
end
|
||||
|
||||
# Runs code just before a repository is deleted.
|
||||
def before_delete
|
||||
# FIXME: a repository not existing shouldn't prevent us from flushing caches.
|
||||
expire_all_caches! if exists?
|
||||
end
|
||||
|
||||
# Runs code just before the HEAD of a repository is changed.
|
||||
def before_change_head
|
||||
# Cached divergent commit counts are based on repository head
|
||||
expire_branch_cache
|
||||
expire_root_ref_cache
|
||||
end
|
||||
|
||||
# Runs code before creating a new tag.
|
||||
def before_create_tag
|
||||
expire_cache
|
||||
end
|
||||
|
||||
# Runs code after a repository has been forked/imported.
|
||||
def after_import
|
||||
expire_emptiness_caches
|
||||
end
|
||||
|
||||
# Runs code after a new commit has been pushed.
|
||||
def after_push_commit(branch_name)
|
||||
expire_cache(branch_name)
|
||||
end
|
||||
|
||||
# Runs code after a new branch has been created.
|
||||
def after_create_branch
|
||||
expire_has_visible_content_cache
|
||||
end
|
||||
|
||||
# Runs code after an existing branch has been removed.
|
||||
def after_remove_branch
|
||||
expire_has_visible_content_cache
|
||||
end
|
||||
|
||||
def method_missing(m, *args, &block)
|
||||
if m == :lookup && !block_given?
|
||||
lookup_cache[m] ||= {}
|
||||
|
|
|
@ -16,13 +16,13 @@ class GitPushService < BaseService
|
|||
# 5. Executes the project's services
|
||||
#
|
||||
def execute
|
||||
@project.repository.expire_cache(branch_name)
|
||||
@project.repository.after_push_commit(branch_name)
|
||||
|
||||
if push_remove_branch?
|
||||
@project.repository.expire_has_visible_content_cache
|
||||
@project.repository.after_remove_branch
|
||||
@push_commits = []
|
||||
elsif push_to_new_branch?
|
||||
@project.repository.expire_has_visible_content_cache
|
||||
@project.repository.after_create_branch
|
||||
|
||||
# Re-find the pushed commits.
|
||||
if is_default_branch?
|
||||
|
|
|
@ -2,7 +2,7 @@ class GitTagPushService
|
|||
attr_accessor :project, :user, :push_data
|
||||
|
||||
def execute(project, user, oldrev, newrev, ref)
|
||||
project.repository.expire_cache
|
||||
project.repository.before_create_tag
|
||||
|
||||
@project, @user = project, user
|
||||
@push_data = build_push_data(oldrev, newrev, ref)
|
||||
|
|
|
@ -76,11 +76,9 @@ module Projects
|
|||
end
|
||||
|
||||
def flush_caches(project, wiki_path)
|
||||
project.repository.expire_all_caches! if project.repository.exists?
|
||||
project.repository.before_delete
|
||||
|
||||
wiki_repo = Repository.new(wiki_path, project)
|
||||
|
||||
wiki_repo.expire_all_caches! if wiki_repo.exists?
|
||||
Repository.new(wiki_path, project).before_delete
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -27,7 +27,7 @@ class RepositoryForkWorker
|
|||
return
|
||||
end
|
||||
|
||||
project.repository.expire_emptiness_caches
|
||||
project.repository.after_import
|
||||
project.import_finish
|
||||
end
|
||||
end
|
||||
|
|
|
@ -18,7 +18,7 @@ class RepositoryImportWorker
|
|||
return
|
||||
end
|
||||
|
||||
project.repository.expire_emptiness_caches
|
||||
project.repository.after_import
|
||||
project.import_finish
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue