diff options
author | Sean McGivern <sean@mcgivern.me.uk> | 2017-07-05 11:25:39 +0000 |
---|---|---|
committer | Sean McGivern <sean@mcgivern.me.uk> | 2017-07-05 11:25:39 +0000 |
commit | 9e4aef263ae9df7d5b8b612fffce5800de9b16cb (patch) | |
tree | 6568a2b2e4bb09728615fc46d747bfd2815e59ca /lib | |
parent | f8d400f47512443528976a5ac68fd1707121241e (diff) | |
parent | b67d1d64cce624dfc9e99d836ebd23cbd0e21eb6 (diff) | |
download | gitlab-ce-9e4aef263ae9df7d5b8b612fffce5800de9b16cb.tar.gz |
Merge branch 'gitaly-submodule-url-for' into 'master'
Migrate #submodule_url_for to Gitaly
See merge request !12629
Diffstat (limited to 'lib')
-rw-r--r-- | lib/gitlab/git/repository.rb | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/lib/gitlab/git/repository.rb b/lib/gitlab/git/repository.rb index 23d0c8a9bdb..dd5a4d5ad55 100644 --- a/lib/gitlab/git/repository.rb +++ b/lib/gitlab/git/repository.rb @@ -554,11 +554,14 @@ module Gitlab # # => git@localhost:rack.git # def submodule_url_for(ref, path) - if submodules(ref).any? - submodule = submodules(ref)[path] - - if submodule - submodule['url'] + Gitlab::GitalyClient.migrate(:submodule_url_for) do |is_enabled| + if is_enabled + gitaly_submodule_url_for(ref, path) + else + if submodules(ref).any? + submodule = submodules(ref)[path] + submodule['url'] if submodule + end end end end @@ -915,6 +918,18 @@ module Gitlab fill_submodule_ids(commit, parser.parse) end + def gitaly_submodule_url_for(ref, path) + # We don't care about the contents so 1 byte is enough. Can't request 0 bytes, 0 means unlimited. + commit_object = gitaly_commit_client.tree_entry(ref, path, 1) + + return unless commit_object && commit_object.type == :COMMIT + + gitmodules = gitaly_commit_client.tree_entry(ref, '.gitmodules', Blob::MAX_DATA_DISPLAY_SIZE) + found_module = GitmodulesParser.new(gitmodules.data).parse[path] + + found_module && found_module['url'] + end + def alternate_object_directories Gitlab::Git::Env.all.values_at(*ALLOWED_OBJECT_DIRECTORIES_VARIABLES).compact end |