Commit ea934d5a authored by Yorick Peterse's avatar Yorick Peterse
Browse files

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.
parent 4a59a2b43b65
......@@ -801,10 +801,7 @@
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 @@
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,6 +16,6 @@
# 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?
......@@ -20,5 +20,5 @@
if push_remove_branch?
@project.repository.expire_has_visible_content_cache
@project.repository.after_remove_branch
@push_commits = []
elsif push_to_new_branch?
......@@ -23,6 +23,6 @@
@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 @@
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,5 +76,5 @@
end
def flush_caches(project, wiki_path)
project.repository.expire_all_caches! if project.repository.exists?
project.repository.before_delete
......@@ -80,7 +80,5 @@
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 @@
return
end
project.repository.expire_emptiness_caches
project.repository.after_import
project.import_finish
end
end
......@@ -18,7 +18,7 @@
return
end
project.repository.expire_emptiness_caches
project.repository.after_import
project.import_finish
end
end
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment