• 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

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

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

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

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

29
{ #category : #'private - api' }
UNCOV
30
GLPHModelImporter >> completeImportProject: aGLHProject [
×
UNCOV
31

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

×
UNCOV
41
        ^ completedProject
×
UNCOV
42
]
×
43

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

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

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

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

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

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

×
UNCOV
105
        self chainsCommitsFrom: commits.
×
UNCOV
106

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

113
{ #category : #'import - commits' }
UNCOV
114
GLPHModelImporter >> importDiffOfCommit: aCommit [
×
UNCOV
115

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

×
UNCOV
121
        ^ aCommit diffs
×
UNCOV
122
]
×
123

124
{ #category : #'import - merge request' }
UNCOV
125
GLPHModelImporter >> importDiffOfMergeRequest: aMergeRequest [
×
UNCOV
126

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

×
UNCOV
136
        diffsResult := self newParseDiffResult: result.
×
UNCOV
137

×
UNCOV
138

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

×
UNCOV
146
        aMergeRequest diffs do: [ :diff | self importDiffRangesForDiff: diff ].
×
UNCOV
147

×
UNCOV
148
        ^ aMergeRequest diffs
×
UNCOV
149
]
×
150

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

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

×
UNCOV
163

×
UNCOV
164
        ^ commits
×
UNCOV
165
]
×
166

167
{ #category : #'import - merge request' }
UNCOV
168
GLPHModelImporter >> importMergeRequestMergeCommits: aGLPHEMergeRequest [
×
UNCOV
169

×
UNCOV
170
        | foundCommits |
×
UNCOV
171
        foundCommits := OrderedCollection new.
×
UNCOV
172

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

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

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

×
UNCOV
195

×
UNCOV
196
        self chainsCommitsFrom: foundCommits.
×
UNCOV
197
        ^ foundCommits
×
UNCOV
198
]
×
199

200
{ #category : #'import - merge request' }
UNCOV
201
GLPHModelImporter >> importMergeRequests: aGLHProject [
×
UNCOV
202

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

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

×
UNCOV
210
        aGLHProject mergeRequests
×
UNCOV
211
                addAll: parsedResults
×
UNCOV
212
                unless: self blockOnIdEquality.
×
UNCOV
213

×
UNCOV
214
        mrs := self glhModel
×
UNCOV
215
                       addAll: aGLHProject mergeRequests
×
UNCOV
216
                       unless: self blockOnIdEquality.
×
UNCOV
217

×
UNCOV
218

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

×
UNCOV
223

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

×
UNCOV
228
        ^ mrs
×
UNCOV
229
]
×
230

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

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

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

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

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

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

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

×
UNCOV
272
        ^ mergeRequests
×
UNCOV
273
]
×
274

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

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

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

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

295
{ #category : #'import - merge request' }
UNCOV
296
GLPHModelImporter >> importMergeResquestAuthor: aGLPHEMergeRequest [
×
UNCOV
297

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

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

312
{ #category : #'import - merge request' }
UNCOV
313
GLPHModelImporter >> importMergeResquestMerger: aGLPHEMergeRequest [
×
UNCOV
314

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

332
{ #category : #'import - projects' }
UNCOV
333
GLPHModelImporter >> importProject: aProjectID [
×
UNCOV
334

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

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

×
UNCOV
342
        result := self repoApi projects get: aProjectID.
×
UNCOV
343
        projectResult := self parseProjectResult: result.
×
UNCOV
344

×
UNCOV
345
        ^ self completeImportProject: projectResult
×
UNCOV
346
]
×
347

348
{ #category : #'private - api' }
UNCOV
349
GLPHModelImporter >> importRepository: aGLHRepository [
×
UNCOV
350

×
UNCOV
351
        super importRepository: aGLHRepository.
×
UNCOV
352

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

358
{ #category : #initialization }
UNCOV
359
GLPHModelImporter >> initReader [
×
UNCOV
360

×
UNCOV
361
        super initReader.
×
UNCOV
362
        self configureReaderForMergeRequest: generalReader
×
UNCOV
363
]
×
364

365
{ #category : #initialization }
UNCOV
366
GLPHModelImporter >> initialize [
×
UNCOV
367

×
UNCOV
368
        super initialize.
×
UNCOV
369
        withCommitDiffs := true
×
UNCOV
370
]
×
371

372
{ #category : #'private - parsing' }
UNCOV
373
GLPHModelImporter >> parseMergeRequestResult: result [
×
UNCOV
374

×
UNCOV
375
        generalReader on: result readStream.
×
UNCOV
376
        ^ generalReader nextAs: #ArrayOfMergeRequest
×
UNCOV
377
]
×
378

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

×
UNCOV
387
        ^ reader nextAs: GLHProject
×
UNCOV
388
]
×
UNCOV
389

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

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

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

×
UNCOV
398
        (someDays isKindOf: DateAndTime)
×
UNCOV
399
                ifTrue: [ withCommitsSince := someDays ]
×
UNCOV
400
                ifFalse: [
×
UNCOV
401
                withCommitsSince := (Date today - someDays) asDate asDateAndTime ]
×
UNCOV
402
]
×
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