Class: Gitlab::Ci::JobDefinitions::FindOrCreate
- Inherits:
-
Object
- Object
- Gitlab::Ci::JobDefinitions::FindOrCreate
- Defined in:
- lib/gitlab/ci/job_definitions/find_or_create.rb
Constant Summary collapse
- BATCH_SIZE =
50
Instance Method Summary collapse
- #execute ⇒ Object
-
#initialize(pipeline, definitions: []) ⇒ FindOrCreate
constructor
A new instance of FindOrCreate.
Constructor Details
#initialize(pipeline, definitions: []) ⇒ FindOrCreate
Returns a new instance of FindOrCreate.
9 10 11 12 13 |
# File 'lib/gitlab/ci/job_definitions/find_or_create.rb', line 9 def initialize(pipeline, definitions: []) @project_id = pipeline.project_id @partition_id = pipeline.partition_id @job_definitions = Array.wrap(definitions).uniq(&:checksum) end |
Instance Method Details
#execute ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/gitlab/ci/job_definitions/find_or_create.rb', line 15 def execute return [] if job_definitions.empty? existing_definitions = fetch_records_for(job_definitions) existing_definitions_by_checksum = existing_definitions.group_by(&:checksum) missing_definitions = @job_definitions.reject do |d| existing_definitions_by_checksum[d.checksum] end return existing_definitions if missing_definitions.empty? insert_missing(missing_definitions) existing_definitions + fetch_records_for(missing_definitions) end |