summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelipe Artur <felipefac@gmail.com>2017-03-28 17:04:14 -0300
committerFelipe Artur <felipefac@gmail.com>2017-05-05 16:17:45 -0300
commit354bb7cce844e6ee5f9344d3bcd4e23b9d6e8fcf (patch)
tree1b6f558b8d26d8683c4c80b37c7dc5a483b80b79
parentff7a64a90a9f644bed9734562d6e5ba56ced0959 (diff)
downloadgitlab-ce-354bb7cce844e6ee5f9344d3bcd4e23b9d6e8fcf.tar.gz
Fix specs 2
-rw-r--r--app/models/ci/pipeline.rb11
-rw-r--r--db/post_migrate/20170428170547_add_head_pipeline_for_each_merge_request.rb26
-rw-r--r--db/schema.rb15
-rw-r--r--spec/controllers/projects/merge_requests_controller_spec.rb5
-rw-r--r--spec/features/cycle_analytics_spec.rb14
-rw-r--r--spec/features/merge_requests/widget_spec.rb6
-rw-r--r--spec/lib/gitlab/cycle_analytics/events_spec.rb4
-rw-r--r--spec/models/ci/pipeline_spec.rb2
-rw-r--r--spec/models/merge_request_spec.rb4
-rw-r--r--spec/services/merge_requests/merge_when_pipeline_succeeds_service_spec.rb2
-rw-r--r--spec/services/merge_requests/update_service_spec.rb2
-rw-r--r--spec/workers/pipeline_metrics_worker_spec.rb2
12 files changed, 41 insertions, 52 deletions
diff --git a/app/models/ci/pipeline.rb b/app/models/ci/pipeline.rb
index 785052246ff..e1c2f2dc025 100644
--- a/app/models/ci/pipeline.rb
+++ b/app/models/ci/pipeline.rb
@@ -16,6 +16,9 @@ module Ci
has_many :statuses, class_name: 'CommitStatus', foreign_key: :commit_id
has_many :builds, foreign_key: :commit_id
has_many :trigger_requests, dependent: :destroy, foreign_key: :commit_id
+
+ # Merge requests for which the current pipeline is running against
+ # the merge request's latest commit.
has_many :merge_requests, foreign_key: "head_pipeline_id"
has_many :pending_builds, -> { pending }, foreign_key: :commit_id, class_name: 'Ci::Build'
@@ -381,14 +384,6 @@ module Ci
project.execute_services(data, :pipeline_hooks)
end
- # Merge requests for which the current pipeline is running against
- # the merge request's latest commit.
- def merge_requests
- @merge_requests ||= project.merge_requests
- .where(source_branch: self.ref)
- .select { |merge_request| merge_request.head_pipeline.try(:id) == self.id }
- end
-
# All the merge requests for which the current pipeline runs/ran against
def all_merge_requests
@all_merge_requests ||= project.merge_requests.where(source_branch: ref)
diff --git a/db/post_migrate/20170428170547_add_head_pipeline_for_each_merge_request.rb b/db/post_migrate/20170428170547_add_head_pipeline_for_each_merge_request.rb
index 0e139c28402..bc3850c0c23 100644
--- a/db/post_migrate/20170428170547_add_head_pipeline_for_each_merge_request.rb
+++ b/db/post_migrate/20170428170547_add_head_pipeline_for_each_merge_request.rb
@@ -1,21 +1,23 @@
class AddHeadPipelineForEachMergeRequest < ActiveRecord::Migration
+ include Gitlab::Database::MigrationHelpers
+
DOWNTIME = false
- class Pipeline < ActiveRecord::Base
- self.table_name = "ci_pipelines"
+ def up
+ disable_statement_timeout
- def self.last_per_branch
- select('ref, MAX(id) as head_id, project_id').group(:ref).group(:project_id)
- end
- end
+ pipelines = Arel::Table.new(:ci_pipelines)
+ merge_requests = Arel::Table.new(:merge_requests)
- class MergeRequest < ActiveRecord::Base; end
+ head_id = pipelines.
+ project(Arel::Nodes::NamedFunction.new('max', [pipelines[:id]])).
+ from(pipelines).
+ where(pipelines[:ref].eq(merge_requests[:source_branch])).
+ where(pipelines[:project_id].eq(merge_requests[:source_project_id]))
- def up
- Pipeline.last_per_branch.each do |pipeline|
- mrs = MergeRequest.where(source_branch: pipeline.ref, source_project_id: pipeline.project_id)
- mrs.update_all(head_pipeline_id: pipeline.head_id)
- end
+ sub_query = Arel::Nodes::SqlLiteral.new(Arel::Nodes::Grouping.new(head_id).to_sql)
+
+ update_column_in_batches(:merge_requests, :head_pipeline_id, sub_query)
end
def down
diff --git a/db/schema.rb b/db/schema.rb
index e692794bb7c..8da50ffaacb 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -117,25 +117,13 @@ ActiveRecord::Schema.define(version: 20170504102911) do
t.integer "unique_ips_limit_per_user"
t.integer "unique_ips_limit_time_window"
t.boolean "unique_ips_limit_enabled", default: false, null: false
-<<<<<<< 6fa0e950d2cce0104e0c5f36e0dee43c77224afd
-<<<<<<< 6ae76738dde8fecb117f7706ae2ef74c1d83cdb7
t.decimal "polling_interval_multiplier", default: 1.0, null: false
t.integer "cached_markdown_version"
t.boolean "usage_ping_enabled", default: true, null: false
t.string "uuid"
-<<<<<<< bf04c4ba5fbb4c87cad369c5ad224f0cbf112626
t.boolean "clientside_sentry_enabled", default: false, null: false
t.string "clientside_sentry_dsn"
-=======
-=======
t.string "default_artifacts_expire_in", default: "0", null: false
->>>>>>> Preloads head pipeline for each merge request
-<<<<<<< 362bf76f9fb7cfbc4bbbeeaa7eed6b3e26a91d72
->>>>>>> Preloads head pipeline for each merge request
-=======
-=======
->>>>>>> Populate merge requests head_pipeline_id
->>>>>>> Populate merge requests head_pipeline_id
end
create_table "audit_events", force: :cascade do |t|
@@ -688,11 +676,8 @@ ActiveRecord::Schema.define(version: 20170504102911) do
t.text "title_html"
t.text "description_html"
t.integer "time_estimate"
-<<<<<<< 6ae76738dde8fecb117f7706ae2ef74c1d83cdb7
t.integer "cached_markdown_version"
-=======
t.integer "head_pipeline_id"
->>>>>>> Preloads head pipeline for each merge request
end
add_index "merge_requests", ["assignee_id"], name: "index_merge_requests_on_assignee_id", using: :btree
diff --git a/spec/controllers/projects/merge_requests_controller_spec.rb b/spec/controllers/projects/merge_requests_controller_spec.rb
index ddc055cb008..6dbba178850 100644
--- a/spec/controllers/projects/merge_requests_controller_spec.rb
+++ b/spec/controllers/projects/merge_requests_controller_spec.rb
@@ -1200,7 +1200,10 @@ describe Projects::MergeRequestsController do
let(:status) { pipeline.detailed_status(double('user')) }
- before { get_pipeline_status }
+ before do
+ merge_request.update(head_pipeline: pipeline)
+ get_pipeline_status
+ end
it 'return a detailed head_pipeline status in json' do
expect(response).to have_http_status(:ok)
diff --git a/spec/features/cycle_analytics_spec.rb b/spec/features/cycle_analytics_spec.rb
index 9ccd893fa0d..47a73011673 100644
--- a/spec/features/cycle_analytics_spec.rb
+++ b/spec/features/cycle_analytics_spec.rb
@@ -9,14 +9,17 @@ feature 'Cycle Analytics', feature: true, js: true do
let(:mr) { create_merge_request_closing_issue(issue) }
let(:pipeline) { create(:ci_empty_pipeline, status: 'created', project: project, ref: mr.source_branch, sha: mr.source_branch_sha) }
- before { mr.update(head_pipeline: pipeline) }
+ before do
+ allow_any_instance_of(Gitlab::ReferenceExtractor).to receive(:issues).and_return([issue])
+ end
context 'as an allowed user' do
context 'when project is new' do
before do
project.add_master(user)
- mr.update(head_pipeline_id: pipeline.id)
+
login_as(user)
+
visit namespace_project_cycle_analytics_path(project.namespace, project)
wait_for_ajax
end
@@ -33,9 +36,8 @@ feature 'Cycle Analytics', feature: true, js: true do
context "when there's cycle analytics data" do
before do
- project.team << [user, :master]
-
- allow_any_instance_of(Gitlab::ReferenceExtractor).to receive(:issues).and_return([issue])
+ mr.update(head_pipeline: pipeline)
+ project.add_master(user)
create_cycle
deploy_master
@@ -88,7 +90,7 @@ feature 'Cycle Analytics', feature: true, js: true do
context "as a guest" do
before do
- project.team << [guest, :guest]
+ project.add_guest(guest)
allow_any_instance_of(Gitlab::ReferenceExtractor).to receive(:issues).and_return([issue])
create_cycle
diff --git a/spec/features/merge_requests/widget_spec.rb b/spec/features/merge_requests/widget_spec.rb
index 02193dbfc8d..b1255ac0bd5 100644
--- a/spec/features/merge_requests/widget_spec.rb
+++ b/spec/features/merge_requests/widget_spec.rb
@@ -89,7 +89,7 @@ describe 'Merge request', :feature, :js do
statuses: [commit_status])
create(:ci_build, :pending, pipeline: pipeline)
- merge_request.update(head_pipeline_id: pipeline.id)
+ merge_request.update(head_pipeline: pipeline)
visit namespace_project_merge_request_path(project.namespace, project, merge_request)
end
@@ -111,7 +111,7 @@ describe 'Merge request', :feature, :js do
status: :manual
)
- merge_request.update(head_pipeline_id: pipeline.id)
+ merge_request.update(head_pipeline: pipeline)
visit namespace_project_merge_request_path(project.namespace,
project,
@@ -136,7 +136,7 @@ describe 'Merge request', :feature, :js do
statuses: [commit_status])
create(:ci_build, :pending, pipeline: pipeline)
- merge_request.update(head_pipeline_id: pipeline.id)
+ merge_request.update(head_pipeline: pipeline)
visit namespace_project_merge_request_path(project.namespace, project, merge_request)
end
diff --git a/spec/lib/gitlab/cycle_analytics/events_spec.rb b/spec/lib/gitlab/cycle_analytics/events_spec.rb
index 4b0cffe57d0..a8a1fba22f1 100644
--- a/spec/lib/gitlab/cycle_analytics/events_spec.rb
+++ b/spec/lib/gitlab/cycle_analytics/events_spec.rb
@@ -132,7 +132,7 @@ describe 'cycle analytics events' do
end
before do
- merge_request.update(head_pipeline_id: pipeline.id)
+ merge_request.update(head_pipeline: pipeline)
create(:ci_build, pipeline: pipeline, status: :success, author: user)
create(:ci_build, pipeline: pipeline, status: :success, author: user)
@@ -230,7 +230,7 @@ describe 'cycle analytics events' do
end
before do
- merge_request.update(head_pipeline_id: pipeline.id)
+ merge_request.update(head_pipeline: pipeline)
create(:ci_build, pipeline: pipeline, status: :success, author: user)
create(:ci_build, pipeline: pipeline, status: :success, author: user)
diff --git a/spec/models/ci/pipeline_spec.rb b/spec/models/ci/pipeline_spec.rb
index da5143fab0e..8f5fb5e960d 100644
--- a/spec/models/ci/pipeline_spec.rb
+++ b/spec/models/ci/pipeline_spec.rb
@@ -1044,7 +1044,7 @@ describe Ci::Pipeline, models: true do
it "returns merge requests whose `diff_head_sha` matches the pipeline's SHA" do
allow_any_instance_of(MergeRequest).to receive(:diff_head_sha) { 'a288a022a53a5a944fae87bcec6efc87b7061808' }
- merge_request = create(:merge_request, source_project: project, head_pipeline: pipeline, , source_branch: pipeline.ref)
+ merge_request = create(:merge_request, source_project: project, head_pipeline: pipeline, source_branch: pipeline.ref)
expect(pipeline.merge_requests).to eq([merge_request])
end
diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb
index ce043f77e83..c95b1c59bcb 100644
--- a/spec/models/merge_request_spec.rb
+++ b/spec/models/merge_request_spec.rb
@@ -1436,6 +1436,8 @@ describe MergeRequest, models: true do
status: status)
merge_request.update(head_pipeline: pipeline)
+
+ pipeline
end
let(:project) { create(:project, :public, :repository, only_allow_merge_if_pipeline_succeeds: true) }
@@ -1521,7 +1523,7 @@ describe MergeRequest, models: true do
context 'with running pipeline' do
before do
- merge_request.update(head_pipeline: create_pipeline(:running))
+ create_pipeline(:running)
end
it 'is mergeable' do
diff --git a/spec/services/merge_requests/merge_when_pipeline_succeeds_service_spec.rb b/spec/services/merge_requests/merge_when_pipeline_succeeds_service_spec.rb
index b0304b3b73f..3ef5135e6a3 100644
--- a/spec/services/merge_requests/merge_when_pipeline_succeeds_service_spec.rb
+++ b/spec/services/merge_requests/merge_when_pipeline_succeeds_service_spec.rb
@@ -128,7 +128,7 @@ describe MergeRequests::MergeWhenPipelineSucceedsService do
sha: mr_conflict.diff_head_sha, status: 'success')
end
- before { mr_conflict.update(head_pipeline_id: conflict_pipeline.id) }
+ before { mr_conflict.update(head_pipeline: conflict_pipeline) }
it 'does not merge the merge request' do
expect(MergeWorker).not_to receive(:perform_async)
diff --git a/spec/services/merge_requests/update_service_spec.rb b/spec/services/merge_requests/update_service_spec.rb
index 5cf9f0adfc7..6da3d979df9 100644
--- a/spec/services/merge_requests/update_service_spec.rb
+++ b/spec/services/merge_requests/update_service_spec.rb
@@ -172,7 +172,7 @@ describe MergeRequests::UpdateService, services: true do
ref: merge_request.source_branch,
sha: merge_request.diff_head_sha)
- merge_request.update(head_pipeline_id: pipeline.id)
+ merge_request.update(head_pipeline: pipeline)
expect(MergeRequests::MergeWhenPipelineSucceedsService).to receive(:new).with(project, user).
and_return(service_mock)
diff --git a/spec/workers/pipeline_metrics_worker_spec.rb b/spec/workers/pipeline_metrics_worker_spec.rb
index dbf2b7251c6..ef71125c0b6 100644
--- a/spec/workers/pipeline_metrics_worker_spec.rb
+++ b/spec/workers/pipeline_metrics_worker_spec.rb
@@ -2,7 +2,7 @@ require 'spec_helper'
describe PipelineMetricsWorker do
let(:project) { create(:project, :repository) }
- let!(:merge_request) { create(:merge_request, source_project: project, source_branch: pipeline.ref, head_pipeline_id: pipeline.id) }
+ let!(:merge_request) { create(:merge_request, source_project: project, source_branch: pipeline.ref, head_pipeline: pipeline) }
let(:pipeline) do
create(:ci_empty_pipeline,