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/models/merge_request_diff.rb')
-rw-r--r--app/models/merge_request_diff.rb171
1 files changed, 0 insertions, 171 deletions
diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb
deleted file mode 100644
index acac1ca4cf7..00000000000
--- a/app/models/merge_request_diff.rb
+++ /dev/null
@@ -1,171 +0,0 @@
-# == Schema Information
-#
-# Table name: merge_request_diffs
-#
-# id :integer not null, primary key
-# state :string(255)
-# st_commits :text
-# st_diffs :text
-# merge_request_id :integer not null
-# created_at :datetime
-# updated_at :datetime
-#
-
-require Rails.root.join("app/models/commit")
-
-class MergeRequestDiff < ActiveRecord::Base
- include Sortable
-
- # Prevent store of diff
- # if commits amount more then 200
- COMMITS_SAFE_SIZE = 200
-
- attr_reader :commits, :diffs
-
- belongs_to :merge_request
-
- delegate :target_branch, :source_branch, to: :merge_request, prefix: nil
-
- state_machine :state, initial: :empty do
- state :collected
- state :timeout
- state :overflow_commits_safe_size
- state :overflow_diff_files_limit
- state :overflow_diff_lines_limit
- end
-
- serialize :st_commits
- serialize :st_diffs
-
- after_create :reload_content
-
- def reload_content
- reload_commits
- reload_diffs
- end
-
- def diffs
- @diffs ||= (load_diffs(st_diffs) || [])
- end
-
- def commits
- @commits ||= load_commits(st_commits || [])
- end
-
- def last_commit
- commits.first
- end
-
- def last_commit_short_sha
- @last_commit_short_sha ||= last_commit.short_id
- end
-
- private
-
- def dump_commits(commits)
- commits.map(&:to_hash)
- end
-
- def load_commits(array)
- array.map { |hash| Commit.new(Gitlab::Git::Commit.new(hash)) }
- end
-
- def dump_diffs(diffs)
- if diffs.respond_to?(:map)
- diffs.map(&:to_hash)
- end
- end
-
- def load_diffs(raw)
- if raw.respond_to?(:map)
- raw.map { |hash| Gitlab::Git::Diff.new(hash) }
- end
- end
-
- # Collect array of Git::Commit objects
- # between target and source branches
- def unmerged_commits
- commits = compare_result.commits
-
- if commits.present?
- commits = Commit.decorate(commits).
- sort_by(&:created_at).
- reverse
- end
-
- commits
- end
-
- # Reload all commits related to current merge request from repo
- # and save it as array of hashes in st_commits db field
- def reload_commits
- commit_objects = unmerged_commits
-
- if commit_objects.present?
- self.st_commits = dump_commits(commit_objects)
- end
-
- save
- end
-
- # Reload diffs between branches related to current merge request from repo
- # and save it as array of hashes in st_diffs db field
- def reload_diffs
- new_diffs = []
-
- if commits.size.zero?
- self.state = :empty
- elsif commits.size > COMMITS_SAFE_SIZE
- self.state = :overflow_commits_safe_size
- else
- new_diffs = unmerged_diffs
- end
-
- if new_diffs.any?
- if new_diffs.size > Commit::DIFF_HARD_LIMIT_FILES
- self.state = :overflow_diff_files_limit
- new_diffs = []
- end
-
- if new_diffs.sum { |diff| diff.diff.lines.count } > Commit::DIFF_HARD_LIMIT_LINES
- self.state = :overflow_diff_lines_limit
- new_diffs = []
- end
- end
-
- if new_diffs.present?
- new_diffs = dump_commits(new_diffs)
- self.state = :collected
- end
-
- self.st_diffs = new_diffs
- self.save
- end
-
- # Collect array of Git::Diff objects
- # between target and source branches
- def unmerged_diffs
- diffs = compare_result.diffs
- diffs ||= []
- diffs
- rescue Gitlab::Git::Diff::TimeoutError => ex
- self.state = :timeout
- diffs = []
- end
-
- def repository
- merge_request.target_project.repository
- end
-
- private
-
- def compare_result
- @compare_result ||= CompareService.new.execute(
- merge_request.author,
- merge_request.source_project,
- merge_request.source_branch,
- merge_request.target_project,
- merge_request.target_branch,
- )
- end
-end