• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

moosetechnology / GitProjectHealth / 13386686180

18 Feb 2025 08:51AM UTC coverage: 54.598% (-7.4%) from 62.03%
13386686180

Pull #132

github

web-flow
Merge 3ce8c1d16 into 8ff2bbfd9
Pull Request #132: renaming all importer

965 of 2132 new or added lines in 16 files covered. (45.26%)

2104 existing lines in 4 files now uncovered.

9624 of 17627 relevant lines covered (54.6%)

0.55 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

68.8
/src/GitLabProjectHealth-Model-Importer/GitlabWithMergeRequestModelImporter.class.st
1
Class {
2
        #name : #GitlabWithMergeRequestModelImporter,
3
        #superclass : #GitlabModelImporter,
4
        #category : #'GitLabProjectHealth-Model-Importer'
5
}
6

7
{ #category : #'import - commits' }
NEW
8
GitlabWithMergeRequestModelImporter >> commitsOfProject: aGLHProject forRefName: refName until: toDate [
×
NEW
9

×
NEW
10
        | params results allCommits |
×
NEW
11
        
×
NEW
12
        params := { 
×
NEW
13
                #ref_name -> refName.
×
NEW
14
                #until -> (toDate ifNotNil: [ toDate asDateAndTime asString ] ifNil: [ '' ]) 
×
NEW
15
        } asDictionary.
×
NEW
16
        results := self repoApi commits getAllInProject: aGLHProject id withParams: params.
×
NEW
17
        allCommits := (results collect: [ :commitsJson | self parseCommitsResult: commitsJson ]) flattened.
×
NEW
18
        
×
NEW
19
        self glhModel addAll: allCommits unless: self blockOnIdEquality.
×
NEW
20
        aGLHProject repository commits addAll: allCommits unless: self blockOnIdEquality.
×
NEW
21

×
NEW
22
        self withCommitDiffs ifTrue: [
×
NEW
23
                aGLHProject repository commits do: [ :commit |
×
NEW
24
                        self importDiffOfCommit: commit ] ].
×
NEW
25
        
×
NEW
26
        ^allCommits
×
NEW
27
]
×
28

29
{ #category : #'private - api' }
30
GitlabWithMergeRequestModelImporter >> completeImportProject: aGLHProject [
1✔
31

1✔
32
        | completedProject |
1✔
33
        completedProject := super completeImportProject: aGLHProject.
1✔
34
        "for this initial import, with only look at some but not all MR"
1✔
35
        withInitialMergeRequest ifTrue: [
1✔
36
                self
1✔
37
                        importMergeRequests: completedProject
1✔
38
                        since: DateAndTime today
1✔
39
                        until: DateAndTime now ].
1✔
40

1✔
41
        ^ completedProject
1✔
42
]
1✔
43

44
{ #category : #'private - configure reader' }
45
GitlabWithMergeRequestModelImporter >> configureReaderForMergeRequest: reader [
1✔
46
        "declare quil y a un array a mapper"
1✔
47

1✔
48
        reader for: #ArrayOfMergeRequest customDo: [ :customMappting |
1✔
49
                customMappting listOfElementSchema: GLHMergeRequest ].
1✔
50

1✔
51
        "declare la liste des properties"
1✔
52
        reader for: GLHMergeRequest do: [ :mapping |
1✔
53
                mapping mapInstVars:
1✔
54
                        #( blocking_discussions_resolved changes_count description
1✔
55
                           detailed_merge_status discussion_locked downvotes draft first_deployed_to_production_at
1✔
56
                           force_remove_source_branch has_conflicts id iid labels latest_build_finished_at
1✔
57
                           latest_build_started_at merge_commit_sha merge_status
1✔
58
                           merge_when_pipeline_succeeds merged_at milestone project_id
1✔
59
                           reference references_full references_relative
1✔
60
                           references_short sha should_remove_source_branch
1✔
61
                           source_branch source_project_id squash squash_commit_sha
1✔
62
                           squash_on_merge state subscribed target_branch target_project_id
1✔
63
                           task_completion_status_completed_count
1✔
64
                           task_completion_status_count time_stats_human_time_estimate
1✔
65
                           time_stats_human_total_time_spent
1✔
66
                           time_stats_time_estimate time_stats_total_time_spent
1✔
67
                           title updated_at upvotes user_notes_count web_url work_in_progress ).
1✔
68
                (mapping mapInstVar: #created_at) valueSchema: DateAndTime.
1✔
69
                (mapping mapInstVar: #updated_at) valueSchema: DateAndTime.
1✔
70
                (mapping mapInstVar: #merged_at) valueSchema: DateAndTime.
1✔
71
                (mapping mapInstVar: #closed_at) valueSchema: DateAndTime.
1✔
72
                "(mapping mapInstVar: #assignee) valueSchema: GLHUser."
1✔
73
                mapping
1✔
74
                        mapProperty: #author
1✔
75
                        getter: [  ]
1✔
76
                        setter: [ :object :value |
1✔
77
                        object cacheAt: #authorID put: (value at: #id) ].
1✔
78
                mapping
1✔
79
                        mapProperty: #merge_user
1✔
80
                        getter: [  ]
1✔
81
                        setter: [ :object :value | 
1✔
82
                                value ifNotNil: [
1✔
83
                                        object cacheAt: #mergeUserID put: (value at: #id) ] ] ].
1✔
84

1✔
85
        "(mapping mapInstVar: #closed_by) valueSchema: GLHUser.
1✔
86
        (mapping mapInstVar: #mergeCommit) valueSchema: GLHCommit."
1✔
87
        "indique ce que doit faire le reader lorsqu'il parse une DateAndTime object"
1✔
88
        reader for: DateAndTime customDo: [ :mapping |
1✔
89
                mapping decoder: [ :string |
1✔
90
                        string ifNil: [ nil ] ifNotNil: [ DateAndTime fromString: string ] ] ]
1✔
91
]
1✔
92

93
{ #category : #'import - commits' }
NEW
94
GitlabWithMergeRequestModelImporter >> importCommitsOfBranch: aGLHBranch [
×
NEW
95

×
NEW
96
        | commits |
×
NEW
97
        "        result := self glhApi
×
NEW
98
                          commitsOfProject: aGLHBranch repository project id
×
NEW
99
                          forRefName: aGLHBranch name."
×
NEW
100
        commits := self
×
NEW
101
                           importCommitsOfBranch: aGLHBranch
×
NEW
102
                           forRefName: aGLHBranch name
×
NEW
103
                           since: withCommitsSince.
×
NEW
104

×
NEW
105
        self chainsCommitsFrom: commits.
×
NEW
106

×
NEW
107
        commits do: [ :aCommit |
×
NEW
108
                aCommit repository: aGLHBranch repository.
×
NEW
109
                self completeImportedCommit: aCommit. 
×
NEW
110
                 ]
×
NEW
111
]
×
112

113
{ #category : #'import - commits' }
114
GitlabWithMergeRequestModelImporter >> importDiffOfCommit: aCommit [
1✔
115

1✔
116
        super importDiffOfCommit: aCommit.
1✔
117
        
1✔
118
        "changes are added into the model during the import"
1✔
119
        aCommit diffs do: [ :diff | self importDiffRangesForDiff: diff ].
1✔
120

1✔
121
        ^ aCommit diffs
1✔
122
]
1✔
123

124
{ #category : #'import - merge request' }
125
GitlabWithMergeRequestModelImporter >> importDiffOfMergeRequest: aMergeRequest [
1✔
126

1✔
127
        | result diffsResult |
1✔
128
        aMergeRequest diffs ifNotEmpty: [
1✔
129
                'Diff of already importer: '
1✔
130
                , aMergeRequest iid printString recordInfo.
1✔
131
                ^ aMergeRequest diffs ].
1✔
132
        ('Import diff commits of MR ' , aMergeRequest iid printString)
1✔
133
                recordInfo.
1✔
134
        result := self repoApi mergeRequests diffsOf: aMergeRequest iid inProject: aMergeRequest project_id.
1✔
135

1✔
136
        diffsResult := self newParseDiffResult: result.
1✔
137

1✔
138

1✔
139
        aMergeRequest diffs
1✔
140
                addAll: diffsResult
1✔
141
                unless: self blockForDiffEquality.
1✔
142
        self glhModel
1✔
143
                addAll: aMergeRequest diffs
1✔
144
                unless: self blockForDiffEquality.
1✔
145

1✔
146
        aMergeRequest diffs do: [ :diff | self importDiffRangesForDiff: diff ].
1✔
147

1✔
148
        ^ aMergeRequest diffs
1✔
149
]
1✔
150

151
{ #category : #'import - merge request' }
NEW
152
GitlabWithMergeRequestModelImporter >> importMergeRequestCommits: aGLPHEMergeRequest [
×
NEW
153

×
NEW
154
        | commits result |
×
NEW
155
        aGLPHEMergeRequest commits ifNotNil: [ ^ aGLPHEMergeRequest commits ].
×
NEW
156
        
×
NEW
157
        result := self repoApi mergeRequests commitsOf: aGLPHEMergeRequest iid inProject: aGLPHEMergeRequest project id.
×
NEW
158
        
×
NEW
159
        commits := (result collect: [ :commitsJson | self parseCommitsResult: commitsJson ]) flattened.
×
NEW
160
        commits := commits collect: [ :commit | self importCommit: commit id ofProject: aGLPHEMergeRequest project ].
×
NEW
161
        aGLPHEMergeRequest commits: commits.
×
NEW
162

×
NEW
163

×
NEW
164
        ^ commits
×
NEW
165
]
×
166

167
{ #category : #'import - merge request' }
168
GitlabWithMergeRequestModelImporter >> importMergeRequestMergeCommits: aGLPHEMergeRequest [
1✔
169

1✔
170
        | foundCommits |
1✔
171
        foundCommits := OrderedCollection new.
1✔
172

1✔
173
        ('Import commit sha of MR:  ' , aGLPHEMergeRequest iid printString)
1✔
174
                recordInfo.
1✔
175
        "the founds commits are added to the model during their respective import"
1✔
176
        aGLPHEMergeRequest mergeRequestCommit: ((self
1✔
177
                          importCommitOfProject: aGLPHEMergeRequest project
1✔
178
                          withId: aGLPHEMergeRequest sha) ifNotNil: [ :commit |
1✔
179
                         foundCommits add: commit ]).
1✔
180

1✔
181
        ('Import commit merge_commit_sha of MR:  '
1✔
182
         , aGLPHEMergeRequest iid printString) recordInfo.
1✔
183
        aGLPHEMergeRequest mergedCommit: ((self
1✔
184
                          importCommitOfProject: aGLPHEMergeRequest project
1✔
185
                          withId: aGLPHEMergeRequest merge_commit_sha) ifNotNil: [ :commit |
1✔
186
                         foundCommits add: commit ]).
1✔
187

1✔
188
        ('Import commit squash_commit_sha of MR:  '
1✔
189
         , aGLPHEMergeRequest iid printString) recordInfo.
1✔
190
        aGLPHEMergeRequest squashCommit: ((self
1✔
191
                          importCommitOfProject: aGLPHEMergeRequest project
1✔
192
                          withId: aGLPHEMergeRequest squash_commit_sha) ifNotNil: [ :commit |
1✔
193
                         foundCommits add: commit ]).
1✔
194

1✔
195

1✔
196
        self chainsCommitsFrom: foundCommits.
1✔
197
        ^ foundCommits
1✔
198
]
1✔
199

200
{ #category : #'import - merge request' }
201
GitlabWithMergeRequestModelImporter >> importMergeRequests: aGLHProject [
1✔
202

1✔
203
        | results parsedResults mrs |
1✔
204
        ('Import merge request of Project: ' , aGLHProject id printString)
1✔
205
                recordInfo.
1✔
206

1✔
207
        results := self repoApi mergeRequests allOfProject: aGLHProject id.
1✔
208
        parsedResults := (results collect: [ :projectsJson | self parseMergeRequestResult: projectsJson ]) flattened. 
1✔
209

1✔
210
        aGLHProject mergeRequests
1✔
211
                addAll: parsedResults
1✔
212
                unless: self blockOnIdEquality.
1✔
213

1✔
214
        mrs := self glhModel
1✔
215
                       addAll: aGLHProject mergeRequests
1✔
216
                       unless: self blockOnIdEquality.
1✔
217

1✔
218

1✔
219
        "gets it related commits"
1✔
220
        aGLHProject mergeRequests do: [ :mr |
1✔
221
                self importMergeRequestMergeCommits: mr ].
1✔
222

1✔
223

1✔
224
        self withCommitDiffs ifTrue: [
1✔
225
                aGLHProject mergeRequests do: [ :mr |
1✔
226
                        self importDiffOfMergeRequest: mr ] ].
1✔
227

1✔
228
        ^ mrs
1✔
229
]
1✔
230

231
{ #category : #'import - merge request' }
NEW
232
GitlabWithMergeRequestModelImporter >> importMergeRequests: aGLHProject since: fromDate until: toDate [
×
NEW
233

×
NEW
234
        | params result mergeRequests |
×
NEW
235
        ('import MR of Project ' , aGLHProject name) recordInfo.
×
NEW
236
        params := {
×
NEW
237
                          (#created_after
×
NEW
238
                           ->
×
NEW
239
                           (fromDate
×
NEW
240
                                    ifNotNil: [ fromDate asDateAndTime asString ]
×
NEW
241
                                    ifNil: [ '' ])).
×
NEW
242
                          (#created_before
×
NEW
243
                           ->
×
NEW
244
                           (toDate
×
NEW
245
                                    ifNotNil: [ toDate asDateAndTime asString ]
×
NEW
246
                                    ifNil: [ '' ])).
×
NEW
247
                          (#scope -> 'all') } asDictionary.
×
NEW
248

×
NEW
249
        result := self repoApi mergeRequests
×
NEW
250
                          allOfProject: aGLHProject id
×
NEW
251
                          withParams: params.
×
NEW
252
        mergeRequests := (result collect: [ :mergeRequestsJson |
×
NEW
253
                                  self parseMergeRequestResult: mergeRequestsJson ])
×
NEW
254
                                 flattened.
×
NEW
255

×
NEW
256
        aGLHProject mergeRequests
×
NEW
257
                addAll: mergeRequests
×
NEW
258
                unless: self blockOnIdEquality.
×
NEW
259

×
NEW
260
        "gets it related commits"
×
NEW
261
        aGLHProject mergeRequests do: [ :mr |
×
NEW
262
                self importMergeRequestMergeCommits: mr ].
×
NEW
263

×
NEW
264
        self withCommitDiffs ifTrue: [
×
NEW
265
                aGLHProject mergeRequests do: [ :mr |
×
NEW
266
                        self importDiffOfMergeRequest: mr ] ].
×
NEW
267

×
NEW
268
        self glhModel
×
NEW
269
                addAll: mergeRequests
×
NEW
270
                unless: (self blockEqualityOn: #iid).
×
NEW
271

×
NEW
272
        ^ mergeRequests
×
NEW
273
]
×
274

275
{ #category : #'import - merge request' }
NEW
276
GitlabWithMergeRequestModelImporter >> importMergeResquestApprovals: aGLPHEMergeRequest [
×
NEW
277

×
NEW
278
        | results parsedResult |
×
NEW
279
        (String streamContents: [ :str |
×
NEW
280
                 str << 'Check approvals of '.
×
NEW
281
                 aGLPHEMergeRequest printOn: str ]) recordInfo.
×
NEW
282
        results := self repoApi mergeRequests approvalsOf: aGLPHEMergeRequest iid inProject: aGLPHEMergeRequest project id.
×
NEW
283

×
NEW
284
        parsedResult := generalReader
×
NEW
285
                                on: results readStream;
×
NEW
286
                                next.
×
NEW
287

×
NEW
288
        (parsedResult at: #approved_by) do: [ :approvedUser |
×
NEW
289
                aGLPHEMergeRequest addApproved_by:
×
NEW
290
                        (self importUser: ((approvedUser at: #user) at: #id)) ].
×
NEW
291
        aGLPHEMergeRequest approved: (parsedResult at: #approved).
×
NEW
292
        ^ aGLPHEMergeRequest
×
NEW
293
]
×
294

295
{ #category : #'import - merge request' }
296
GitlabWithMergeRequestModelImporter >> importMergeResquestAuthor: aGLPHEMergeRequest [
1✔
297

1✔
298
        | authorID |
1✔
299
        aGLPHEMergeRequest author ifNotNil: [ ^ aGLPHEMergeRequest author ].
1✔
300
        authorID := aGLPHEMergeRequest cacheAt: #authorID ifAbsent: [
1✔
301
                            | result |
1✔
302
                            result := self repoApi mergeRequests
1✔
303
                                              get: aGLPHEMergeRequest iid
1✔
304
                                              inProject: aGLPHEMergeRequest project_id.
1✔
305

1✔
306
                            (generalReader
1✔
307
                                     on: result readStream;
1✔
308
                                     next) at: #author at: #id ].
1✔
309
        ^aGLPHEMergeRequest author: (self importUser: authorID)
1✔
310
]
1✔
311

312
{ #category : #'import - merge request' }
313
GitlabWithMergeRequestModelImporter >> importMergeResquestMerger: aGLPHEMergeRequest [
1✔
314

1✔
315
        | authorID |
1✔
316
        aGLPHEMergeRequest merge_user ifNotNil: [
1✔
317
                ^ aGLPHEMergeRequest merge_user ].
1✔
318
        authorID := aGLPHEMergeRequest cacheAt: #mergeUserID ifAbsent: [
1✔
319
                            | result |
1✔
320
                            result := self repoApi mergeRequests
1✔
321
                                              get: aGLPHEMergeRequest iid
1✔
322
                                              inProject: aGLPHEMergeRequest project_id.
1✔
323
                            (generalReader
1✔
324
                                     on: result readStream;
1✔
325
                                     next)
1✔
326
                                    at: #merge_user
1✔
327
                                    ifPresent: [ :mergeUser |
1✔
328
                                    mergeUser ifNotNil: [ :mruser | mruser at: #id ] ] ].
1✔
329
        ^aGLPHEMergeRequest merge_user: (self importUser: authorID)
1✔
330
]
1✔
331

332
{ #category : #'import - projects' }
333
GitlabWithMergeRequestModelImporter >> importProject: aProjectID [
1✔
334

1✔
335
        | result projectResult |
1✔
336
        ('Import project with id:  ' , aProjectID printString) recordInfo.
1✔
337

1✔
338
        (glhModel allWithType: GLHProject)
1✔
339
                detect: [ :project | project id = aProjectID ]
1✔
340
                ifOne: [ :project | ^ project ].
1✔
341

1✔
342
        result := self repoApi projects get: aProjectID.
1✔
343
        projectResult := self parseProjectResult: result.
1✔
344

1✔
345
        ^ self completeImportProject: projectResult
1✔
346
]
1✔
347

348
{ #category : #'private - api' }
349
GitlabWithMergeRequestModelImporter >> importRepository: aGLHRepository [
1✔
350

1✔
351
        super importRepository: aGLHRepository.
1✔
352

1✔
353
        withInitialCommits ifTrue: [
1✔
354
                aGLHRepository branches do: [ :branch |
1✔
355
                        self importCommitsOfBranch: branch ] ]
1✔
356
]
1✔
357

358
{ #category : #initialization }
359
GitlabWithMergeRequestModelImporter >> initReader [
1✔
360

1✔
361
        super initReader.
1✔
362
        self configureReaderForMergeRequest: generalReader
1✔
363
]
1✔
364

365
{ #category : #initialization }
366
GitlabWithMergeRequestModelImporter >> initialize [
1✔
367

1✔
368
        super initialize.
1✔
369
        withCommitDiffs := true
1✔
370
]
1✔
371

372
{ #category : #'private - parsing' }
373
GitlabWithMergeRequestModelImporter >> parseMergeRequestResult: result [
1✔
374

1✔
375
        generalReader on: result readStream.
1✔
376
        ^ generalReader nextAs: #ArrayOfMergeRequest
1✔
377
]
1✔
378

379
{ #category : #'private - parsing' }
380
GitlabWithMergeRequestModelImporter >> parseProjectResult: aResult [ 
1✔
381
                | reader |
1✔
382
        reader := NeoJSONReader on: aResult readStream.
1✔
383
        reader for: GLHProject do: [ :mapping |
1✔
384
                mapping mapInstVars. ].
1✔
385
"        reader mapInstVarsFor: GLHProject."
1✔
386

1✔
387
        ^ reader nextAs: GLHProject
1✔
388
]
1✔
389

1✔
390
{ #category : #accessing }
1✔
391
GitlabWithMergeRequestModelImporter >> withCommitsSince: someDays [
1✔
392
        "substract the current date with a given number of days. Use to retrieve the commits submit in the last giving days"
1✔
393

1✔
394
        "(GLPHModelImporter new withCommitsSince: 1 week ) >>> (Date today - 1 week) asDateAndTime"
1✔
395

1✔
396
        "(GLPHModelImporter new withCommitsSince: 30 day ) >>> (Date today - 30 day) asDateAndTime"
1✔
397

1✔
398
        (someDays isKindOf: DateAndTime)
1✔
399
                ifTrue: [ withCommitsSince := someDays ]
1✔
400
                ifFalse: [
1✔
401
                withCommitsSince := (Date today - someDays) asDate asDateAndTime ]
1✔
402
]
1✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc