From 1ea0ce827a619007c69010da512cb4e82224ed0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kim=20=22BKC=22=20Carlb=C3=A4cker?= Date: Fri, 10 Mar 2017 17:56:29 +0100 Subject: Make GitLab use Gitaly for commit_is_ancestor - Migration in Repository#is_ancestor? --- lib/gitlab/git/repository.rb | 5 +++++ lib/gitlab/gitaly_client/commit.rb | 14 ++++++++++++++ 2 files changed, 19 insertions(+) (limited to 'lib/gitlab') diff --git a/lib/gitlab/git/repository.rb b/lib/gitlab/git/repository.rb index 057f7748c3e..d6cb45070a7 100644 --- a/lib/gitlab/git/repository.rb +++ b/lib/gitlab/git/repository.rb @@ -406,6 +406,11 @@ module Gitlab rugged.merge_base(from, to) end + # Returns true is +from+ is direct ancestor to +to+, otherwise false + def is_ancestor?(from, to) + Gitlab::GitalyClient::Commit.is_ancestor(self, from, to) + end + # Return an array of Diff objects that represent the diff # between +from+ and +to+. See Diff::filter_diff_options for the allowed # diff options. The +options+ hash can also include :break_rewrites to diff --git a/lib/gitlab/gitaly_client/commit.rb b/lib/gitlab/gitaly_client/commit.rb index 9c714a3ee45..f15faebe27e 100644 --- a/lib/gitlab/gitaly_client/commit.rb +++ b/lib/gitlab/gitaly_client/commit.rb @@ -21,6 +21,20 @@ module Gitlab Gitlab::Git::DiffCollection.new(stub.commit_diff(request), options) end + + def is_ancestor(repository, ancestor_id, child_id) + project = Project.find_by_path(repository.path) + channel = GitalyClient.get_channel(project.repository_storage) + stub = Gitaly::Commit::Stub.new(nil, nil, channel_override: channel) + repo = Gitaly::Repository.new(path: repository.path_to_repo) + request = Gitaly::CommitIsAncestorRequest.new( + repository: repo, + ancestor_id: ancestor_id, + child_id: child_id + ) + + stub.commit_is_ancestor(request).value + end end end end -- cgit v1.2.1