summaryrefslogtreecommitdiff
path: root/lib/gitlab/gitaly_client
diff options
context:
space:
mode:
authorAlejandro Rodríguez <alejorro70@gmail.com>2017-02-15 23:08:30 -0300
committerJacob Vosmaer <jacob@gitlab.com>2017-04-04 16:53:44 +0200
commit267cd3e3594dcb1555b5018723f3cc620873499d (patch)
tree323bdac4cd84427ed64b9d2a0065eff9e762c340 /lib/gitlab/gitaly_client
parent3301f4a22b685975d664ea8abdd7c43b3e929e5a (diff)
downloadgitlab-ce-267cd3e3594dcb1555b5018723f3cc620873499d.tar.gz
Incorporate Gitaly client for refs service
Diffstat (limited to 'lib/gitlab/gitaly_client')
-rw-r--r--lib/gitlab/gitaly_client/notifications.rb13
-rw-r--r--lib/gitlab/gitaly_client/ref.rb35
-rw-r--r--lib/gitlab/gitaly_client/util.rb13
3 files changed, 52 insertions, 9 deletions
diff --git a/lib/gitlab/gitaly_client/notifications.rb b/lib/gitlab/gitaly_client/notifications.rb
index cbfb129c002..f0d93ded91b 100644
--- a/lib/gitlab/gitaly_client/notifications.rb
+++ b/lib/gitlab/gitaly_client/notifications.rb
@@ -3,18 +3,13 @@ module Gitlab
class Notifications
attr_accessor :stub
- def initialize(repo_path)
- full_path = Gitlab::RepoPath.strip_storage_path(repo_path).
- sub(/\.git\z/, '').sub(/\.wiki\z/, '')
- @project = Project.find_by_full_path(full_path)
-
- channel = GitalyClient.get_channel(@project.repository_storage)
- @stub = Gitaly::Notifications::Stub.new(nil, nil, channel_override: channel)
+ def initialize(repository_storage, relative_path)
+ @channel, @repository = Util.process_path(repository_storage, relative_path)
+ @stub = Gitaly::Notifications::Stub.new(nil, nil, channel_override: @channel)
end
def post_receive
- repository = Gitaly::Repository.new(path: @project.repository.path_to_repo)
- request = Gitaly::PostReceiveRequest.new(repository: repository)
+ request = Gitaly::PostReceiveRequest.new(repository: @repository)
@stub.post_receive(request)
end
end
diff --git a/lib/gitlab/gitaly_client/ref.rb b/lib/gitlab/gitaly_client/ref.rb
new file mode 100644
index 00000000000..bfc5fa573c7
--- /dev/null
+++ b/lib/gitlab/gitaly_client/ref.rb
@@ -0,0 +1,35 @@
+module Gitlab
+ module GitalyClient
+ class Ref
+ attr_accessor :stub
+
+ def initialize(repository_storage, relative_path)
+ @channel, @repository = Util.process_path(repository_storage, relative_path)
+ @stub = Gitaly::Ref::Stub.new(nil, nil, channel_override: @channel)
+ end
+
+ def default_branch_name
+ request = Gitaly::FindDefaultBranchNameRequest.new(repository: @repository)
+ stub.find_default_branch_name(request).name.gsub(/^refs\/heads\//, '')
+ end
+
+ def branch_names
+ request = Gitaly::FindAllBranchNamesRequest.new(repository: @repository)
+ consume_refs_response(stub.find_all_branch_names(request), prefix: 'refs/heads/')
+ end
+
+ def tag_names
+ request = Gitaly::FindAllTagNamesRequest.new(repository: @repository)
+ consume_refs_response(stub.find_all_tag_names(request), prefix: 'refs/tags/')
+ end
+
+ private
+
+ def consume_refs_response(response, prefix:)
+ response.flat_map do |r|
+ r.names.map { |name| name.sub(/\A#{Regexp.escape(prefix)}/, '') }
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/gitaly_client/util.rb b/lib/gitlab/gitaly_client/util.rb
new file mode 100644
index 00000000000..d272c25d1f9
--- /dev/null
+++ b/lib/gitlab/gitaly_client/util.rb
@@ -0,0 +1,13 @@
+module Gitlab
+ module GitalyClient
+ module Util
+ def self.process_path(repository_storage, relative_path)
+ channel = GitalyClient.get_channel(repository_storage)
+ storage_path = Gitlab.config.repositories.storages[repository_storage]['path']
+ repository = Gitaly::Repository.new(path: File.join(storage_path, relative_path))
+
+ [channel, repository]
+ end
+ end
+ end
+end