Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/services/projects/blame_service.rb')
-rw-r--r--app/services/projects/blame_service.rb101
1 files changed, 0 insertions, 101 deletions
diff --git a/app/services/projects/blame_service.rb b/app/services/projects/blame_service.rb
deleted file mode 100644
index 1ea16040655..00000000000
--- a/app/services/projects/blame_service.rb
+++ /dev/null
@@ -1,101 +0,0 @@
-# frozen_string_literal: true
-
-# Service class to correctly initialize Gitlab::Blame and Kaminari pagination
-# objects
-module Projects
- class BlameService
- PER_PAGE = 1000
- STREAMING_FIRST_PAGE_SIZE = 200
- STREAMING_PER_PAGE = 2000
-
- def initialize(blob, commit, params)
- @blob = blob
- @commit = commit
- @streaming_enabled = streaming_state(params)
- @pagination_enabled = pagination_state(params)
- @page = extract_page(params)
- @params = params
- end
-
- attr_reader :page, :streaming_enabled
-
- def blame
- Gitlab::Blame.new(blob, commit, range: blame_range)
- end
-
- def pagination
- return unless pagination_enabled
-
- Kaminari.paginate_array([], total_count: blob_lines_count, limit: per_page)
- .tap { |pagination| pagination.max_paginates_per(per_page) }
- .page(page)
- end
-
- def per_page
- streaming_enabled ? STREAMING_PER_PAGE : PER_PAGE
- end
-
- def total_pages
- total = (blob_lines_count.to_f / per_page).ceil
- return total unless streaming_enabled
-
- ([blob_lines_count - STREAMING_FIRST_PAGE_SIZE, 0].max.to_f / per_page).ceil + 1
- end
-
- def total_extra_pages
- [total_pages - 1, 0].max
- end
-
- def streaming_possible
- Feature.enabled?(:blame_page_streaming, commit.project)
- end
-
- private
-
- attr_reader :blob, :commit, :pagination_enabled
-
- def blame_range
- return unless pagination_enabled || streaming_enabled
-
- first_line = (page - 1) * per_page + 1
-
- if streaming_enabled
- return 1..STREAMING_FIRST_PAGE_SIZE if page == 1
-
- first_line = STREAMING_FIRST_PAGE_SIZE + (page - 2) * per_page + 1
- end
-
- last_line = (first_line + per_page).to_i - 1
-
- first_line..last_line
- end
-
- def extract_page(params)
- page = params.fetch(:page, 1).to_i
-
- return 1 if page < 1 || overlimit?(page)
-
- page
- end
-
- def streaming_state(params)
- return false unless streaming_possible
-
- Gitlab::Utils.to_boolean(params[:streaming], default: false)
- end
-
- def pagination_state(params)
- return false if Gitlab::Utils.to_boolean(params[:no_pagination], default: false)
-
- Feature.enabled?(:blame_page_pagination, commit.project)
- end
-
- def overlimit?(page)
- page > total_pages
- end
-
- def blob_lines_count
- @blob_lines_count ||= blob.data.lines.count
- end
- end
-end