Class: Gitlab::GitalyClient::DiffService

Inherits:
Object
  • Object
show all
Includes:
WithFeatureFlagActors
Defined in:
lib/gitlab/gitaly_client/diff_service.rb

Constant Summary collapse

WHITESPACE_CHANGES =
{
  unspecified: Gitaly::DiffBlobsRequest::WhitespaceChanges::WHITESPACE_CHANGES_UNSPECIFIED,
  ignore_spaces: Gitaly::DiffBlobsRequest::WhitespaceChanges::WHITESPACE_CHANGES_IGNORE,
  ignore_all_spaces: Gitaly::DiffBlobsRequest::WhitespaceChanges::WHITESPACE_CHANGES_IGNORE_ALL
}.freeze
DIFF_MODES =
{
  unspecified: Gitaly::DiffBlobsRequest::DiffMode::DIFF_MODE_UNSPECIFIED,
  word: Gitaly::DiffBlobsRequest::DiffMode::DIFF_MODE_WORD
}.freeze

Instance Attribute Summary

Attributes included from WithFeatureFlagActors

#repository_actor

Instance Method Summary collapse

Methods included from WithFeatureFlagActors

#gitaly_client_call, #gitaly_feature_flag_actors, #group_actor, #project_actor, #user_actor

Constructor Details

#initialize(repository) ⇒ DiffService

Returns a new instance of DiffService.



19
20
21
22
23
24
# File 'lib/gitlab/gitaly_client/diff_service.rb', line 19

def initialize(repository)
  @gitaly_repo = repository.gitaly_repository
  @storage = repository.storage

  self.repository_actor = repository
end

Instance Method Details

#diff_blobs(blob_pairs, diff_mode: DIFF_MODES[:unspecified], whitespace_changes: WHITESPACE_CHANGES[:unspecified], patch_bytes_limit: 0) ⇒ GitalyClient::DiffBlobsStitcher

Requests diffs between blob pairs via Gitaly’s DiffBlobs RPC using blob_pairs field.

Parameters:

  • blob_pairs (Array<Gitaly::DiffBlobsRequest::BlobPair>)

    Array of blob ID pairs to diff

  • diff_mode (Symbol) (defaults to: DIFF_MODES[:unspecified])

    Diff output mode (:unspecified, :word)

  • whitespace_changes (Symbol) (defaults to: WHITESPACE_CHANGES[:unspecified])

    Whitespace handling (:unspecified, :ignore_spaces, :ignore_all_spaces)

  • patch_bytes_limit (Integer) (defaults to: 0)

    Maximum patch size in bytes (0 = unlimited)

Returns:



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/gitlab/gitaly_client/diff_service.rb', line 33

def diff_blobs(
  blob_pairs, diff_mode: DIFF_MODES[:unspecified], whitespace_changes: WHITESPACE_CHANGES[:unspecified],
  patch_bytes_limit: 0
)
  request = Gitaly::DiffBlobsRequest.new(
    repository: @gitaly_repo,
    blob_pairs: blob_pairs,
    diff_mode: diff_mode,
    whitespace_changes: whitespace_changes,
    patch_bytes_limit: patch_bytes_limit
  )

  response = gitaly_client_call(@storage, :diff_service, :diff_blobs, request,
    timeout: GitalyClient.medium_timeout)

  GitalyClient::DiffBlobsStitcher.new(response)
end

#diff_blobs_with_raw_info(raw_info, diff_mode: DIFF_MODES[:unspecified], whitespace_changes: WHITESPACE_CHANGES[:unspecified], patch_bytes_limit: 0) ⇒ GitalyClient::DiffBlobsStitcher

Requests diffs between blob pairs via Gitaly’s DiffBlobs RPC using raw_info field. More efficient for large batches of files compared to blob_pairs approach.

Parameters:

  • raw_info (Array<Gitaly::ChangedPaths>)

    Array of changed path information

  • diff_mode (Symbol) (defaults to: DIFF_MODES[:unspecified])

    Diff output mode (:unspecified, :word)

  • whitespace_changes (Symbol) (defaults to: WHITESPACE_CHANGES[:unspecified])

    Whitespace handling (:unspecified, :ignore_spaces, :ignore_all_spaces)

  • patch_bytes_limit (Integer) (defaults to: 0)

    Maximum patch size in bytes (0 = unlimited)

Returns:



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/gitlab/gitaly_client/diff_service.rb', line 59

def diff_blobs_with_raw_info(
  raw_info,
  diff_mode: DIFF_MODES[:unspecified],
  whitespace_changes: WHITESPACE_CHANGES[:unspecified],
  patch_bytes_limit: 0
)
  request = Gitaly::DiffBlobsRequest.new(
    repository: @gitaly_repo,
    raw_info: raw_info,
    diff_mode: diff_mode,
    whitespace_changes: whitespace_changes,
    patch_bytes_limit: patch_bytes_limit
  )

  response = gitaly_client_call(@storage, :diff_service, :diff_blobs, request,
    timeout: GitalyClient.medium_timeout)

  GitalyClient::DiffBlobsStitcher.new(response)
end