summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStan Hu <stanhu@gmail.com>2016-08-26 20:15:00 -0700
committerStan Hu <stanhu@gmail.com>2016-08-26 20:16:51 -0700
commitd2627df38f5117250bb319d1f034e9f081b9a376 (patch)
tree2d63d90940e32004a66026dc9e6fe6c2a3a81912
parentc288916db124f1a0aaf5fe3eff53335f23d11921 (diff)
downloadgitlab-ce-speed-up-find-branch.tar.gz
Speed up Repository#find_branch and Repository#find_tag by doing a direct lookupspeed-up-find-branch
The previous implementation would iterate through each branch or tag looking for the name in question. This is unnecessarily slow when a repo has many branches or tags. Instead, Rugged can do a single lookup by scanning refs/heads/<branch_name> or the packed-refs file.
-rw-r--r--CHANGELOG1
-rw-r--r--app/models/repository.rb4
2 files changed, 3 insertions, 2 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 3548115dff3..26a40395f2e 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,7 @@ Please view this file on the master branch, on stable branches it's out of date.
v 8.12.0 (unreleased)
- Add two-factor recovery endpoint to internal API !5510
+ - Speed up Repository#find_branch and Repository#find_tag by doing a direct lookup
- Add font color contrast to external label in admin area (ClemMakesApps)
- Change merge_error column from string to text type
- Reduce contributions calendar data payload (ClemMakesApps)
diff --git a/app/models/repository.rb b/app/models/repository.rb
index 91bdafdac99..52215c441e3 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -121,11 +121,11 @@ class Repository
end
def find_branch(name)
- raw_repository.branches.find { |branch| branch.name == name }
+ raw_repository.branches[name]
end
def find_tag(name)
- tags.find { |tag| tag.name == name }
+ tags[name]
end
def add_branch(user, branch_name, target)