From e826c5d0917a7fe2225fb6ba0862bc56c1ef3fc2 Mon Sep 17 00:00:00 2001 From: Jarka Kadlecova Date: Wed, 22 Nov 2017 14:20:35 +0100 Subject: Fix link text from group context --- app/models/project.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'app/models/project.rb') diff --git a/app/models/project.rb b/app/models/project.rb index 894ded2a9f6..43a4d86c138 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -760,10 +760,10 @@ class Project < ActiveRecord::Base end end - def to_human_reference(from_project = nil) - if cross_namespace_reference?(from_project) + def to_human_reference(from = nil) + if cross_namespace_reference?(from) name_with_namespace - elsif cross_project_reference?(from_project) + elsif cross_project_reference?(from) name end end -- cgit v1.2.1 From d0a08ab888db33437c7df4eb37b5805757a6dce4 Mon Sep 17 00:00:00 2001 From: Gabriel Mazetto Date: Sat, 18 Nov 2017 07:26:07 +0100 Subject: Improve storage migration rake task --- app/models/project.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'app/models/project.rb') diff --git a/app/models/project.rb b/app/models/project.rb index 894ded2a9f6..f20c0688bc2 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -272,8 +272,9 @@ class Project < ActiveRecord::Base scope :pending_delete, -> { where(pending_delete: true) } scope :without_deleted, -> { where(pending_delete: false) } - scope :with_hashed_storage, -> { where('storage_version >= 1') } - scope :with_legacy_storage, -> { where(storage_version: [nil, 0]) } + scope :with_storage_feature, ->(feature) { where('storage_version >= :version', version: HASHED_STORAGE_FEATURES[feature]) } + scope :without_storage_feature, ->(feature) { where('storage_version < :version OR storage_version IS NULL', version: HASHED_STORAGE_FEATURES[feature]) } + scope :with_unmigrated_storage, -> { where('storage_version < :version OR storage_version IS NULL', version: LATEST_STORAGE_VERSION) } scope :sorted_by_activity, -> { reorder(last_activity_at: :desc) } scope :sorted_by_stars, -> { reorder('projects.star_count DESC') } -- cgit v1.2.1 From 8041a87288906e4b10b86a9a2ab9039036243a5d Mon Sep 17 00:00:00 2001 From: Douwe Maan Date: Fri, 24 Nov 2017 11:23:14 +0100 Subject: Drastically improve project search performance by no longer searching namespace name --- app/models/project.rb | 30 ++++++++---------------------- 1 file changed, 8 insertions(+), 22 deletions(-) (limited to 'app/models/project.rb') diff --git a/app/models/project.rb b/app/models/project.rb index 43a4d86c138..e276bd2422d 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -18,6 +18,7 @@ class Project < ActiveRecord::Base include SelectForProjectAuthorization include Routable include GroupDescendant + include Gitlab::SQL::Pattern extend Gitlab::ConfigHelper extend Gitlab::CurrentSettings @@ -424,32 +425,17 @@ class Project < ActiveRecord::Base # # query - The search query as a String. def search(query) - ptable = arel_table - ntable = Namespace.arel_table - pattern = "%#{query}%" - - # unscoping unnecessary conditions that'll be applied - # when executing `where("projects.id IN (#{union.to_sql})")` - projects = unscoped.select(:id).where( - ptable[:path].matches(pattern) - .or(ptable[:name].matches(pattern)) - .or(ptable[:description].matches(pattern)) - ) - - namespaces = unscoped.select(:id) - .joins(:namespace) - .where(ntable[:name].matches(pattern)) - - union = Gitlab::SQL::Union.new([projects, namespaces]) + pattern = to_pattern(query) - where("projects.id IN (#{union.to_sql})") # rubocop:disable GitlabSecurity/SqlInjection + where( + arel_table[:path].matches(pattern) + .or(arel_table[:name].matches(pattern)) + .or(arel_table[:description].matches(pattern)) + ) end def search_by_title(query) - pattern = "%#{query}%" - table = Project.arel_table - - non_archived.where(table[:name].matches(pattern)) + non_archived.where(arel_table[:name].matches(to_pattern(query))) end def visibility_levels -- cgit v1.2.1 From da42dfb3cf4a2fb0cdcc1a3b41438516a0bed0e5 Mon Sep 17 00:00:00 2001 From: Douwe Maan Date: Fri, 24 Nov 2017 12:24:24 +0100 Subject: Use fuzzy search with minimum length of 3 characters where appropriate --- app/models/project.rb | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) (limited to 'app/models/project.rb') diff --git a/app/models/project.rb b/app/models/project.rb index e276bd2422d..f0068a7e758 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -425,17 +425,11 @@ class Project < ActiveRecord::Base # # query - The search query as a String. def search(query) - pattern = to_pattern(query) - - where( - arel_table[:path].matches(pattern) - .or(arel_table[:name].matches(pattern)) - .or(arel_table[:description].matches(pattern)) - ) + fuzzy_search(query, [:path, :name, :description]) end def search_by_title(query) - non_archived.where(arel_table[:name].matches(to_pattern(query))) + non_archived.fuzzy_search(query, [:name]) end def visibility_levels -- cgit v1.2.1 From cff5eadd7cca3537db4566126714a376c8e21e9e Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Tue, 21 Nov 2017 22:52:05 +0900 Subject: Add deployment platform selector --- app/models/project.rb | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'app/models/project.rb') diff --git a/app/models/project.rb b/app/models/project.rb index e276bd2422d..1b201b13548 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -123,7 +123,7 @@ class Project < ActiveRecord::Base has_one :bugzilla_service has_one :gitlab_issue_tracker_service, inverse_of: :project has_one :external_wiki_service - has_one :kubernetes_service, inverse_of: :project + # has_one :kubernetes_service, inverse_of: :project has_one :prometheus_service, inverse_of: :project has_one :mock_ci_service has_one :mock_deployment_service @@ -907,7 +907,17 @@ class Project < ActiveRecord::Base end def deployment_service - @deployment_service ||= deployment_services.reorder(nil).find_by(active: true) + deployment_platform + end + + def kubernetes_service + deployment_platform + end + + # TODO: This will be extended for multiple enviroment clusters + def deployment_platform + @deployment_platform ||= clusters.where(enabled: true).first&.platform_kubernetes + @deployment_platform ||= deployment_services.reorder(nil).find_by(active: true) end def monitoring_services -- cgit v1.2.1 From 3cf53cc611930f875995883e3051015ed9bcb49b Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Tue, 21 Nov 2017 22:53:36 +0900 Subject: Fix comments --- app/models/project.rb | 1 + 1 file changed, 1 insertion(+) (limited to 'app/models/project.rb') diff --git a/app/models/project.rb b/app/models/project.rb index 1b201b13548..512fe77261a 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -915,6 +915,7 @@ class Project < ActiveRecord::Base end # TODO: This will be extended for multiple enviroment clusters + # TODO: Add super nice tests to check this interchangeability def deployment_platform @deployment_platform ||= clusters.where(enabled: true).first&.platform_kubernetes @deployment_platform ||= deployment_services.reorder(nil).find_by(active: true) -- cgit v1.2.1 From 45f2d0af4173ae8e06b548c4bef1fabe14353c85 Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Wed, 22 Nov 2017 18:31:07 +0900 Subject: Add test suit for platform::kubernetes --- app/models/project.rb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'app/models/project.rb') diff --git a/app/models/project.rb b/app/models/project.rb index 512fe77261a..a7f90bc7fc3 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -914,13 +914,6 @@ class Project < ActiveRecord::Base deployment_platform end - # TODO: This will be extended for multiple enviroment clusters - # TODO: Add super nice tests to check this interchangeability - def deployment_platform - @deployment_platform ||= clusters.where(enabled: true).first&.platform_kubernetes - @deployment_platform ||= deployment_services.reorder(nil).find_by(active: true) - end - def monitoring_services services.where(category: :monitoring) end @@ -1858,4 +1851,11 @@ class Project < ActiveRecord::Base raise ex end + + # TODO: This will be extended for multiple enviroment clusters + # TODO: Add super nice tests to check this interchangeability + def deployment_platform + @deployment_platform ||= clusters.where(enabled: true).first&.platform_kubernetes + @deployment_platform ||= deployment_services.reorder(nil).find_by(active: true) + end end -- cgit v1.2.1 From 53da3d976f3705a87edc50dca41748b5e479fc83 Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Mon, 27 Nov 2017 22:35:16 +0900 Subject: Replce kubernetes_service and deployment_service to deployment_platform --- app/models/project.rb | 28 ++++++++-------------------- 1 file changed, 8 insertions(+), 20 deletions(-) (limited to 'app/models/project.rb') diff --git a/app/models/project.rb b/app/models/project.rb index a7f90bc7fc3..49c56e76dfc 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -123,7 +123,7 @@ class Project < ActiveRecord::Base has_one :bugzilla_service has_one :gitlab_issue_tracker_service, inverse_of: :project has_one :external_wiki_service - # has_one :kubernetes_service, inverse_of: :project + has_one :kubernetes_service, inverse_of: :project has_one :prometheus_service, inverse_of: :project has_one :mock_ci_service has_one :mock_deployment_service @@ -902,16 +902,11 @@ class Project < ActiveRecord::Base @ci_service ||= ci_services.reorder(nil).find_by(active: true) end - def deployment_services - services.where(category: :deployment) - end - - def deployment_service - deployment_platform - end - - def kubernetes_service - deployment_platform + # TODO: This will be extended for multiple enviroment clusters + # TODO: Add super nice tests to check this interchangeability + def deployment_platform + @deployment_platform ||= clusters.where(enabled: true).first&.platform_kubernetes + @deployment_platform ||= services.where(category: :deployment).reorder(nil).find_by(active: true) end def monitoring_services @@ -1556,9 +1551,9 @@ class Project < ActiveRecord::Base end def deployment_variables - return [] unless deployment_service + return [] unless deployment_platform - deployment_service.predefined_variables + deployment_platform.predefined_variables end def auto_devops_variables @@ -1851,11 +1846,4 @@ class Project < ActiveRecord::Base raise ex end - - # TODO: This will be extended for multiple enviroment clusters - # TODO: Add super nice tests to check this interchangeability - def deployment_platform - @deployment_platform ||= clusters.where(enabled: true).first&.platform_kubernetes - @deployment_platform ||= deployment_services.reorder(nil).find_by(active: true) - end end -- cgit v1.2.1 From 54c70a775af21863d51bd2b3e96e5998c90ddaf7 Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Tue, 28 Nov 2017 01:26:14 +0900 Subject: Fix static analysys --- app/models/project.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app/models/project.rb') diff --git a/app/models/project.rb b/app/models/project.rb index 49c56e76dfc..95aabc4ad45 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -905,7 +905,7 @@ class Project < ActiveRecord::Base # TODO: This will be extended for multiple enviroment clusters # TODO: Add super nice tests to check this interchangeability def deployment_platform - @deployment_platform ||= clusters.where(enabled: true).first&.platform_kubernetes + @deployment_platform ||= clusters.find_by(enabled: true)&.platform_kubernetes @deployment_platform ||= services.where(category: :deployment).reorder(nil).find_by(active: true) end -- cgit v1.2.1 From 7277b3b32c2afd26a033ecf81b93319efb65861d Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Tue, 28 Nov 2017 03:06:38 +0900 Subject: Fix feature spec --- app/models/project.rb | 1 - 1 file changed, 1 deletion(-) (limited to 'app/models/project.rb') diff --git a/app/models/project.rb b/app/models/project.rb index 95aabc4ad45..027c437d7da 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -903,7 +903,6 @@ class Project < ActiveRecord::Base end # TODO: This will be extended for multiple enviroment clusters - # TODO: Add super nice tests to check this interchangeability def deployment_platform @deployment_platform ||= clusters.find_by(enabled: true)&.platform_kubernetes @deployment_platform ||= services.where(category: :deployment).reorder(nil).find_by(active: true) -- cgit v1.2.1 From 70194cfc28009f419f74580cf199fe91aa1754ec Mon Sep 17 00:00:00 2001 From: Christiaan Van den Poel Date: Fri, 1 Dec 2017 11:15:15 +0000 Subject: Adds validation for Project#ci_config_path not to contain leading slash --- app/models/project.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'app/models/project.rb') diff --git a/app/models/project.rb b/app/models/project.rb index c6f7f56f311..eaf4f555d3b 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -234,8 +234,8 @@ class Project < ActiveRecord::Base validates :creator, presence: true, on: :create validates :description, length: { maximum: 2000 }, allow_blank: true validates :ci_config_path, - format: { without: /\.{2}/, - message: 'cannot include directory traversal.' }, + format: { without: /(\.{2}|\A\/)/, + message: 'cannot include leading slash or directory traversal.' }, length: { maximum: 255 }, allow_blank: true validates :name, @@ -599,7 +599,7 @@ class Project < ActiveRecord::Base def ci_config_path=(value) # Strip all leading slashes so that //foo -> foo - super(value&.sub(%r{\A/+}, '')&.delete("\0")) + super(value&.delete("\0")) end def import_url=(value) -- cgit v1.2.1 From 194f7bca9a286942bcd764c836180964e33a1e92 Mon Sep 17 00:00:00 2001 From: Francisco Lopez Date: Thu, 30 Nov 2017 12:52:38 +0100 Subject: Comments from code review applied. Also switched forked_from_project and ForkedProjectLinks to ForkNetworkMember --- app/models/project.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'app/models/project.rb') diff --git a/app/models/project.rb b/app/models/project.rb index eaf4f555d3b..6f57763b05b 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1114,7 +1114,11 @@ class Project < ActiveRecord::Base end def project_member(user) - project_members.find_by(user_id: user) + if project_members.loaded? + project_members.find { |member| member.user_id == user.id } + else + project_members.find_by(user_id: user) + end end def default_branch -- cgit v1.2.1 From 327a9898a226a098b18e80e4950702064ecd38f1 Mon Sep 17 00:00:00 2001 From: Nick Thomas Date: Thu, 30 Nov 2017 21:34:31 +0000 Subject: Fix the fork project functionality for projects with hashed storage Note the dependency on gitlab-shell v5.10.0 --- app/models/project.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'app/models/project.rb') diff --git a/app/models/project.rb b/app/models/project.rb index eaf4f555d3b..f9c82029912 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -562,8 +562,7 @@ class Project < ActiveRecord::Base if forked? RepositoryForkWorker.perform_async(id, forked_from_project.repository_storage_path, - forked_from_project.full_path, - self.namespace.full_path) + forked_from_project.disk_path) else RepositoryImportWorker.perform_async(self.id) end -- cgit v1.2.1 From a42b43ce7a9146ac1035328f2bc1cfc5f06e9371 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matija=20=C4=8Cupi=C4=87?= Date: Mon, 4 Dec 2017 16:51:06 +0100 Subject: Remove cluster from Project model --- app/models/project.rb | 1 - 1 file changed, 1 deletion(-) (limited to 'app/models/project.rb') diff --git a/app/models/project.rb b/app/models/project.rb index eaf4f555d3b..0cb07e14cd8 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -189,7 +189,6 @@ class Project < ActiveRecord::Base has_one :statistics, class_name: 'ProjectStatistics' has_one :cluster_project, class_name: 'Clusters::Project' - has_one :cluster, through: :cluster_project, class_name: 'Clusters::Cluster' has_many :clusters, through: :cluster_project, class_name: 'Clusters::Cluster' # Container repositories need to remove data from the container registry, -- cgit v1.2.1 From 8cce70730c2fb9c705e1f1177f6d1effc665b3c7 Mon Sep 17 00:00:00 2001 From: Jan Provaznik Date: Thu, 24 Aug 2017 08:20:36 +0200 Subject: Create merge request from email * new merge request can be created by sending an email to the specific email address (similar to creating issues by email) * for the first iteration, source branch must be specified in the mail subject, other merge request parameters can not be set yet * user should enable "Receive notifications about your own activity" in user settings to receive a notification about created merge request Part of #32878 --- app/models/project.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'app/models/project.rb') diff --git a/app/models/project.rb b/app/models/project.rb index 0a7e7617d9b..cc530076bf7 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -752,13 +752,14 @@ class Project < ActiveRecord::Base Gitlab::Routing.url_helpers.project_url(self) end - def new_issue_address(author) + def new_issuable_address(author, address_type) return unless Gitlab::IncomingEmail.supports_issue_creation? && author author.ensure_incoming_email_token! + suffix = address_type == 'merge_request' ? '+merge-request' : '' Gitlab::IncomingEmail.reply_address( - "#{full_path}+#{author.incoming_email_token}") + "#{full_path}#{suffix}+#{author.incoming_email_token}") end def build_commit_note(commit) -- cgit v1.2.1