From d2627df38f5117250bb319d1f034e9f081b9a376 Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Fri, 26 Aug 2016 20:15:00 -0700 Subject: [PATCH] Speed up Repository#find_branch and Repository#find_tag by doing a direct lookup 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/ or the packed-refs file. --- CHANGELOG | 1 + app/models/repository.rb | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 3548115dff39..26a40395f2eb 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 91bdafdac99b..52215c441e34 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -121,11 +121,11 @@ def find_commits_by_message(query, ref = nil, path = nil, limit = 1000, offset = 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) -- GitLab