@@ -15,7 +15,7 @@ import (
1515)
1616
1717//ImportUpdate import and update the pipeline in the project
18- func ImportUpdate (ctx context.Context , db gorp.SqlExecutor , proj sdk.Project , pip * sdk.Pipeline , msgChan chan <- sdk.Message , u sdk. Identifiable ) error {
18+ func ImportUpdate (ctx context.Context , db gorp.SqlExecutor , proj sdk.Project , pip * sdk.Pipeline , msgChan chan <- sdk.Message ) error {
1919 t := time .Now ()
2020 log .Debug ("ImportUpdate> Begin" )
2121 defer log .Debug ("ImportUpdate> End (%d ns)" , time .Since (t ).Nanoseconds ())
@@ -40,155 +40,63 @@ func ImportUpdate(ctx context.Context, db gorp.SqlExecutor, proj sdk.Project, pi
4040
4141 rx := sdk .NamePatternSpaceRegex
4242 pip .ID = oldPipeline .ID
43+
44+ // Delete old stages
45+ for _ , s := range oldPipeline .Stages {
46+ if err := DeleteStageByID (ctx , db , & s ); err != nil {
47+ return sdk .WrapError (err , "unable to delete stage %d" , s .ID )
48+ }
49+ }
50+
51+ // delete old parameters
52+ if err := DeleteAllParameterFromPipeline (db , oldPipeline .ID ); err != nil {
53+ return sdk .WrapError (err , "unable to delete pipeline parameters for pipeline %d" , oldPipeline .ID )
54+ }
55+
56+ // Insert new stages
4357 for i := range pip .Stages {
4458 s := & pip .Stages [i ]
4559 // stage name mandatory if there are many stages
4660 if len (pip .Stages ) > 1 && ! rx .MatchString (s .Name ) {
4761 return sdk .NewError (sdk .ErrInvalidName , fmt .Errorf ("Invalid stage name '%s'. It should match %s" , s .Name , sdk .NamePatternSpace ))
4862 }
49- var stageFound bool
50- var oldStage * sdk.Stage
51- for _ , os := range oldPipeline .Stages {
52- if s .Name == os .Name {
53- oldStage = & os
54- stageFound = true
55- break
56- }
57- }
58- if ! stageFound {
59- //Insert stage
60- log .Debug ("Inserting stage %s" , s .Name )
61- s .PipelineID = pip .ID
62- if err := InsertStage (db , s ); err != nil {
63- return sdk .WrapError (err , "Unable to insert stage %s in %s" , s .Name , pip .Name )
64- }
65- //Insert stage's Jobs
66- for x := range s .Jobs {
67- jobAction := & s .Jobs [x ]
68- if errs := CheckJob (ctx , db , jobAction ); errs != nil {
69- log .Debug ("CheckJob > %s" , errs )
70- return errs
71- }
72- if err := action .CheckChildrenForGroupIDs (ctx , db , & jobAction .Action , groupIDs ); err != nil {
73- return err
74- }
75- jobAction .PipelineStageID = s .ID
76- jobAction .Action .Type = sdk .JoinedAction
77- log .Debug ("Creating job %s on stage %s on pipeline %s" , jobAction .Action .Name , s .Name , pip .Name )
78- if err := InsertJob (db , jobAction , s .ID , pip ); err != nil {
79- return sdk .WrapError (err , "Unable to insert job %s in %s" , jobAction .Action .Name , pip .Name )
80- }
81- if msgChan != nil {
82- msgChan <- sdk .NewMessage (sdk .MsgPipelineJobAdded , jobAction .Action .Name , s .Name )
83- }
84- }
85- if msgChan != nil {
86- msgChan <- sdk .NewMessage (sdk .MsgPipelineStageAdded , s .Name )
87- }
88- } else {
89- //Update
90- log .Debug ("> Updating stage %s" , oldStage .Name )
91- msgChan <- sdk .NewMessage (sdk .MsgPipelineStageUpdating , oldStage .Name )
92- msgChan <- sdk .NewMessage (sdk .MsgPipelineStageDeletingOldJobs , oldStage .Name )
93- for x := range s .Jobs {
94- jobAction := & s .Jobs [x ]
95- //Check the job
96- if errs := CheckJob (ctx , db , jobAction ); errs != nil {
97- log .Debug (">> CheckJob > %s" , errs )
98- return errs
99- }
100- if err := action .CheckChildrenForGroupIDs (ctx , db , & jobAction .Action , groupIDs ); err != nil {
101- return err
102- }
103- }
104- // Delete all existing jobs in existing stage
105- for _ , oj := range oldStage .Jobs {
106- if err := DeleteJob (db , oj ); err != nil {
107- return sdk .WrapError (err , "unable to delete job %s in %s" , oj .Action .Name , pip .Name )
108- }
109- msgChan <- sdk .NewMessage (sdk .MsgPipelineJobDeleted , oj .Action .Name , s .Name )
110- }
111- msgChan <- sdk .NewMessage (sdk .MsgPipelineStageInsertingNewJobs , oldStage .Name )
112- // then insert job from yml into existing stage
113- for x := range s .Jobs {
114- j := & s .Jobs [x ]
115- //Insert the job
116- j .PipelineStageID = oldStage .ID
117- j .Action .Type = sdk .JoinedAction
118- log .Debug (">> Creating job %s on stage %s on pipeline %s stageID: %d" , j .Action .Name , s .Name , pip .Name , oldStage .ID )
119- if err := InsertJob (db , j , oldStage .ID , pip ); err != nil {
120- return sdk .WrapError (err , "Unable to insert job %s in %s" , j .Action .Name , pip .Name )
121- }
122- if msgChan != nil {
123- msgChan <- sdk .NewMessage (sdk .MsgPipelineJobAdded , j .Action .Name , s .Name )
124- }
125- }
12663
127- if oldStage .BuildOrder != s .BuildOrder {
128- s .ID = oldStage .ID
129- if err := updateStageOrder (db , s .ID , s .BuildOrder ); err != nil {
130- return sdk .WrapError (err , "Unable to update stage %s" , s .Name )
131- }
132- }
133-
134- //Update stage
135- if msgChan != nil {
136- msgChan <- sdk .NewMessage (sdk .MsgPipelineStageUpdated , s .Name )
137- }
64+ //Insert stage
65+ log .Debug ("Inserting stage %s" , s .Name )
66+ s .PipelineID = pip .ID
67+ if err := InsertStage (db , s ); err != nil {
68+ return sdk .WrapError (err , "Unable to insert stage %s in %s" , s .Name , pip .Name )
13869 }
139- }
140-
141- //Check if we have to delete stages
142- for _ , os := range oldPipeline .Stages {
143- var stageFound bool
144- var currentStage sdk.Stage
145- for _ , s := range pip .Stages {
146- if s .Name == os .Name {
147- stageFound = true
148- currentStage = s
149- currentStage .ID = os .ID
150- break
70+ //Insert stage's Jobs
71+ for x := range s .Jobs {
72+ jobAction := & s .Jobs [x ]
73+ if errs := CheckJob (ctx , db , jobAction ); errs != nil {
74+ log .Debug ("CheckJob > %s" , errs )
75+ return errs
15176 }
152- }
153- if ! stageFound {
154- for x := range os .Jobs {
155- j := os .Jobs [x ]
156- if err := DeleteJob (db , j ); err != nil {
157- return sdk .WrapError (err , "unable to delete job %s in %s" , j .Action .Name , pip .Name )
158- }
159- if msgChan != nil {
160- msgChan <- sdk .NewMessage (sdk .MsgPipelineJobDeleted , j .Action .Name , os .Name )
161- }
77+ if err := action .CheckChildrenForGroupIDs (ctx , db , & jobAction .Action , groupIDs ); err != nil {
78+ return err
16279 }
163- if err := DeleteStageByID (ctx , db , & os ); err != nil {
164- return sdk .WrapError (err , "unable to delete stage %d" , os .ID )
80+ jobAction .PipelineStageID = s .ID
81+ jobAction .Action .Type = sdk .JoinedAction
82+ log .Debug ("Creating job %s on stage %s on pipeline %s" , jobAction .Action .Name , s .Name , pip .Name )
83+ if err := InsertJob (db , jobAction , s .ID , pip ); err != nil {
84+ return sdk .WrapError (err , "Unable to insert job %s in %s" , jobAction .Action .Name , pip .Name )
16585 }
16686 if msgChan != nil {
167- msgChan <- sdk .NewMessage (sdk .MsgPipelineStageDeleted , os .Name )
168- }
169- } else {
170- // Update stage
171- if err := UpdateStage (db , & currentStage ); err != nil {
172- return sdk .WrapError (err , "cannot update stage %s (id=%d) for conditions, build_order and name" , currentStage .Name , currentStage .ID )
87+ msgChan <- sdk .NewMessage (sdk .MsgPipelineJobAdded , jobAction .Action .Name , s .Name )
17388 }
17489 }
90+ if msgChan != nil {
91+ msgChan <- sdk .NewMessage (sdk .MsgPipelineStageAdded , s .Name )
92+ }
93+
17594 }
17695
96+ // Insert new parameters
17797 for _ , param := range pip .Parameter {
178- found := false
179- for _ , oldParam := range oldPipeline .Parameter {
180- if param .Name == oldParam .Name {
181- found = true
182- if err := UpdateParameterInPipeline (db , pip .ID , oldParam .Name , param ); err != nil {
183- return sdk .WrapError (err , "cannot update parameter %s" , param .Name )
184- }
185- break
186- }
187- }
188- if ! found {
189- if err := InsertParameterInPipeline (db , pip .ID , & param ); err != nil {
190- return sdk .WrapError (err , "cannot insert parameter %s" , param .Name )
191- }
98+ if err := InsertParameterInPipeline (db , pip .ID , & param ); err != nil {
99+ return sdk .WrapError (err , "cannot insert parameter %s" , param .Name )
192100 }
193101 }
194102
0 commit comments