Class: Gitlab::GitalyClient::ConflictsService
- Inherits:
-
Object
- Object
- Gitlab::GitalyClient::ConflictsService
- Includes:
- EncodingHelper
- Defined in:
- lib/gitlab/gitaly_client/conflicts_service.rb
Constant Summary collapse
- MAX_MSG_SIZE =
128.kilobytes.freeze
Constants included from EncodingHelper
EncodingHelper::ENCODING_CONFIDENCE_THRESHOLD, EncodingHelper::ESCAPED_CHARS, EncodingHelper::UNICODE_REPLACEMENT_CHARACTER
Instance Method Summary collapse
- #conflicts? ⇒ Boolean
-
#initialize(repository, our_commit_oid, their_commit_oid) ⇒ ConflictsService
constructor
A new instance of ConflictsService.
- #list_conflict_files(allow_tree_conflicts: false) ⇒ Object
- #resolve_conflicts(target_repository, resolution, source_branch, target_branch) ⇒ Object
Methods included from EncodingHelper
#binary_io, #detect_binary?, #detect_encoding, #detect_libgit2_binary?, #encode!, #encode_binary, #encode_utf8, #encode_utf8_no_detect, #encode_utf8_with_replacement_character, #unquote_path
Constructor Details
#initialize(repository, our_commit_oid, their_commit_oid) ⇒ ConflictsService
Returns a new instance of ConflictsService.
10 11 12 13 14 15 |
# File 'lib/gitlab/gitaly_client/conflicts_service.rb', line 10 def initialize(repository, our_commit_oid, their_commit_oid) @gitaly_repo = repository.gitaly_repository @repository = repository @our_commit_oid = our_commit_oid @their_commit_oid = their_commit_oid end |
Instance Method Details
#conflicts? ⇒ Boolean
28 29 30 31 32 33 34 35 36 37 |
# File 'lib/gitlab/gitaly_client/conflicts_service.rb', line 28 def conflicts? list_conflict_files.any? rescue GRPC::FailedPrecondition, GRPC::Unknown # The server raises FailedPrecondition when it encounters # ConflictSideMissing, which means a conflict exists but its `theirs` or # `ours` data is nil due to a non-existent file in one of the trees. # # GRPC::Unknown comes from Rugged::ReferenceError and Rugged::OdbError. true end |
#list_conflict_files(allow_tree_conflicts: false) ⇒ Object
17 18 19 20 21 22 23 24 25 26 |
# File 'lib/gitlab/gitaly_client/conflicts_service.rb', line 17 def list_conflict_files(allow_tree_conflicts: false) request = Gitaly::ListConflictFilesRequest.new( repository: @gitaly_repo, our_commit_oid: @our_commit_oid, their_commit_oid: @their_commit_oid, allow_tree_conflicts: allow_tree_conflicts ) response = GitalyClient.call(@repository.storage, :conflicts_service, :list_conflict_files, request, timeout: GitalyClient.long_timeout) GitalyClient::ConflictFilesStitcher.new(response, @gitaly_repo) end |
#resolve_conflicts(target_repository, resolution, source_branch, target_branch) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/gitlab/gitaly_client/conflicts_service.rb', line 39 def resolve_conflicts(target_repository, resolution, source_branch, target_branch) reader = binary_io(resolution.files.to_json) req_enum = Enumerator.new do |y| header = resolve_conflicts_request_header(target_repository, resolution, source_branch, target_branch) y.yield Gitaly::ResolveConflictsRequest.new(header: header) until reader.eof? chunk = reader.read(MAX_MSG_SIZE) y.yield Gitaly::ResolveConflictsRequest.new(files_json: chunk) end end response = GitalyClient.call(@repository.storage, :conflicts_service, :resolve_conflicts, req_enum, remote_storage: target_repository.storage, timeout: GitalyClient.long_timeout) if response.resolution_error.present? raise Gitlab::Git::Conflict::Resolver::ResolutionError, response.resolution_error end end |