diff options
author | Ahmad Sherif <me@ahmadsherif.com> | 2017-10-13 15:11:53 +0200 |
---|---|---|
committer | Ahmad Sherif <me@ahmadsherif.com> | 2017-10-16 15:53:48 +0200 |
commit | fa5eeaecfb85d428395ef76999c60f37cf185990 (patch) | |
tree | 07763d8b467cb1103f577c6dfdf67884c79de392 /lib/gitlab/gitaly_client | |
parent | d7326003a0317a5abc98a830bfac2f54ad752c08 (diff) | |
download | gitlab-ce-fa5eeaecfb85d428395ef76999c60f37cf185990.tar.gz |
Migrate Gitlab::Git::Wiki#write_page to Gitalyfeature/migrate-wiki-write-page-to-gitaly
Closes gitaly#638
Diffstat (limited to 'lib/gitlab/gitaly_client')
-rw-r--r-- | lib/gitlab/gitaly_client/wiki_service.rb | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/lib/gitlab/gitaly_client/wiki_service.rb b/lib/gitlab/gitaly_client/wiki_service.rb new file mode 100644 index 00000000000..03afcce81f0 --- /dev/null +++ b/lib/gitlab/gitaly_client/wiki_service.rb @@ -0,0 +1,45 @@ +require 'stringio' + +module Gitlab + module GitalyClient + class WikiService + MAX_MSG_SIZE = 128.kilobytes.freeze + + def initialize(repository) + @gitaly_repo = repository.gitaly_repository + @repository = repository + end + + def write_page(name, format, content, commit_details) + request = Gitaly::WikiWritePageRequest.new( + repository: @gitaly_repo, + name: GitalyClient.encode(name), + format: format.to_s, + commit_details: Gitaly::WikiCommitDetails.new( + name: GitalyClient.encode(commit_details.name), + email: GitalyClient.encode(commit_details.email), + message: GitalyClient.encode(commit_details.message) + ) + ) + + strio = StringIO.new(content) + + enum = Enumerator.new do |y| + until strio.eof? + chunk = strio.read(MAX_MSG_SIZE) + request.content = GitalyClient.encode(chunk) + + y.yield request + + request = Gitaly::WikiWritePageRequest.new + end + end + + response = GitalyClient.call(@repository.storage, :wiki_service, :wiki_write_page, enum) + if error = response.duplicate_error.presence + raise Gitlab::Git::Wiki::DuplicatePageError, error + end + end + end + end +end |