Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Boxiang Sun
gitlab-ce
Commits
a6778fc6
Commit
a6778fc6
authored
6 years ago
by
Francisco Javier López
Committed by
Grzegorz Bizon
6 years ago
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Rename project's pipelines relation
parent
107ff10e
Changes
39
Hide whitespace changes
Inline
Side-by-side
Showing
39 changed files
with
276 additions
and
72 deletions
+276
-72
app/controllers/projects/branches_controller.rb
app/controllers/projects/branches_controller.rb
+1
-1
app/controllers/projects/pipelines_controller.rb
app/controllers/projects/pipelines_controller.rb
+5
-5
app/controllers/projects/tags_controller.rb
app/controllers/projects/tags_controller.rb
+1
-1
app/finders/pipelines_finder.rb
app/finders/pipelines_finder.rb
+1
-1
app/models/ci/pipeline.rb
app/models/ci/pipeline.rb
+7
-2
app/models/commit.rb
app/models/commit.rb
+2
-2
app/models/commit_collection.rb
app/models/commit_collection.rb
+1
-1
app/models/merge_request.rb
app/models/merge_request.rb
+2
-2
app/models/project.rb
app/models/project.rb
+15
-5
app/models/project_services/pipelines_email_service.rb
app/models/project_services/pipelines_email_service.rb
+2
-2
app/services/ci/create_pipeline_service.rb
app/services/ci/create_pipeline_service.rb
+1
-1
app/services/projects/auto_devops/disable_service.rb
app/services/projects/auto_devops/disable_service.rb
+1
-1
app/services/test_hooks/project_service.rb
app/services/test_hooks/project_service.rb
+1
-1
db/fixtures/development/14_pipelines.rb
db/fixtures/development/14_pipelines.rb
+1
-1
lib/api/commit_statuses.rb
lib/api/commit_statuses.rb
+2
-2
lib/api/jobs.rb
lib/api/jobs.rb
+1
-1
lib/api/pipelines.rb
lib/api/pipelines.rb
+1
-1
lib/gitlab/badge/coverage/report.rb
lib/gitlab/badge/coverage/report.rb
+1
-1
lib/gitlab/badge/pipeline/status.rb
lib/gitlab/badge/pipeline/status.rb
+1
-1
lib/gitlab/ci/charts.rb
lib/gitlab/ci/charts.rb
+2
-2
lib/gitlab/import_export/import_export.yml
lib/gitlab/import_export/import_export.yml
+1
-1
lib/gitlab/import_export/project_tree_restorer.rb
lib/gitlab/import_export/project_tree_restorer.rb
+3
-1
lib/gitlab/import_export/project_tree_saver.rb
lib/gitlab/import_export/project_tree_saver.rb
+2
-0
lib/gitlab/import_export/relation_factory.rb
lib/gitlab/import_export/relation_factory.rb
+1
-0
lib/gitlab/import_export/relation_rename_service.rb
lib/gitlab/import_export/relation_rename_service.rb
+48
-0
spec/features/projects/commit/builds_spec.rb
spec/features/projects/commit/builds_spec.rb
+1
-1
spec/features/projects/pages_spec.rb
spec/features/projects/pages_spec.rb
+1
-1
spec/lib/gitlab/import_export/all_models.yml
spec/lib/gitlab/import_export/all_models.yml
+3
-2
spec/lib/gitlab/import_export/project_tree_restorer_spec.rb
spec/lib/gitlab/import_export/project_tree_restorer_spec.rb
+2
-2
spec/lib/gitlab/import_export/project_tree_saver_spec.rb
spec/lib/gitlab/import_export/project_tree_saver_spec.rb
+5
-5
spec/lib/gitlab/import_export/relation_rename_service_spec.rb
.../lib/gitlab/import_export/relation_rename_service_spec.rb
+111
-0
spec/models/ci/pipeline_spec.rb
spec/models/ci/pipeline_spec.rb
+4
-3
spec/models/project_spec.rb
spec/models/project_spec.rb
+26
-3
spec/requests/api/commit_statuses_spec.rb
spec/requests/api/commit_statuses_spec.rb
+2
-2
spec/requests/api/commits_spec.rb
spec/requests/api/commits_spec.rb
+1
-1
spec/requests/api/pipelines_spec.rb
spec/requests/api/pipelines_spec.rb
+6
-6
spec/requests/api/triggers_spec.rb
spec/requests/api/triggers_spec.rb
+1
-1
spec/services/ci/create_pipeline_service_spec.rb
spec/services/ci/create_pipeline_service_spec.rb
+3
-3
spec/workers/pipeline_schedule_worker_spec.rb
spec/workers/pipeline_schedule_worker_spec.rb
+6
-6
No files found.
app/controllers/projects/branches_controller.rb
View file @
a6778fc6
...
...
@@ -22,7 +22,7 @@ class Projects::BranchesController < Projects::ApplicationController
# Fetch branches for the specified mode
fetch_branches_by_mode
@refs_pipelines
=
@project
.
pipelines
.
latest_successful_for_refs
(
@branches
.
map
(
&
:name
))
@refs_pipelines
=
@project
.
ci_
pipelines
.
latest_successful_for_refs
(
@branches
.
map
(
&
:name
))
@merged_branch_names
=
repository
.
merged_branch_names
(
@branches
.
map
(
&
:name
))
# n+1: https://gitlab.com/gitlab-org/gitaly/issues/992
...
...
This diff is collapsed.
Click to expand it.
app/controllers/projects/pipelines_controller.rb
View file @
a6778fc6
...
...
@@ -46,7 +46,7 @@ class Projects::PipelinesController < Projects::ApplicationController
end
def
new
@pipeline
=
project
.
pipelines
.
new
(
ref:
@project
.
default_branch
)
@pipeline
=
project
.
all_
pipelines
.
new
(
ref:
@project
.
default_branch
)
end
def
create
...
...
@@ -142,9 +142,9 @@ class Projects::PipelinesController < Projects::ApplicationController
@charts
[
:pipeline_times
]
=
Gitlab
::
Ci
::
Charts
::
PipelineTime
.
new
(
project
)
@counts
=
{}
@counts
[
:total
]
=
@project
.
pipelines
.
count
(
:all
)
@counts
[
:success
]
=
@project
.
pipelines
.
success
.
count
(
:all
)
@counts
[
:failed
]
=
@project
.
pipelines
.
failed
.
count
(
:all
)
@counts
[
:total
]
=
@project
.
all_
pipelines
.
count
(
:all
)
@counts
[
:success
]
=
@project
.
all_
pipelines
.
success
.
count
(
:all
)
@counts
[
:failed
]
=
@project
.
all_
pipelines
.
failed
.
count
(
:all
)
end
private
...
...
@@ -164,7 +164,7 @@ class Projects::PipelinesController < Projects::ApplicationController
# rubocop: disable CodeReuse/ActiveRecord
def
pipeline
@pipeline
||=
project
.
pipelines
.
all_
pipelines
.
includes
(
user: :status
)
.
find_by!
(
id:
params
[
:id
])
.
present
(
current_user:
current_user
)
...
...
This diff is collapsed.
Click to expand it.
app/controllers/projects/tags_controller.rb
View file @
a6778fc6
...
...
@@ -20,7 +20,7 @@ class Projects::TagsController < Projects::ApplicationController
@tags
=
Kaminari
.
paginate_array
(
@tags
).
page
(
params
[
:page
])
tag_names
=
@tags
.
map
(
&
:name
)
@tags_pipelines
=
@project
.
pipelines
.
latest_successful_for_refs
(
tag_names
)
@tags_pipelines
=
@project
.
ci_
pipelines
.
latest_successful_for_refs
(
tag_names
)
@releases
=
project
.
releases
.
where
(
tag:
tag_names
)
respond_to
do
|
format
|
...
...
This diff is collapsed.
Click to expand it.
app/finders/pipelines_finder.rb
View file @
a6778fc6
...
...
@@ -8,7 +8,7 @@ class PipelinesFinder
def
initialize
(
project
,
current_user
,
params
=
{})
@project
=
project
@current_user
=
current_user
@pipelines
=
project
.
pipelines
@pipelines
=
project
.
all_
pipelines
@params
=
params
end
...
...
This diff is collapsed.
Click to expand it.
app/models/ci/pipeline.rb
View file @
a6778fc6
...
...
@@ -12,14 +12,14 @@ module Ci
include
AtomicInternalId
include
EnumWithNil
belongs_to
:project
,
inverse_of: :pipelines
belongs_to
:project
,
inverse_of: :
all_
pipelines
belongs_to
:user
belongs_to
:auto_canceled_by
,
class_name:
'Ci::Pipeline'
belongs_to
:pipeline_schedule
,
class_name:
'Ci::PipelineSchedule'
belongs_to
:merge_request
,
class_name:
'MergeRequest'
has_internal_id
:iid
,
scope: :project
,
presence:
false
,
init:
->
(
s
)
do
s
&
.
project
&
.
pipelines
&
.
maximum
(
:iid
)
||
s
&
.
project
&
.
pipelines
&
.
count
s
&
.
project
&
.
all_pipelines
&
.
maximum
(
:iid
)
||
s
&
.
project
&
.
all_
pipelines
&
.
count
end
has_many
:stages
,
->
{
order
(
position: :asc
)
},
inverse_of: :pipeline
...
...
@@ -174,6 +174,7 @@ module Ci
end
scope
:internal
,
->
{
where
(
source:
internal_sources
)
}
scope
:ci_sources
,
->
{
where
(
config_source:
ci_sources_values
)
}
scope
:sort_by_merge_request_pipelines
,
->
do
sql
=
'CASE ci_pipelines.source WHEN (?) THEN 0 ELSE 1 END, ci_pipelines.id DESC'
...
...
@@ -271,6 +272,10 @@ module Ci
sources
.
reject
{
|
source
|
source
==
"external"
}.
values
end
def
self
.
ci_sources_values
config_sources
.
values_at
(
:repository_source
,
:auto_devops_source
,
:unknown_source
)
end
def
stages_count
statuses
.
select
(
:stage
).
distinct
.
count
end
...
...
This diff is collapsed.
Click to expand it.
app/models/commit.rb
View file @
a6778fc6
...
...
@@ -298,7 +298,7 @@ class Commit
end
def
pipelines
project
.
pipelines
.
where
(
sha:
sha
)
project
.
ci_
pipelines
.
where
(
sha:
sha
)
end
def
last_pipeline
...
...
@@ -312,7 +312,7 @@ class Commit
end
def
status_for_project
(
ref
,
pipeline_project
)
pipeline_project
.
pipelines
.
latest_status_per_commit
(
id
,
ref
)[
id
]
pipeline_project
.
ci_
pipelines
.
latest_status_per_commit
(
id
,
ref
)[
id
]
end
def
set_status_for_ref
(
ref
,
status
)
...
...
This diff is collapsed.
Click to expand it.
app/models/commit_collection.rb
View file @
a6778fc6
...
...
@@ -24,7 +24,7 @@ class CommitCollection
# Setting this status ahead of time removes the need for running a query for
# every commit we're displaying.
def
with_pipeline_status
statuses
=
project
.
pipelines
.
latest_status_per_commit
(
map
(
&
:id
),
ref
)
statuses
=
project
.
ci_
pipelines
.
latest_status_per_commit
(
map
(
&
:id
),
ref
)
each
do
|
commit
|
commit
.
set_status_for_ref
(
ref
,
statuses
[
commit
.
id
])
...
...
This diff is collapsed.
Click to expand it.
app/models/merge_request.rb
View file @
a6778fc6
...
...
@@ -1056,7 +1056,7 @@ class MergeRequest < ActiveRecord::Base
def
all_pipelines
(
shas:
all_commit_shas
)
return
Ci
::
Pipeline
.
none
unless
source_project
@all_pipelines
||=
source_project
.
pipelines
@all_pipelines
||=
source_project
.
ci_
pipelines
.
where
(
sha:
shas
,
ref:
source_branch
)
.
where
(
merge_request:
[
nil
,
self
])
.
sort_by_merge_request_pipelines
...
...
@@ -1220,7 +1220,7 @@ class MergeRequest < ActiveRecord::Base
end
def
base_pipeline
@base_pipeline
||=
project
.
pipelines
@base_pipeline
||=
project
.
ci_
pipelines
.
order
(
id: :desc
)
.
find_by
(
sha:
diff_base_sha
)
end
...
...
This diff is collapsed.
Click to expand it.
app/models/project.rb
View file @
a6778fc6
...
...
@@ -247,7 +247,17 @@ class Project < ActiveRecord::Base
has_many
:container_repositories
,
dependent: :destroy
# rubocop:disable Cop/ActiveRecordDependent
has_many
:commit_statuses
has_many
:pipelines
,
class_name:
'Ci::Pipeline'
,
inverse_of: :project
# The relation :all_pipelines is intented to be used when we want to get the
# whole list of pipelines associated to the project
has_many
:all_pipelines
,
class_name:
'Ci::Pipeline'
,
inverse_of: :project
# The relation :ci_pipelines is intented to be used when we want to get only
# those pipeline which are directly related to CI. There are
# other pipelines, like webide ones, that we won't retrieve
# if we use this relation.
has_many
:ci_pipelines
,
->
{
Feature
.
enabled?
(
:pipeline_ci_sources_only
,
default_enabled:
true
)
?
ci_sources
:
all
},
class_name:
'Ci::Pipeline'
,
inverse_of: :project
has_many
:stages
,
class_name:
'Ci::Stage'
,
inverse_of: :project
# Ci::Build objects store data on the file system such as artifact files and
...
...
@@ -621,7 +631,7 @@ class Project < ActiveRecord::Base
# ref can't be HEAD, can only be branch/tag name or SHA
def
latest_successful_builds_for
(
ref
=
default_branch
)
latest_pipeline
=
pipelines
.
latest_successful_for
(
ref
)
latest_pipeline
=
ci_
pipelines
.
latest_successful_for
(
ref
)
if
latest_pipeline
latest_pipeline
.
builds
.
latest
.
with_artifacts_archive
...
...
@@ -1376,7 +1386,7 @@ class Project < ActiveRecord::Base
return
unless
sha
pipelines
.
order
(
id: :desc
).
find_by
(
sha:
sha
,
ref:
ref
)
ci_
pipelines
.
order
(
id: :desc
).
find_by
(
sha:
sha
,
ref:
ref
)
end
def
latest_successful_pipeline_for_default_branch
...
...
@@ -1385,12 +1395,12 @@ class Project < ActiveRecord::Base
end
@latest_successful_pipeline_for_default_branch
=
pipelines
.
latest_successful_for
(
default_branch
)
ci_
pipelines
.
latest_successful_for
(
default_branch
)
end
def
latest_successful_pipeline_for
(
ref
=
nil
)
if
ref
&&
ref
!=
default_branch
pipelines
.
latest_successful_for
(
ref
)
ci_
pipelines
.
latest_successful_for
(
ref
)
else
latest_successful_pipeline_for_default_branch
end
...
...
This diff is collapsed.
Click to expand it.
app/models/project_services/pipelines_email_service.rb
View file @
a6778fc6
...
...
@@ -38,11 +38,11 @@ class PipelinesEmailService < Service
end
def
can_test?
project
.
pipelines
.
any?
project
.
ci_
pipelines
.
any?
end
def
test_data
(
project
,
user
)
data
=
Gitlab
::
DataBuilder
::
Pipeline
.
build
(
project
.
pipelines
.
last
)
data
=
Gitlab
::
DataBuilder
::
Pipeline
.
build
(
project
.
ci_
pipelines
.
last
)
data
[
:user
]
=
user
.
hook_attrs
data
end
...
...
This diff is collapsed.
Click to expand it.
app/services/ci/create_pipeline_service.rb
View file @
a6778fc6
...
...
@@ -78,7 +78,7 @@ module Ci
# rubocop: disable CodeReuse/ActiveRecord
def
auto_cancelable_pipelines
project
.
pipelines
project
.
ci_
pipelines
.
where
(
ref:
pipeline
.
ref
)
.
where
.
not
(
id:
pipeline
.
id
)
.
where
.
not
(
sha:
project
.
commit
(
pipeline
.
ref
).
try
(
:id
))
...
...
This diff is collapsed.
Click to expand it.
app/services/projects/auto_devops/disable_service.rb
View file @
a6778fc6
...
...
@@ -34,7 +34,7 @@ module Projects
end
def
auto_devops_pipelines
@auto_devops_pipelines
||=
project
.
pipelines
.
auto_devops_source
@auto_devops_pipelines
||=
project
.
ci_
pipelines
.
auto_devops_source
end
end
end
...
...
This diff is collapsed.
Click to expand it.
app/services/test_hooks/project_service.rb
View file @
a6778fc6
...
...
@@ -49,7 +49,7 @@ module TestHooks
end
def
pipeline_events_data
pipeline
=
project
.
pipelines
.
first
pipeline
=
project
.
ci_
pipelines
.
first
throw
(
:validation_error
,
'Ensure the project has CI pipelines.'
)
unless
pipeline
.
present?
Gitlab
::
DataBuilder
::
Pipeline
.
build
(
pipeline
)
...
...
This diff is collapsed.
Click to expand it.
db/fixtures/development/14_pipelines.rb
View file @
a6778fc6
...
...
@@ -104,7 +104,7 @@ class Gitlab::Seeder::Pipelines
def
create_pipeline!
(
project
,
ref
,
commit
)
project
.
pipelines
.
create!
(
sha:
commit
.
id
,
ref:
ref
,
source: :push
)
project
.
ci_
pipelines
.
create!
(
sha:
commit
.
id
,
ref:
ref
,
source: :push
)
end
def
build_create!
(
pipeline
,
opts
=
{})
...
...
This diff is collapsed.
Click to expand it.
lib/api/commit_statuses.rb
View file @
a6778fc6
...
...
@@ -29,7 +29,7 @@ module API
not_found!
(
'Commit'
)
unless
user_project
.
commit
(
params
[
:sha
])
pipelines
=
user_project
.
pipelines
.
where
(
sha:
params
[
:sha
])
pipelines
=
user_project
.
ci_
pipelines
.
where
(
sha:
params
[
:sha
])
statuses
=
::
CommitStatus
.
where
(
pipeline:
pipelines
)
statuses
=
statuses
.
latest
unless
to_boolean
(
params
[
:all
])
statuses
=
statuses
.
where
(
ref:
params
[
:ref
])
if
params
[
:ref
].
present?
...
...
@@ -75,7 +75,7 @@ module API
pipeline
=
@project
.
pipeline_for
(
ref
,
commit
.
sha
)
unless
pipeline
pipeline
=
@project
.
pipelines
.
create!
(
pipeline
=
@project
.
ci_
pipelines
.
create!
(
source: :external
,
sha:
commit
.
sha
,
ref:
ref
,
...
...
This diff is collapsed.
Click to expand it.
lib/api/jobs.rb
View file @
a6778fc6
...
...
@@ -56,7 +56,7 @@ module API
end
# rubocop: disable CodeReuse/ActiveRecord
get
':id/pipelines/:pipeline_id/jobs'
do
pipeline
=
user_project
.
pipelines
.
find
(
params
[
:pipeline_id
])
pipeline
=
user_project
.
ci_
pipelines
.
find
(
params
[
:pipeline_id
])
builds
=
pipeline
.
builds
builds
=
filter_builds
(
builds
,
params
[
:scope
])
builds
=
builds
.
preload
(
:job_artifacts_archive
,
:job_artifacts
,
project:
[
:namespace
])
...
...
This diff is collapsed.
Click to expand it.
lib/api/pipelines.rb
View file @
a6778fc6
...
...
@@ -130,7 +130,7 @@ module API
helpers
do
def
pipeline
@pipeline
||=
user_project
.
pipelines
.
find
(
params
[
:pipeline_id
])
@pipeline
||=
user_project
.
ci_
pipelines
.
find
(
params
[
:pipeline_id
])
end
end
end
...
...
This diff is collapsed.
Click to expand it.
lib/gitlab/badge/coverage/report.rb
View file @
a6778fc6
...
...
@@ -14,7 +14,7 @@ module Gitlab
@ref
=
ref
@job
=
job
@pipeline
=
@project
.
pipelines
.
latest_successful_for
(
@ref
)
@pipeline
=
@project
.
ci_
pipelines
.
latest_successful_for
(
@ref
)
end
def
entity
...
...
This diff is collapsed.
Click to expand it.
lib/gitlab/badge/pipeline/status.rb
View file @
a6778fc6
...
...
@@ -22,7 +22,7 @@ module Gitlab
# rubocop: disable CodeReuse/ActiveRecord
def
status
@project
.
pipelines
@project
.
ci_
pipelines
.
where
(
sha:
@sha
)
.
latest_status
(
@ref
)
||
'unknown'
end
...
...
This diff is collapsed.
Click to expand it.
lib/gitlab/ci/charts.rb
View file @
a6778fc6
...
...
@@ -54,7 +54,7 @@ module Gitlab
# rubocop: disable CodeReuse/ActiveRecord
def
collect
query
=
project
.
pipelines
query
=
project
.
all_
pipelines
.
where
(
"? >
#{
::
Ci
::
Pipeline
.
table_name
}
.created_at AND
#{
::
Ci
::
Pipeline
.
table_name
}
.created_at > ?"
,
@to
,
@from
)
# rubocop:disable GitlabSecurity/SqlInjection
totals_count
=
grouped_count
(
query
)
...
...
@@ -115,7 +115,7 @@ module Gitlab
class
PipelineTime
<
Chart
def
collect
commits
=
project
.
pipelines
.
last
(
30
)
commits
=
project
.
all_
pipelines
.
last
(
30
)
commits
.
each
do
|
commit
|
@labels
<<
commit
.
short_sha
...
...
This diff is collapsed.
Click to expand it.
lib/gitlab/import_export/import_export.yml
View file @
a6778fc6
...
...
@@ -51,7 +51,7 @@ project_tree:
-
resource_label_events
:
-
label
:
:priorities
-
pipelines
:
-
ci_
pipelines
:
-
notes
:
-
:author
-
events
:
...
...
This diff is collapsed.
Click to expand it.
lib/gitlab/import_export/project_tree_restorer.rb
View file @
a6778fc6
...
...
@@ -26,6 +26,8 @@ module Gitlab
@project_members
=
@tree_hash
.
delete
(
'project_members'
)
RelationRenameService
.
rename
(
@tree_hash
)
ActiveRecord
::
Base
.
uncached
do
ActiveRecord
::
Base
.
no_touching
do
create_relations
...
...
@@ -214,7 +216,7 @@ module Gitlab
end
def
nil_iid_pipeline?
(
relation_key
,
relation_item
)
relation_key
==
'pipelines'
&&
relation_item
[
'iid'
].
nil?
relation_key
==
'
ci_
pipelines'
&&
relation_item
[
'iid'
].
nil?
end
end
end
...
...
This diff is collapsed.
Click to expand it.
lib/gitlab/import_export/project_tree_saver.rb
View file @
a6778fc6
...
...
@@ -34,6 +34,8 @@ module Gitlab
project_json
[
'project_members'
]
+=
group_members_json
RelationRenameService
.
add_new_associations
(
project_json
)
project_json
.
to_json
end
...
...
This diff is collapsed.
Click to expand it.
lib/gitlab/import_export/relation_factory.rb
View file @
a6778fc6
...
...
@@ -4,6 +4,7 @@ module Gitlab
module
ImportExport
class
RelationFactory
OVERRIDES
=
{
snippets: :project_snippets
,
ci_pipelines:
'Ci::Pipeline'
,
pipelines:
'Ci::Pipeline'
,
stages:
'Ci::Stage'
,
statuses:
'commit_status'
,
...
...
This diff is collapsed.
Click to expand it.
lib/gitlab/import_export/relation_rename_service.rb
0 → 100644
View file @
a6778fc6
# frozen_string_literal: true
# This class is intended to help with relation renames within Gitlab versions
# and allow compatibility between versions.
# If you have to change one relationship name that is imported/exported,
# you should add it to the RENAMES constant indicating the old name and the
# new one.
# The behavior of these renamed relationships should be transient and it should
# only last one release until you completely remove the renaming from the list.
#
# When importing, this class will check the project hash and:
# - if only the old relationship name is found, it will rename it with the new one
# - if only the new relationship name is found, it will do nothing
# - if it finds both, it will use the new relationship data
#
# When exporting, this class will duplicate the keys in the resulting file.
# This way, if we open the file in an old version of the exporter it will work
# and also it will with the newer versions.
module
Gitlab
module
ImportExport
class
RelationRenameService
RENAMES
=
{
'pipelines'
=>
'ci_pipelines'
# Added in 11.6, remove in 11.7
}.
freeze
def
self
.
rename
(
tree_hash
)
return
unless
tree_hash
&
.
present?
RENAMES
.
each
do
|
old_name
,
new_name
|
old_entry
=
tree_hash
.
delete
(
old_name
)
next
if
tree_hash
[
new_name
]
next
unless
old_entry
tree_hash
[
new_name
]
=
old_entry
end
end
def
self
.
add_new_associations
(
tree_hash
)
RENAMES
.
each
do
|
old_name
,
new_name
|
next
if
tree_hash
.
key?
(
old_name
)
tree_hash
[
old_name
]
=
tree_hash
[
new_name
]
end
end
end
end
end
This diff is collapsed.
Click to expand it.
spec/features/projects/commit/builds_spec.rb
View file @
a6778fc6
...
...
@@ -20,7 +20,7 @@ describe 'project commit pipelines', :js do
visit
pipelines_project_commit_path
(
project
,
project
.
commit
.
sha
)
page
.
within
(
'.table-holder'
)
do
expect
(
page
).
to
have_content
project
.
pipelines
[
0
].
id
# pipeline ids
expect
(
page
).
to
have_content
project
.
ci_
pipelines
[
0
].
id
# pipeline ids
end
end
end
...
...
This diff is collapsed.
Click to expand it.
spec/features/projects/pages_spec.rb
View file @
a6778fc6
...
...
@@ -300,7 +300,7 @@ describe 'Pages' do
let
(
:pipeline
)
do
commit_sha
=
project
.
commit
(
'HEAD'
).
sha
project
.
pipelines
.
create
(
project
.
ci_
pipelines
.
create
(
ref:
'HEAD'
,
sha:
commit_sha
,
source: :push
,
...
...
This diff is collapsed.
Click to expand it.
spec/lib/gitlab/import_export/all_models.yml
View file @
a6778fc6
...
...
@@ -103,7 +103,7 @@ merge_request_diff_commits:
-
merge_request_diff
merge_request_diff_files
:
-
merge_request_diff
pipelines
:
ci_
pipelines
:
-
project
-
user
-
stages
...
...
@@ -265,7 +265,8 @@ project:
-
notification_settings
-
import_data
-
commit_statuses
-
pipelines
-
ci_pipelines
-
all_pipelines
-
stages
-
builds
-
runner_projects
...
...
This diff is collapsed.
Click to expand it.
spec/lib/gitlab/import_export/project_tree_restorer_spec.rb
View file @
a6778fc6
...
...
@@ -197,9 +197,9 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
end
it
'has the correct number of pipelines and statuses'
do
expect
(
@project
.
pipelines
.
size
).
to
eq
(
5
)
expect
(
@project
.
ci_
pipelines
.
size
).
to
eq
(
5
)
@project
.
pipelines
.
zip
([
2
,
2
,
2
,
2
,
2
])
@project
.
ci_
pipelines
.
zip
([
2
,
2
,
2
,
2
,
2
])
.
each
do
|
(
pipeline
,
expected_status_size
)
|
expect
(
pipeline
.
statuses
.
size
).
to
eq
(
expected_status_size
)
end
...
...
This diff is collapsed.
Click to expand it.
spec/lib/gitlab/import_export/project_tree_saver_spec.rb
View file @
a6778fc6
...
...
@@ -119,16 +119,16 @@ describe Gitlab::ImportExport::ProjectTreeSaver do
end
it
'has pipeline stages'
do
expect
(
saved_project_json
.
dig
(
'pipelines'
,
0
,
'stages'
)).
not_to
be_empty
expect
(
saved_project_json
.
dig
(
'
ci_
pipelines'
,
0
,
'stages'
)).
not_to
be_empty
end
it
'has pipeline statuses'
do
expect
(
saved_project_json
.
dig
(
'pipelines'
,
0
,
'stages'
,
0
,
'statuses'
)).
not_to
be_empty
expect
(
saved_project_json
.
dig
(
'
ci_
pipelines'
,
0
,
'stages'
,
0
,
'statuses'
)).
not_to
be_empty
end
it
'has pipeline builds'
do
builds_count
=
saved_project_json
.
dig
(
'pipelines'
,
0
,
'stages'
,
0
,
'statuses'
)
.
dig
(
'
ci_
pipelines'
,
0
,
'stages'
,
0
,
'statuses'
)
.
count
{
|
hash
|
hash
[
'type'
]
==
'Ci::Build'
}
expect
(
builds_count
).
to
eq
(
1
)
...
...
@@ -142,11 +142,11 @@ describe Gitlab::ImportExport::ProjectTreeSaver do
end
it
'has pipeline commits'
do
expect
(
saved_project_json
[
'pipelines'
]).
not_to
be_empty
expect
(
saved_project_json
[
'
ci_
pipelines'
]).
not_to
be_empty
end
it
'has ci pipeline notes'
do
expect
(
saved_project_json
[
'pipelines'
].
first
[
'notes'
]).
not_to
be_empty
expect
(
saved_project_json
[
'
ci_
pipelines'
].
first
[
'notes'
]).
not_to
be_empty
end
it
'has labels with no associations'
do
...
...
This diff is collapsed.
Click to expand it.
spec/lib/gitlab/import_export/relation_rename_service_spec.rb
0 → 100644
View file @
a6778fc6
# frozen_string_literal: true
require
'spec_helper'
describe
Gitlab
::
ImportExport
::
RelationRenameService
do
let
(
:renames
)
do
{
'example_relation1'
=>
'new_example_relation1'
,
'example_relation2'
=>
'new_example_relation2'
}
end
let
(
:user
)
{
create
(
:admin
)
}
let
(
:group
)
{
create
(
:group
,
:nested
)
}
let!
(
:project
)
{
create
(
:project
,
:builds_disabled
,
:issues_disabled
,
name:
'project'
,
path:
'project'
)
}
let
(
:shared
)
{
project
.
import_export_shared
}
before
do
stub_const
(
"
#{
described_class
}
::RENAMES"
,
renames
)
end
context
'when importing'
do
let
(
:project_tree_restorer
)
{
Gitlab
::
ImportExport
::
ProjectTreeRestorer
.
new
(
user:
user
,
shared:
shared
,
project:
project
)
}
let
(
:import_path
)
{
'spec/lib/gitlab/import_export'
}
let
(
:file_content
)
{
IO
.
read
(
"
#{
import_path
}
/project.json"
)
}
let!
(
:json_file
)
{
ActiveSupport
::
JSON
.
decode
(
file_content
)
}
let
(
:tree_hash
)
{
project_tree_restorer
.
instance_variable_get
(
:@tree_hash
)
}
before
do
allow
(
shared
).
to
receive
(
:export_path
).
and_return
(
import_path
)
allow
(
ActiveSupport
::
JSON
).
to
receive
(
:decode
).
with
(
file_content
).
and_return
(
json_file
)
end
context
'when the file has only old relationship names'
do
# Configuring the json as an old version exported file, with only
# the previous association with the old name
before
do
renames
.
each
do
|
old_name
,
_
|
json_file
[
old_name
.
to_s
]
=
[]
end
end
it
'renames old relationships to the new name'
do
expect
(
json_file
.
keys
).
to
include
(
*
renames
.
keys
)
project_tree_restorer
.
restore
expect
(
json_file
.
keys
).
to
include
(
*
renames
.
values
)
expect
(
json_file
.
keys
).
not_to
include
(
*
renames
.
keys
)
end
end
context
'when the file has both the old and new relationships'
do
# Configuring the json as the new version exported file, with both
# the old association name and the new one
before
do
renames
.
each
do
|
old_name
,
new_name
|
json_file
[
old_name
.
to_s
]
=
[
1
]
json_file
[
new_name
.
to_s
]
=
[
2
]
end
end
it
'uses the new relationships and removes the old ones from the hash'
do
expect
(
json_file
.
keys
).
to
include
(
*
renames
.
keys
)
project_tree_restorer
.
restore
expect
(
json_file
.
keys
).
to
include
(
*
renames
.
values
)
expect
(
json_file
.
values_at
(
*
renames
.
values
).
flatten
.
uniq
.
first
).
to
eq
2
expect
(
json_file
.
keys
).
not_to
include
(
*
renames
.
keys
)
end
end
context
'when the file has only new relationship names'
do
# Configuring the json as the future version exported file, with only
# the new association name
before
do
renames
.
each
do
|
_
,
new_name
|
json_file
[
new_name
.
to_s
]
=
[]
end
end
it
'uses the new relationships'
do
expect
(
json_file
.
keys
).
not_to
include
(
*
renames
.
keys
)
project_tree_restorer
.
restore
expect
(
json_file
.
keys
).
to
include
(
*
renames
.
values
)
end
end
end
context
'when exporting'
do
let
(
:project_tree_saver
)
{
Gitlab
::
ImportExport
::
ProjectTreeSaver
.
new
(
project:
project
,
current_user:
user
,
shared:
shared
)
}
let
(
:project_tree
)
{
project_tree_saver
.
send
(
:project_json
)
}
it
'adds old relationships to the exported file'
do
project_tree
.
merge!
(
renames
.
values
.
map
{
|
new_name
|
[
new_name
,
[]]
}.
to_h
)
allow
(
project_tree_saver
).
to
receive
(
:save
)
do
|
arg
|
project_tree_saver
.
send
(
:project_json_tree
)
end
result
=
project_tree_saver
.
save
saved_data
=
ActiveSupport
::
JSON
.
decode
(
result
)
expect
(
saved_data
.
keys
).
to
include
(
*
(
renames
.
keys
+
renames
.
values
))
end
end
end
This diff is collapsed.
Click to expand it.
spec/models/ci/pipeline_spec.rb
View file @
a6778fc6
...
...
@@ -33,8 +33,9 @@ describe Ci::Pipeline, :mailer do
describe
'associations'
do
it
'has a bidirectional relationship with projects'
do
expect
(
described_class
.
reflect_on_association
(
:project
).
has_inverse?
).
to
eq
(
:pipelines
)
expect
(
Project
.
reflect_on_association
(
:pipelines
).
has_inverse?
).
to
eq
(
:project
)
expect
(
described_class
.
reflect_on_association
(
:project
).
has_inverse?
).
to
eq
(
:all_pipelines
)
expect
(
Project
.
reflect_on_association
(
:all_pipelines
).
has_inverse?
).
to
eq
(
:project
)
expect
(
Project
.
reflect_on_association
(
:ci_pipelines
).
has_inverse?
).
to
eq
(
:project
)
end
end
...
...
@@ -1186,7 +1187,7 @@ describe Ci::Pipeline, :mailer do
create
(
:ci_build
,
:allowed_to_fail
,
:failed
,
pipeline:
pipeline
,
name:
'rubocop'
)
create
(
:ci_build
,
:allowed_to_fail
,
:failed
,
pipeline:
pipeline2
,
name:
'rubocop'
)
pipelines
=
project
.
pipelines
.
to_a
pipelines
=
project
.
ci_
pipelines
.
to_a
pipelines
.
each
(
&
:number_of_warnings
)
...
...
This diff is collapsed.
Click to expand it.
spec/models/project_spec.rb
View file @
a6778fc6
...
...
@@ -63,7 +63,7 @@ describe Project do
it
{
is_expected
.
to
have_one
(
:forked_from_project
).
through
(
:fork_network_member
)
}
it
{
is_expected
.
to
have_one
(
:auto_devops
).
class_name
(
'ProjectAutoDevops'
)
}
it
{
is_expected
.
to
have_many
(
:commit_statuses
)
}
it
{
is_expected
.
to
have_many
(
:pipelines
)
}
it
{
is_expected
.
to
have_many
(
:
ci_
pipelines
)
}
it
{
is_expected
.
to
have_many
(
:builds
)
}
it
{
is_expected
.
to
have_many
(
:build_trace_section_names
)}
it
{
is_expected
.
to
have_many
(
:runner_projects
)
}
...
...
@@ -142,6 +142,29 @@ describe Project do
expect
(
subject
.
boards
.
size
).
to
eq
1
end
end
describe
'ci_pipelines association'
do
context
'when feature flag pipeline_ci_sources_only is enabled'
do
it
'returns only pipelines from ci_sources'
do
stub_feature_flags
(
pipeline_ci_sources_only:
true
)
expect
(
Ci
::
Pipeline
).
to
receive
(
:ci_sources
).
and_call_original
subject
.
ci_pipelines
end
end
context
'when feature flag pipeline_ci_sources_only is disabled'
do
it
'returns all pipelines'
do
stub_feature_flags
(
pipeline_ci_sources_only:
false
)
expect
(
Ci
::
Pipeline
).
not_to
receive
(
:ci_sources
).
and_call_original
expect
(
Ci
::
Pipeline
).
to
receive
(
:all
).
and_call_original
.
at_least
(
:once
)
subject
.
ci_pipelines
end
end
end
end
describe
'modules'
do
...
...
@@ -3373,7 +3396,7 @@ describe Project do
context
'with a ref that is not the default branch'
do
it
'returns the latest successful pipeline for the given ref'
do
expect
(
project
.
pipelines
).
to
receive
(
:latest_successful_for
).
with
(
'foo'
)
expect
(
project
.
ci_
pipelines
).
to
receive
(
:latest_successful_for
).
with
(
'foo'
)
project
.
latest_successful_pipeline_for
(
'foo'
)
end
...
...
@@ -3401,7 +3424,7 @@ describe Project do
it
'memoizes and returns the latest successful pipeline for the default branch'
do
pipeline
=
double
(
:pipeline
)
expect
(
project
.
pipelines
).
to
receive
(
:latest_successful_for
)
expect
(
project
.
ci_
pipelines
).
to
receive
(
:latest_successful_for
)
.
with
(
project
.
default_branch
)
.
and_return
(
pipeline
)
.
once
...
...
This diff is collapsed.
Click to expand it.
spec/requests/api/commit_statuses_spec.rb
View file @
a6778fc6
...
...
@@ -16,8 +16,8 @@ describe API::CommitStatuses do
let
(
:get_url
)
{
"/projects/
#{
project
.
id
}
/repository/commits/
#{
sha
}
/statuses"
}
context
'ci commit exists'
do
let!
(
:master
)
{
project
.
pipelines
.
create
(
source: :push
,
sha:
commit
.
id
,
ref:
'master'
,
protected:
false
)
}
let!
(
:develop
)
{
project
.
pipelines
.
create
(
source: :push
,
sha:
commit
.
id
,
ref:
'develop'
,
protected:
false
)
}
let!
(
:master
)
{
project
.
ci_
pipelines
.
create
(
source: :push
,
sha:
commit
.
id
,
ref:
'master'
,
protected:
false
)
}
let!
(
:develop
)
{
project
.
ci_
pipelines
.
create
(
source: :push
,
sha:
commit
.
id
,
ref:
'develop'
,
protected:
false
)
}
context
"reporter user"
do
let
(
:statuses_id
)
{
json_response
.
map
{
|
status
|
status
[
'id'
]
}
}
...
...
This diff is collapsed.
Click to expand it.
spec/requests/api/commits_spec.rb
View file @
a6778fc6
...
...
@@ -818,7 +818,7 @@ describe API::Commits do
end
context
'when the ref has a pipeline'
do
let!
(
:pipeline
)
{
project
.
pipelines
.
create
(
source: :push
,
ref:
'master'
,
sha:
commit
.
sha
,
protected:
false
)
}
let!
(
:pipeline
)
{
project
.
ci_
pipelines
.
create
(
source: :push
,
ref:
'master'
,
sha:
commit
.
sha
,
protected:
false
)
}
it
'includes a "created" status'
do
get
api
(
route
,
current_user
)
...
...
This diff is collapsed.
Click to expand it.
spec/requests/api/pipelines_spec.rb
View file @
a6778fc6
...
...
@@ -304,7 +304,7 @@ describe API::Pipelines do
it
'creates and returns a new pipeline'
do
expect
do
post
api
(
"/projects/
#{
project
.
id
}
/pipeline"
,
user
),
ref:
project
.
default_branch
end
.
to
change
{
project
.
pipelines
.
count
}.
by
(
1
)
end
.
to
change
{
project
.
ci_
pipelines
.
count
}.
by
(
1
)
expect
(
response
).
to
have_gitlab_http_status
(
201
)
expect
(
json_response
).
to
be_a
Hash
...
...
@@ -317,8 +317,8 @@ describe API::Pipelines do
it
'creates and returns a new pipeline using the given variables'
do
expect
do
post
api
(
"/projects/
#{
project
.
id
}
/pipeline"
,
user
),
ref:
project
.
default_branch
,
variables:
variables
end
.
to
change
{
project
.
pipelines
.
count
}.
by
(
1
)
expect_variables
(
project
.
pipelines
.
last
.
variables
,
variables
)
end
.
to
change
{
project
.
ci_
pipelines
.
count
}.
by
(
1
)
expect_variables
(
project
.
ci_
pipelines
.
last
.
variables
,
variables
)
expect
(
response
).
to
have_gitlab_http_status
(
201
)
expect
(
json_response
).
to
be_a
Hash
...
...
@@ -338,8 +338,8 @@ describe API::Pipelines do
it
'creates and returns a new pipeline using the given variables'
do
expect
do
post
api
(
"/projects/
#{
project
.
id
}
/pipeline"
,
user
),
ref:
project
.
default_branch
,
variables:
variables
end
.
to
change
{
project
.
pipelines
.
count
}.
by
(
1
)
expect_variables
(
project
.
pipelines
.
last
.
variables
,
variables
)
end
.
to
change
{
project
.
ci_
pipelines
.
count
}.
by
(
1
)
expect_variables
(
project
.
ci_
pipelines
.
last
.
variables
,
variables
)
expect
(
response
).
to
have_gitlab_http_status
(
201
)
expect
(
json_response
).
to
be_a
Hash
...
...
@@ -353,7 +353,7 @@ describe API::Pipelines do
it
"doesn't create a job"
do
expect
do
post
api
(
"/projects/
#{
project
.
id
}
/pipeline"
,
user
),
ref:
project
.
default_branch
end
.
not_to
change
{
project
.
pipelines
.
count
}
end
.
not_to
change
{
project
.
ci_
pipelines
.
count
}
expect
(
response
).
to
have_gitlab_http_status
(
400
)
end
...
...
This diff is collapsed.
Click to expand it.
spec/requests/api/triggers_spec.rb
View file @
a6778fc6
...
...
@@ -39,7 +39,7 @@ describe API::Triggers do
end
context
'Have a commit'
do
let
(
:pipeline
)
{
project
.
pipelines
.
last
}
let
(
:pipeline
)
{
project
.
ci_
pipelines
.
last
}
it
'creates pipeline'
do
post
api
(
"/projects/
#{
project
.
id
}
/trigger/pipeline"
),
options
.
merge
(
ref:
'master'
)
...
...
This diff is collapsed.
Click to expand it.
spec/services/ci/create_pipeline_service_spec.rb
View file @
a6778fc6
...
...
@@ -44,7 +44,7 @@ describe Ci::CreatePipelineService do
expect
(
pipeline
).
to
be_valid
expect
(
pipeline
).
to
be_persisted
expect
(
pipeline
).
to
be_push
expect
(
pipeline
).
to
eq
(
project
.
pipelines
.
last
)
expect
(
pipeline
).
to
eq
(
project
.
ci_
pipelines
.
last
)
expect
(
pipeline
).
to
have_attributes
(
user:
user
)
expect
(
pipeline
).
to
have_attributes
(
status:
'pending'
)
expect
(
pipeline
.
repository_source?
).
to
be
true
...
...
@@ -731,8 +731,8 @@ describe Ci::CreatePipelineService do
it
'creates a merge request pipeline in the forked project'
do
expect
(
pipeline
).
to
be_persisted
expect
(
project
.
pipelines
).
to
eq
([
pipeline
])
expect
(
target_project
.
pipelines
).
to
be_empty
expect
(
project
.
ci_
pipelines
).
to
eq
([
pipeline
])
expect
(
target_project
.
ci_
pipelines
).
to
be_empty
end
end
...
...
This diff is collapsed.
Click to expand it.
spec/workers/pipeline_schedule_worker_spec.rb
View file @
a6778fc6
...
...
@@ -25,12 +25,12 @@ describe PipelineScheduleWorker do
context
'when there is a scheduled pipeline within next_run_at'
do
shared_examples
'successful scheduling'
do
it
'creates a new pipeline'
do
expect
{
subject
}.
to
change
{
project
.
pipelines
.
count
}.
by
(
1
)
expect
{
subject
}.
to
change
{
project
.
ci_
pipelines
.
count
}.
by
(
1
)
expect
(
Ci
::
Pipeline
.
last
).
to
be_schedule
pipeline_schedule
.
reload
expect
(
pipeline_schedule
.
next_run_at
).
to
be
>
Time
.
now
expect
(
pipeline_schedule
).
to
eq
(
project
.
pipelines
.
last
.
pipeline_schedule
)
expect
(
pipeline_schedule
).
to
eq
(
project
.
ci_
pipelines
.
last
.
pipeline_schedule
)
expect
(
pipeline_schedule
).
to
be_active
end
end
...
...
@@ -54,7 +54,7 @@ describe PipelineScheduleWorker do
end
it
'does not creates a new pipeline'
do
expect
{
subject
}.
not_to
change
{
project
.
pipelines
.
count
}
expect
{
subject
}.
not_to
change
{
project
.
ci_
pipelines
.
count
}
end
end
...
...
@@ -64,7 +64,7 @@ describe PipelineScheduleWorker do
end
it
'creates a failed pipeline with the reason'
do
expect
{
subject
}.
to
change
{
project
.
pipelines
.
count
}.
by
(
1
)
expect
{
subject
}.
to
change
{
project
.
ci_
pipelines
.
count
}.
by
(
1
)
expect
(
Ci
::
Pipeline
.
last
).
to
be_config_error
expect
(
Ci
::
Pipeline
.
last
.
yaml_errors
).
not_to
be_nil
end
...
...
@@ -105,7 +105,7 @@ describe PipelineScheduleWorker do
end
it
'does not create a pipeline'
do
expect
{
subject
}.
not_to
change
{
project
.
pipelines
.
count
}
expect
{
subject
}.
not_to
change
{
project
.
ci_
pipelines
.
count
}
end
it
'does not raise an exception'
do
...
...
@@ -135,7 +135,7 @@ describe PipelineScheduleWorker do
end
it
'does not create a pipeline'
do
expect
{
subject
}.
not_to
change
{
project
.
pipelines
.
count
}
expect
{
subject
}.
not_to
change
{
project
.
ci_
pipelines
.
count
}
end
it
'does not raise an exception'
do
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment