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:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-03-18 18:09:04 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-03-18 18:09:04 +0300
commitdfda8b7e77835fc54d469eda336b13b415365703 (patch)
treeb94d991d464dc1e98f0f365e1e15e94c3ee8c9ca /app/models
parent19d46f60a3699232458357111365e63a8c71f20d (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/models')
-rw-r--r--app/models/bulk_imports/entity.rb19
-rw-r--r--app/models/bulk_imports/tracker.rb6
-rw-r--r--app/models/concerns/sortable.rb1
-rw-r--r--app/models/note.rb13
-rw-r--r--app/models/wiki.rb47
5 files changed, 61 insertions, 25 deletions
diff --git a/app/models/bulk_imports/entity.rb b/app/models/bulk_imports/entity.rb
index 9127dab56a6..04af1145769 100644
--- a/app/models/bulk_imports/entity.rb
+++ b/app/models/bulk_imports/entity.rb
@@ -68,25 +68,6 @@ class BulkImports::Entity < ApplicationRecord
end
end
- def update_tracker_for(relation:, has_next_page:, next_page: nil)
- attributes = {
- relation: relation,
- has_next_page: has_next_page,
- next_page: next_page,
- bulk_import_entity_id: id
- }
-
- trackers.upsert(attributes, unique_by: %i[bulk_import_entity_id relation])
- end
-
- def has_next_page?(relation)
- trackers.find_by(relation: relation)&.has_next_page
- end
-
- def next_page_for(relation)
- trackers.find_by(relation: relation)&.next_page
- end
-
private
def validate_parent_is_a_group
diff --git a/app/models/bulk_imports/tracker.rb b/app/models/bulk_imports/tracker.rb
index 182c0bbaa8a..8d16edccd5b 100644
--- a/app/models/bulk_imports/tracker.rb
+++ b/app/models/bulk_imports/tracker.rb
@@ -3,6 +3,8 @@
class BulkImports::Tracker < ApplicationRecord
self.table_name = 'bulk_import_trackers'
+ alias_attribute :pipeline_name, :relation
+
belongs_to :entity,
class_name: 'BulkImports::Entity',
foreign_key: :bulk_import_entity_id,
@@ -28,6 +30,10 @@ class BulkImports::Tracker < ApplicationRecord
end
event :finish do
+ # When applying the concurrent model,
+ # remove the created => finished transaction
+ # https://gitlab.com/gitlab-org/gitlab/-/issues/323384
+ transition created: :finished
transition started: :finished
transition failed: :failed
transition skipped: :skipped
diff --git a/app/models/concerns/sortable.rb b/app/models/concerns/sortable.rb
index 4fe2a0e1827..9f5e9b2bb57 100644
--- a/app/models/concerns/sortable.rb
+++ b/app/models/concerns/sortable.rb
@@ -9,6 +9,7 @@ module Sortable
included do
scope :with_order_id_desc, -> { order(self.arel_table['id'].desc) }
+ scope :with_order_id_asc, -> { order(self.arel_table['id'].asc) }
scope :order_id_desc, -> { reorder(self.arel_table['id'].desc) }
scope :order_id_asc, -> { reorder(self.arel_table['id'].asc) }
scope :order_created_desc, -> { reorder(self.arel_table['created_at'].desc) }
diff --git a/app/models/note.rb b/app/models/note.rb
index fb540d692d1..c75d6aa77e6 100644
--- a/app/models/note.rb
+++ b/app/models/note.rb
@@ -19,6 +19,7 @@ class Note < ApplicationRecord
include Gitlab::SQL::Pattern
include ThrottledTouch
include FromUnion
+ include Sortable
cache_markdown_field :note, pipeline: :note, issuable_state_filter_enabled: true
@@ -103,10 +104,9 @@ class Note < ApplicationRecord
scope :system, -> { where(system: true) }
scope :user, -> { where(system: false) }
scope :common, -> { where(noteable_type: ["", nil]) }
- scope :fresh, -> { order(created_at: :asc, id: :asc) }
+ scope :fresh, -> { order_created_asc.with_order_id_asc }
scope :updated_after, ->(time) { where('updated_at > ?', time) }
scope :with_updated_at, ->(time) { where(updated_at: time) }
- scope :by_updated_at, -> { reorder(:updated_at, :id) }
scope :inc_author_project, -> { includes(:project, :author) }
scope :inc_author, -> { includes(:author) }
scope :inc_relations_for_view, -> do
@@ -148,6 +148,8 @@ class Note < ApplicationRecord
after_commit :notify_after_destroy, on: :destroy
class << self
+ extend Gitlab::Utils::Override
+
def model_name
ActiveModel::Name.new(self, nil, 'note')
end
@@ -204,6 +206,13 @@ class Note < ApplicationRecord
def search(query)
fuzzy_search(query, [:note])
end
+
+ # Override the `Sortable` module's `.simple_sorts` to remove name sorting,
+ # as a `Note` does not have any property that correlates to a "name".
+ override :simple_sorts
+ def simple_sorts
+ super.except('name_asc', 'name_desc')
+ end
end
# rubocop: disable CodeReuse/ServiceClass
diff --git a/app/models/wiki.rb b/app/models/wiki.rb
index df31c54bd0f..3445e7180e6 100644
--- a/app/models/wiki.rb
+++ b/app/models/wiki.rb
@@ -196,10 +196,20 @@ class Wiki
def delete_page(page, message = nil)
return unless page
- wiki.delete_page(page.path, commit_details(:deleted, message, page.title))
- after_wiki_activity
+ if Feature.enabled?(:gitaly_replace_wiki_delete_page, user, default_enabled: :yaml)
+ capture_git_error(:deleted) do
+ repository.delete_file(user, page.path, **multi_commit_options(:deleted, message, page.title))
- true
+ after_wiki_activity
+
+ true
+ end
+ else
+ wiki.delete_page(page.path, commit_details(:deleted, message, page.title))
+ after_wiki_activity
+
+ true
+ end
end
def page_title_and_dir(title)
@@ -276,8 +286,20 @@ class Wiki
private
+ def multi_commit_options(action, message = nil, title = nil)
+ commit_message = build_commit_message(action, message, title)
+ git_user = Gitlab::Git::User.from_gitlab(user)
+
+ {
+ branch_name: repository.root_ref,
+ message: commit_message,
+ author_email: git_user.email,
+ author_name: git_user.name
+ }
+ end
+
def commit_details(action, message = nil, title = nil)
- commit_message = message.presence || default_message(action, title)
+ commit_message = build_commit_message(action, message, title)
git_user = Gitlab::Git::User.from_gitlab(user)
Gitlab::Git::Wiki::CommitDetails.new(user.id,
@@ -287,9 +309,26 @@ class Wiki
commit_message)
end
+ def build_commit_message(action, message, title)
+ message.presence || default_message(action, title)
+ end
+
def default_message(action, title)
"#{user.username} #{action} page: #{title}"
end
+
+ def capture_git_error(action, &block)
+ yield block
+ rescue Gitlab::Git::Index::IndexError,
+ Gitlab::Git::CommitError,
+ Gitlab::Git::PreReceiveError,
+ Gitlab::Git::CommandError,
+ ArgumentError => error
+
+ Gitlab::ErrorTracking.log_exception(error, action: action, wiki_id: id)
+
+ false
+ end
end
Wiki.prepend_if_ee('EE::Wiki')