Merge branch 'performance-tune' into 'master'

Performance improvements

* Cache project branches and tags into variables
* Cache lookup results into hash to prevent repeating same requests to git repo
* Cache head commit and head tree

See merge request !417
This commit is contained in:
Dmitriy Zaporozhets 2015-03-21 21:11:14 +00:00
commit 63da396f59
2 changed files with 37 additions and 3 deletions

View File

@ -17,6 +17,7 @@ v 7.10.0 (unreleased)
- Passing the name of pushed ref to CI service (requires GitLab CI 7.9+)
- Add location field to user profile
- Fix print view for markdown files and wiki pages
- Improve GitLab performance when working with git repositories
v 7.9.0 (unreleased)
- Add HipChat integration documentation (Stan Hu)

View File

@ -62,24 +62,28 @@ class Repository
def add_branch(branch_name, ref)
cache.expire(:branch_names)
@branches = nil
gitlab_shell.add_branch(path_with_namespace, branch_name, ref)
end
def add_tag(tag_name, ref, message = nil)
cache.expire(:tag_names)
@tags = nil
gitlab_shell.add_tag(path_with_namespace, tag_name, ref, message)
end
def rm_branch(branch_name)
cache.expire(:branch_names)
@branches = nil
gitlab_shell.rm_branch(path_with_namespace, branch_name)
end
def rm_tag(tag_name)
cache.expire(:tag_names)
@tags = nil
gitlab_shell.rm_tag(path_with_namespace, tag_name)
end
@ -180,8 +184,17 @@ class Repository
end
end
def lookup_cache
@lookup_cache ||= {}
end
def method_missing(m, *args, &block)
raw_repository.send(m, *args, &block)
if m == :lookup && !block_given?
lookup_cache[m] ||= {}
lookup_cache[m][args.join(":")] ||= raw_repository.send(m, *args, &block)
else
raw_repository.send(m, *args, &block)
end
end
def respond_to?(method)
@ -235,12 +248,20 @@ class Repository
end
def head_commit
commit(self.root_ref)
@head_commit ||= commit(self.root_ref)
end
def head_tree
@head_tree ||= Tree.new(self, head_commit.sha, nil)
end
def tree(sha = :head, path = nil)
if sha == :head
sha = head_commit.sha
if path.nil?
return head_tree
else
sha = head_commit.sha
end
end
Tree.new(self, sha, path)
@ -368,6 +389,18 @@ class Repository
end
end
def branches
@branches ||= raw_repository.branches
end
def tags
@tags ||= raw_repository.tags
end
def root_ref
@root_ref ||= raw_repository.root_ref
end
private
def cache