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

moosetechnology / GitProjectHealth / 13071365644

31 Jan 2025 10:57AM UTC coverage: 61.185% (+1.7%) from 59.515%
13071365644

Pull #120

github

web-flow
Merge d979915fc into 8f62c91ca
Pull Request #120: Merge remote-tracking branch 'origin/main' into develop and Update asDate for moose 12 + test

204 of 384 new or added lines in 16 files covered. (53.13%)

23 existing lines in 2 files now uncovered.

9614 of 15713 relevant lines covered (61.19%)

1.22 hits per line

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

42.83
/src/GitLabHealth-Model-Importer/GLHModelImporter.class.st
1
Class {
2
        #name : #GLHModelImporter,
3
        #superclass : #GPModelImporter,
4
        #instVars : [
5
                'withInitialCommits',
6
                'withInitialMergeRequest',
7
                'generalReader'
8
        ],
9
        #category : #'GitLabHealth-Model-Importer'
10
}
11

12
{ #category : #private }
13
GLHModelImporter >> addCommits: commitsList toRepository: aProjectRepository [
×
14
        "I take a list of GLHCommit. But some might have been parsed but are already on the model..."
×
15

×
16
        "I return the list of added commits"
×
17

×
18
        | existingCommits newlyFoundCommit |
×
19
        existingCommits := aProjectRepository mooseModel allWithType:
×
20
                                   GLHCommit.
×
21
        newlyFoundCommit := commitsList reject: [ :commitParsed |
×
22
                                    existingCommits anySatisfy: [ :existingCommit |
×
23
                                            existingCommit id = commitParsed id ] ].
×
24
        aProjectRepository mooseModel addAll: newlyFoundCommit.
×
25
        aProjectRepository commits addAll: newlyFoundCommit.
×
26
        ^ newlyFoundCommit
×
27
]
×
28

29
{ #category : #private }
30
GLHModelImporter >> addGroupResultToModel: groupResult [
2✔
31
        |group|
2✔
32
        group := self glhModel add: groupResult unless: self blockOnIdEquality.
2✔
33
        self glhModel
2✔
34
                addAll: group projects
2✔
35
                unless: self blockOnIdEquality.
2✔
36
        ^ group 
2✔
37
]
2✔
38

39
{ #category : #private }
40
GLHModelImporter >> chainsCommitsFrom: commitsCollection [
2✔
41

2✔
42
        | dic |
2✔
43
        
2✔
44
        ('Chains ', commitsCollection size printString , ' commits') recordInfo.
2✔
45
        
2✔
46
        dic := ((self glhModel allWithType: GLHCommit) collect: [ :commit |
2✔
47
                        commit id -> commit ]) asSet asDictionary.
2✔
48

2✔
49
        commitsCollection do: [ :commit |
2✔
50
                commit parent_ids do: [ :parentId | 
2✔
51
                        dic
2✔
52
                                at: parentId
2✔
53
                                ifPresent: [ :parentCommit |
2✔
54
                                        parentCommit childCommits
2✔
55
                                                add: commit
2✔
56
                                                unless: self blockOnIdEquality ]
2✔
57
                                ifAbsent: [  ] ] ].
2✔
58
        ^ commitsCollection
2✔
59
]
2✔
60

61
{ #category : #'import - projects' }
62
GLHModelImporter >> completeImportProject: aGLHProject [
2✔
63

2✔
64
        | importedProject |
2✔
65
        ('Complete import of project: ' , aGLHProject id printString)
2✔
66
                recordInfo.
2✔
67
        aGLHProject repository ifNotNil: [ ^ aGLHProject ].
2✔
68

2✔
69
        importedProject := self glhModel
2✔
70
                                   add: aGLHProject
2✔
71
                                   unless: self blockOnIdEquality.
2✔
72

2✔
73
        self importPipelinesOfProject: importedProject.
2✔
74

2✔
75
        "aGLHProject creator: (self importUser: aGLHProject creator_id)."
2✔
76

2✔
77
        (self importUser: importedProject creator_id) addCreatedProject:
2✔
78
                importedProject.
2✔
79

2✔
80

2✔
81
        importedProject repository: GLHRepository new.
2✔
82
        self glhModel add: importedProject repository.
2✔
83
        self importRepository: importedProject repository.
2✔
84

2✔
85
        ^ importedProject
2✔
86
]
2✔
87

88
{ #category : #'import - commits' }
89
GLHModelImporter >> completeImportedCommit: aCommit [
2✔
90

2✔
91
        ('completing commit: ' , aCommit short_id printString) recordInfo.
2✔
92
        self importCreatorOfCommit: aCommit.
2✔
93

2✔
94
        self withCommitDiffs ifTrue: [
2✔
95
                | diffs |
2✔
96
                aCommit diffs ifEmpty: [
2✔
97
                        diffs := self importDiffOfCommit: aCommit.
2✔
98
                        self glhModel addAll: diffs unless: self blockForDiffEquality ] ].
2✔
99

2✔
100
        ^ aCommit
2✔
101
]
2✔
102

103
{ #category : #'private - configure reader' }
104
GLHModelImporter >> configureReaderForCommit: reader [
2✔
105

2✔
106
          reader for: GLHCommit do: [ :mapping |
2✔
107
                mapping mapInstVars:
2✔
108
                        #( id short_id title author_name author_email committer_name
2✔
109
                           committer_email message web_url ).
2✔
110
                (mapping mapInstVar: #authored_date) valueSchema: DateAndTime.
2✔
111
                (mapping mapInstVar: #committed_date) valueSchema: DateAndTime.
2✔
112
                (mapping mapInstVar: #created_at) valueSchema: DateAndTime.
2✔
113
                (mapping mapInstVar: #parent_ids) valueSchema: #ArrayOfIds.
2✔
114
                mapping
2✔
115
                        mapProperty: 'stats'
2✔
116
                        getter: [ :el | "Not used" ]
2✔
117
                        setter: [ :commit :value |
2✔
118
                                commit deletions: (value at: #deletions).
2✔
119
                                commit additions: (value at: #additions) ] ].
2✔
120

2✔
121
        reader for: DateAndTime customDo: [ :mapping |
2✔
122
                mapping decoder: [ :string | DateAndTime fromString: string ] ].
2✔
123

2✔
124
        reader
2✔
125
                for: #ArrayOfIds
2✔
126
                customDo: [ :mapping | mapping decoder: [ :string | string ] ].
2✔
127
  
2✔
128
        reader
2✔
129
                for: #ArrayOfCommit
2✔
130
                customDo: [ :customMappting |
2✔
131
                customMappting listOfElementSchema: GLHCommit ].
2✔
132

2✔
133
]
2✔
134

135
{ #category : #'private - configure reader' }
136
GLHModelImporter >> configureReaderForDiffs: reader [
2✔
137

2✔
138
        reader for: GLHDiff do: [ :mapping |
2✔
139
                mapping mapInstVars:
2✔
140
                        #( deleted_file new_file new_path old_path renamed_file ).
2✔
141
                mapping mapInstVar: #diffString to: #diff ].
2✔
142

2✔
143
        reader
2✔
144
                for: #ArrayOfDiffs
2✔
145
                customDo: [ :customMappting |
2✔
146
                customMappting listOfElementSchema: GLHDiff ].
2✔
147
        ^ reader
2✔
148
]
2✔
149

150
{ #category : #'private - configure reader' }
151
GLHModelImporter >> configureReaderForGroup: reader [
2✔
152

2✔
153
        reader for: GLHGroup do: [ :mapping |
2✔
154
                mapping mapInstVars.
2✔
155
                (mapping mapInstVar: #projects) valueSchema: #ArrayOfProjects ].
2✔
156
        reader mapInstVarsFor: GLHProject.
2✔
157
        reader
2✔
158
                for: #ArrayOfProjects
2✔
159
                customDo: [ :customMappting |
2✔
160
                customMappting listOfElementSchema: GLHProject ].
2✔
161
        reader
2✔
162
                for: #ArrayOfGroups
2✔
163
                customDo: [ :customMappting |
2✔
164
                customMappting listOfElementSchema: GLHGroup ]
2✔
165
]
2✔
166

167
{ #category : #private }
168
GLHModelImporter >> convertApiFileAsFile: aAPIFile [
×
169

×
170
        aAPIFile type = 'tree' ifTrue: [ 
×
171
                ^ GLHFileDirectory new
×
172
                          name: aAPIFile name;
×
173
                          yourself ].
×
174
        ^ GLHFileBlob new
×
175
                  name: aAPIFile name;
×
176
                  yourself
×
177
]
×
178

179
{ #category : #private }
180
GLHModelImporter >> detectEntityType: aType overAttribut: aSelector equalTo: value [
2✔
181

2✔
182
        ^ (self glhModel allWithType: aType) detect: [ :entity |
2✔
183
                  (entity perform: aSelector) = value ] ifNone: [ nil ]. 
2✔
184
]
2✔
185

186
{ #category : #accessing }
187
GLHModelImporter >> glhApi [
×
188

×
189
        self
×
190
                deprecated: 'Use #repoApi instead'
×
191
                on: '7 October 2024'
×
192
                in:
×
193
                'Pharo-11.0.0+build.726.sha.aece1b5473acf3830a0e082c1bc3a15d4ff3522b (64 Bit)'.
×
194

×
195
        ^ repoApi
×
196
]
×
197

198
{ #category : #accessing }
199
GLHModelImporter >> glhApi: anObject [
×
200

×
201
        self
×
202
                deprecated: 'Use #repoApi: instead'
×
203
                on: '7 October 2024'
×
204
                in:
×
205
                'Pharo-11.0.0+build.726.sha.aece1b5473acf3830a0e082c1bc3a15d4ff3522b (64 Bit)'.
×
206

×
207
        repoApi := anObject
×
208
]
×
209

210
{ #category : #accessing }
211
GLHModelImporter >> glhModel [
2✔
212

2✔
213
        ^ glhModel
2✔
214
]
2✔
215

216
{ #category : #accessing }
217
GLHModelImporter >> glhModel: anObject [
2✔
218

2✔
219
        glhModel := anObject
2✔
220
]
2✔
221

222
{ #category : #'import - users' }
223
GLHModelImporter >> importActiveHumanUsers [
×
224

×
NEW
225
        | params result users |
×
NEW
226
        params := { 
×
NEW
227
                #humans -> 'true'.
×
NEW
228
                #active -> 'true'.
×
NEW
229
                #without_project_bots -> 'true'
×
NEW
230
        } asDictionary.
×
NEW
231
        result := self repoApi users allWithParams: params.
×
NEW
232
        users := (result collect: [ :usersJson | self parseUsersResult: usersJson ]) flattened.
×
NEW
233
        
×
NEW
234
        self glhModel
×
NEW
235
                                 addAll: users
×
NEW
236
                                 unless: self blockOnIdEquality.
×
237

×
NEW
238
        ^ users
×
239
]
×
240

241
{ #category : #'import - groups' }
242
GLHModelImporter >> importAllGroups [
×
243

×
NEW
244
        | params results groups |
×
NEW
245
        
×
NEW
246
        params := { 
×
NEW
247
                        #top_level_only -> 'true'
×
NEW
248
        } asDictionary.
×
NEW
249
        results := self repoApi groups getAllWithParams: params.
×
NEW
250
        
×
NEW
251
        groups := (results collect: [ :groupsJson | generalReader
×
NEW
252
                                            on: groupsJson readStream;
×
NEW
253
                                            nextAs: #ArrayOfGroups. ]) flattened.
×
NEW
254
        ^ groups
×
UNCOV
255
]
×
256

257
{ #category : #'import - commits' }
258
GLHModelImporter >> importAndLoadLatestsCommitsOfProject: aGLHProject [
×
259

×
NEW
260
        | commits completedProject |
×
NEW
261
        completedProject := self completeImportProject: aGLHProject.
×
NEW
262
        commits := self importLastestCommitsOfProject: completedProject.
×
263
        commits do: [ :commit | self completeImportedCommit: commit ].
×
264
        self chainsCommitsFrom: commits.
×
265
        ^ commits
×
266
]
×
267

268
{ #category : #'import - commits' }
269
GLHModelImporter >> importCommit: aCommitID ofProject: aGLHProject [
×
270

×
271
        | result parsedResult |
×
272
        (self glhModel allWithType: GLHCommit) asOrderedCollection
×
273
                detect: [ :commit | commit id = aCommitID ]
×
274
                ifFound: [ :commit | ^ commit ].
×
NEW
275
        result := self repoApi commits get: aCommitID inProject: aGLHProject id.
×
NEW
276
        
×
277
        parsedResult := self parseCommitResult: result.
×
NEW
278
        
×
279
        self
×
280
                addCommits: { parsedResult }
×
281
                toRepository: aGLHProject repository.
×
282
        ^ parsedResult
×
283
]
×
284

285
{ #category : #'import - commits' }
286
GLHModelImporter >> importCommitOfProject: anProject withId: anID [
2✔
287

2✔
288
        | commit result |
2✔
289
        anID ifNil: [ ^ nil ].
2✔
290

2✔
291
        ('looking for commit ' , anID printString , ' in project : '
2✔
292
         , anProject id printString) recordInfo.
2✔
293

2✔
294
        commit := (self
2✔
295
                           detectEntityType: GLHCommit
2✔
296
                           overAttribut: #id
2✔
297
                           equalTo: anID) ifNil: [
2✔
298
                          result := self repoApi commits get: anID inProject: anProject id.
2✔
299
                          commit := (self parseCommitsResult: '[' , result , ']')
2✔
300
                                            first.
2✔
301

2✔
302
                          self glhModel add: commit unless: self blockOnIdEquality.
2✔
303
                          commit repository: anProject repository.
2✔
304

2✔
305
                          commit ].
2✔
306

2✔
307
        self withCommitDiffs ifTrue: [ self importDiffOfCommit: commit ].
2✔
308

2✔
309
        ^ commit
2✔
310
]
2✔
311

312
{ #category : #'import - commits' }
313
GLHModelImporter >> importCommits: aGLHProject [
×
314
        "limited to the last 20 commits"
×
315

×
NEW
316
        | results parsedResults params |
×
NEW
317
        params := { 
×
NEW
318
         #with_stats -> 'true'
×
NEW
319
        } asDictionary.
×
NEW
320
        results := self repoApi commits getByPage: 1 perPage: 20 inProject: aGLHProject id withParams: params.
×
NEW
321
        
×
322
        parsedResults := self parseCommitsResult: results.
×
323
        self glhModel addAll: parsedResults unless: self blockOnIdEquality.
×
324

×
325
        parsedResults do: [ :commit |
×
326
                commit repository: aGLHProject repository ].
×
327

×
328
        self withCommitDiffs ifTrue: [
×
329
                parsedResults do: [ :commit | self importDiffOfCommit: commit ] ].
×
330
        
×
331
        ^ parsedResults. 
×
332
]
×
333

334
{ #category : #'import - commits' }
335
GLHModelImporter >> importCommitsFollowing: aCommit upToDays: aNumberOfDay [
×
336
        "import the 'n' commits of a project starting from an initial 'aCommit' commit. 
×
337
        Lazy import does not import the entities inside the model"
×
338

×
339
        | date |
×
340
        date := aCommit created_at asDateAndTime.
×
341

×
342
        ^ self
×
343
                  importCommitsOfBranch: aCommit branch
×
344
                  forRefName: aCommit branch name
×
345
                  since: date
×
346
                  until: (date + aNumberOfDay day)
×
347
]
×
348

349
{ #category : #commit }
350
GLHModelImporter >> importCommitsOf: aGLHProject withStats: aBoolean until: toDate [
×
351

×
352
        | newlyFoundCommit page |
×
353
        
×
354
        self deprecated: [  ] .
×
355
        
×
356
        page := 0.
×
357
        newlyFoundCommit := { true }.
×
358
        [ newlyFoundCommit isNotEmpty ] whileTrue: [
×
359
                | results parsedResults existingCommits |
×
360
                page := page + 1.
×
361
                ('import commit page ' , page printString) recordInfo.
×
362
                results := self repoApi
×
363
                                   commitsOfProject: aGLHProject id
×
364
                                   forRefName: nil
×
365
                                   since: nil
×
366
                                   until: nil
×
367
                                   path: nil
×
368
                                   author: nil
×
369
                                   all: nil
×
370
                                   with_stats: aBoolean
×
371
                                   firstParent: nil
×
372
                                   order: nil
×
373
                                   trailers: nil
×
374
                                   perPage: 100
×
375
                                   page: page.
×
376
                parsedResults := self parseCommitsResult: results.
×
377
                existingCommits := aGLHProject mooseModel allWithType: GLHCommit.
×
378

×
379
                newlyFoundCommit := parsedResults reject: [ :commitParsed |
×
380
                                            (toDate isNil or: [
×
381
                                                     commitParsed committed_date
×
382
                                                     < toDate asDateAndTime ]) or: [
×
383
                                                    existingCommits anySatisfy: [ :existingCommit |
×
384
                                                            existingCommit id = commitParsed id ] ] ].
×
385
                aGLHProject mooseModel addAll: newlyFoundCommit.
×
386
                aGLHProject repository commits addAll: newlyFoundCommit ].
×
387

×
388

×
389
        self withCommitDiffs ifTrue: [
×
390
                aGLHProject repository commits do: [ :commit |
×
391
                        self importDiffOfCommit: commit ] ]
×
392
]
×
393

394
{ #category : #'import - commits' }
395
GLHModelImporter >> importCommitsOfBranch: aGLHBranch forRefName: refName since: fromDate [
×
396

×
397
        ^ self
×
398
                  importCommitsOfBranch: aGLHBranch
×
399
                  forRefName: aGLHBranch name
×
400
                  since: fromDate
×
401
                  until: nil
×
402
]
×
403

404
{ #category : #'import - commits' }
405
GLHModelImporter >> importCommitsOfBranch: aGLHBranch forRefName: refName since: fromDate until: toDate [
×
406

×
NEW
407
        | params result allCommits |
×
NEW
408
        params := { 
×
NEW
409
          #ref_name -> aGLHBranch name.
×
NEW
410
          #since ->  (fromDate ifNotNil: [ fromDate asDate asDateAndTime asString ] ifNil: [ '' ]).
×
NEW
411
          #until -> (toDate ifNotNil: [ toDate asDate asDateAndTime asString ] ifNil: [ '' ]). 
×
NEW
412
        } asDictionary.
×
NEW
413
        result := self repoApi commits getAllInProject: aGLHBranch repository project id withParams: params.
×
NEW
414
        
×
NEW
415
        allCommits := (result collect: [ :commitsJson | self parseCommitsResult: commitsJson ]) flattened.
×
NEW
416
        
×
417
        aGLHBranch commits
×
NEW
418
                        addAll: allCommits
×
419
                        unless: self blockOnIdEquality.
×
420

×
421
        self glhModel
×
422
                addAll: aGLHBranch commits
×
423
                unless: self blockOnIdEquality.
×
424

×
NEW
425
        ^ allCommits
×
426
]
×
427

428
{ #category : #'import - commits' }
429
GLHModelImporter >> importCommitsOfBranch: aGLHBranch forRefName: refName until: toDate [
×
430

×
431
        ^ self
×
432
                  importCommitsOfBranch: aGLHBranch
×
433
                  forRefName: aGLHBranch name
×
434
                  since: nil
×
435
                  until: toDate
×
436
]
×
437

438
{ #category : #'import - commits' }
439
GLHModelImporter >> importCommitsOfProject: aProject since: fromDate until: toDate [
2✔
440

2✔
441
        | params results allCommits |
2✔
442
        params := {
2✔
443
                          (#since
2✔
444
                           ->
2✔
445
                           (fromDate
2✔
446
                                    ifNotNil: [ fromDate asDate asDateAndTime asString ]
2✔
447
                                    ifNil: [ '' ])).
2✔
448
                          (#until
2✔
449
                           ->
2✔
450
                           (toDate
2✔
451
                                    ifNotNil: [ toDate asDate asDateAndTime asString ]
2✔
452
                                    ifNil: [ '' ])).
2✔
453
                          (#with_stats -> 'true').
2✔
454
                          (#all -> 'true') } asDictionary.
2✔
455
        results := self repoApi commits
2✔
456
                           getAllInProject: aProject id
2✔
457
                           withParams: params.
2✔
458

2✔
459
        allCommits := (results collect: [ :commitsJson |
2✔
460
                               self parseCommitsResult: commitsJson ]) flattened.
2✔
461

2✔
462
        allCommits:= aProject repository commits
2✔
463
                addAll: allCommits
2✔
464
                unless: self blockOnIdEquality.
2✔
465

2✔
466
        ^ self glhModel addAll: allCommits unless: self blockOnIdEquality
2✔
467
]
2✔
468

469
{ #category : #'import - projects' }
470
GLHModelImporter >> importContributedProjectsOfUser: aGLHUser [
×
471

×
NEW
472
        | remaningProjects params results projects projectsIds |
×
NEW
473
        params := {
×
NEW
474
                          (#order_by -> 'last_activity_at').
×
NEW
475
                          (#simple -> 'true') } asDictionary.
×
NEW
476
        results := self repoApi projects
×
NEW
477
                           contributedProjectsOfUser: aGLHUser id
×
NEW
478
                           withParams: params.
×
479

×
NEW
480
        projectsIds := (results collect: [ :projectsJson |
×
NEW
481
                             (NeoJSONReader fromString: projectsJson) collect: [:projectJson | projectJson at: #id ] ]) flattened.
×
NEW
482
        
×
NEW
483
        projects := self importProjects: projectsIds.
×
484
        remaningProjects := self importProjects:
×
NEW
485
                                    ((projects collect: #id) difference:
×
486
                                             ((self userCatalogue atId: aGLHUser id) at:
×
487
                                                      #contributedProjects)).
×
488

×
NEW
489

×
490
        aGLHUser contributedProjects
×
NEW
491
                addAll: projects , remaningProjects
×
492
                unless: self blockOnIdEquality.
×
493

×
494
        self userCatalogue
×
495
                addUser: aGLHUser
×
496
                withProjects: (aGLHUser contributedProjects collect: #id).
×
497

×
NEW
498
        ^ projects
×
499
]
×
500

501
{ #category : #'import - commits' }
502
GLHModelImporter >> importCreatorOfCommit: aCommit [
2✔
503

2✔
504
        aCommit commitCreator ifNil: [
2✔
505
                aCommit commitCreator:
2✔
506
                        (self importUserByUsername: aCommit author_name) ].
2✔
507
        self userCatalogue
2✔
508
                addUser: aCommit commitCreator
2✔
509
                withProject: aCommit repository project id.
2✔
510
        ^ aCommit commitCreator
2✔
511
]
2✔
512

513
{ #category : #'import - commits' }
514
GLHModelImporter >> importDiffOfCommit: aCommit [
2✔
515

2✔
516
        | result diffsResult |
2✔
517
        aCommit diffs ifNotEmpty: [
2✔
518
                'Diff already importer: ' , aCommit short_id printString recordInfo.
2✔
519
                ^ aCommit diffs ].
2✔
520
        ('Import diff of commit: ' , aCommit short_id printString) recordInfo.
2✔
521
        
2✔
522
        result := self repoApi commits diffOf: aCommit id inProject: aCommit repository project id  uniDiff: true.
2✔
523
        
2✔
524
        (self isServerError: result) ifTrue: [ ^ {  } ].
2✔
525
        diffsResult := self newParseDiffResult: result.
2✔
526

2✔
527
        ^ aCommit diffs addAll: diffsResult unless: self blockForDiffEquality.
2✔
528

2✔
529
]
2✔
530

531
{ #category : #'import - repositories' }
532
GLHModelImporter >> importDirectoryFiles: aDirectoryFile OfBranch: aBranch [
×
533

×
NEW
534
        | result files apiFiles params |
×
NEW
535
        params := { 
×
NEW
536
                #ref -> aBranch name.
×
NEW
537
                #path -> (aDirectoryFile path , '/')
×
NEW
538
        } asDictionary.
×
NEW
539
        result := self repoApi repositories repositoryTreeOfProject: aBranch repository project id withParams: params.
×
NEW
540
                         " treeOfRepository: aBranch repository project id
×
541
                          ofBranch: aBranch name
×
NEW
542
                          andPath: aDirectoryFile path , '/'."
×
NEW
543
        apiFiles := (result collect: [ :treeJson | self parseFileTreeResult: treeJson ]) flattened.
×
544
        files := apiFiles collect: [ :apiFile |
×
545
                         self convertApiFileAsFile: apiFile ].
×
NEW
546
        
×
547
        files do: [ :file |
×
548
                self glhModel add: file.
×
549
                aDirectoryFile addFile: file ].
×
NEW
550
        
×
551
        files
×
552
                select: [ :file | file isKindOf: GLHFileDirectory ]
×
553
                thenCollect: [ :file |
×
554
                self importDirectoryFiles: file OfBranch: aBranch ]
×
555
]
×
556

557
{ #category : #'import - repositories' }
558
GLHModelImporter >> importFilesOfBranch: aBranch [
×
559

×
NEW
560
        | result files apiFiles params |
×
NEW
561
        params := { 
×
NEW
562
                #ref -> aBranch name.
×
NEW
563
        } asDictionary.
×
NEW
564
        
×
NEW
565
        result := self repoApi repositories repositoryTreeOfProject: aBranch repository project id withParams: params.
×
NEW
566
        
×
NEW
567
                          "treeOfRepository: aBranch repository project id
×
568
                          ofBranch: aBranch name
×
NEW
569
                          andPath: nil."
×
NEW
570
        apiFiles := (result collect: [ :filesJson | self parseFileTreeResult: filesJson  ]) flattened.
×
571
        files := apiFiles collect: [ :apiFile | 
×
572
                         self convertApiFileAsFile: apiFile ].
×
573
        files do: [ :file | 
×
574
                self glhModel add: file.
×
575
                aBranch addFile: file ].
×
576
        files
×
577
                select: [ :file | file isKindOf: GLHFileDirectory ]
×
578
                thenCollect: [ :file | 
×
579
                self importDirectoryFiles: file OfBranch: aBranch ]
×
580
]
×
581

582
{ #category : #'import - groups' }
583
GLHModelImporter >> importGroup: aGroupID [
2✔
584

2✔
585
        | result groupResult |
2✔
586
        ('Import group: ' , aGroupID printString) recordInfo.
2✔
587

2✔
588
        result := self repoApi groups get: aGroupID.
2✔
589
        
2✔
590
        "group: aGroupID."
2✔
591
        groupResult := self parseGroupResult: result.
2✔
592
        groupResult := self addGroupResultToModel: groupResult.
2✔
593

2✔
594
        groupResult projects do: [ :project |
2✔
595
                self completeImportProject: project ].
2✔
596

2✔
597
        (self subGroupsOf: aGroupID) do: [ :subGroup |
2✔
598
                
2✔
599
                groupResult subGroups
2✔
600
                        add: (self importGroup: subGroup id)
2✔
601
                        unless: self blockOnIdEquality ].
2✔
602
        ^ groupResult
2✔
603
]
2✔
604

605
{ #category : #'import - jobs' }
606
GLHModelImporter >> importJobsOf: aPipeline [
×
607

×
NEW
608
        | jobs results |
×
NEW
609
        results := self repoApi jobs allForPipeline: aPipeline id inProject: aPipeline project id.
×
NEW
610
                          "jobsOfProject: aPipeline project id
×
NEW
611
                          ofPipelines: aPipeline id."
×
NEW
612
        jobs := (results collect: [ :jobsJson | self parseJobsResult: jobsJson ofProject: aPipeline project ]) flattened.
×
613
        jobs do: [ :job | aPipeline addJob: job ].
×
NEW
614
        self glhModel addAll: jobs.
×
NEW
615
        
×
NEW
616
        ^jobs
×
617

×
618
]
×
619

620
{ #category : #'import - commits' }
621
GLHModelImporter >> importLastestCommitsOfProject: aGLHProject [
2✔
622
        "limited to the last 50 commits"
2✔
623

2✔
624
        | results parsedResults params |
2✔
625
        params := { 
2✔
626
                #with_stats -> 'true'.
2✔
627
                #all -> true
2✔
628
         } asDictionary.
2✔
629
        results := self repoApi commits getByPage: 1 perPage: 50 inProject: aGLHProject id withParams: params.
2✔
630

2✔
631
        parsedResults := self parseCommitsResult: results.
2✔
632
        parsedResults := self glhModel
2✔
633
                                 addAll: parsedResults
2✔
634
                                 unless: self blockOnIdEquality.
2✔
635

2✔
636
        aGLHProject repository commits
2✔
637
                addAll: parsedResults
2✔
638
                unless: self blockOnIdEquality.
2✔
639

2✔
640
        self withCommitDiffs ifTrue: [
2✔
641
                parsedResults do: [ :commit | self importDiffOfCommit: commit ] ].
2✔
642

2✔
643
        ^ parsedResults
2✔
644
]
2✔
645

646
{ #category : #'import - commits' }
647
GLHModelImporter >> importParentCommitsOfCommit: aGLHCommit since: aDate [
×
648

×
649
        | parentsIds commits |
×
650
        commits := OrderedCollection new.
×
651
        aGLHCommit created_at asDateAndTime < aDate asDateAndTime ifTrue: [
×
652
                 
×
653
                ^ commits
×
654
                          add: aGLHCommit;
×
655
                          yourself ].
×
656

×
657
        parentsIds := aGLHCommit parent_ids.
×
658

×
659
        commits addAll: (parentsIds collect: [ :id |
×
660
                         self
×
661
                                 importCommitOfProject: aGLHCommit repository project
×
662
                                 withId: id ]).
×
663

×
664

×
665
        ^ (commits collect: [ :parentCommit |
×
666
                   self importParentCommitsOfCommit: parentCommit since: aDate ])
×
667
                  flatten
×
668
]
×
669

670
{ #category : #'imports - pipelines' }
671
GLHModelImporter >> importPipelinesOfProject: aGLHProject [
2✔
672

2✔
673
        (self pipelinesOf: aGLHProject id) do: [ :pipeline |
2✔
674
                self glhModel add: pipeline unless: self blockOnIdEquality .
2✔
675
                aGLHProject pipelines add: pipeline unless: self blockOnIdEquality]
2✔
676
]
2✔
677

678
{ #category : #'import - projects' }
679
GLHModelImporter >> importProject: aProjectID [
×
680

×
681
        | result projectResult |
×
682
        ('Import project with id: ' , aProjectID printString) recordInfo.
×
683

×
NEW
684
        result := self repoApi projects get: aProjectID.
×
685
        projectResult := self parseProjectResult: result.
×
686

×
687
        ^ self completeImportProject: projectResult
×
688
]
×
689

690
{ #category : #'import - projects' }
691
GLHModelImporter >> importProjects [
×
692

×
NEW
693
        | result projects |
×
NEW
694
        ('import all Projects') recordInfo.
×
NEW
695

×
NEW
696
        result := self repoApi projects all.
×
NEW
697
        projects := (result collect: [ :projectsJson | self parseArrayOfProject: projectsJson ]) flattened.
×
NEW
698
        
×
NEW
699
        self glhModel addAll: projects unless: self blockOnIdEquality.
×
NEW
700

×
NEW
701
        ^ projects
×
UNCOV
702
]
×
703

704
{ #category : #'import - projects' }
705
GLHModelImporter >> importProjects: aCollectionOfProjectID [
×
706

×
707
        ^ aCollectionOfProjectID collect: [ :id | self importProject: id ]
×
708
]
×
709

710
{ #category : #imports }
711
GLHModelImporter >> importProjectsSince: since [
×
712
        "heavy import of all projects"
×
713

×
714
        "copy import from commits"
×
715

×
716
        | newlyFoundProjects page foundProject amount |
×
717
        ('import all Projects since: ' , since printString) recordInfo.
×
718

×
719
        "number of projects per page"
×
720
        amount := 100.
×
721
        page := 0.
×
722
        foundProject := OrderedCollection new.
×
723
        newlyFoundProjects := { true }.
×
724
        [ newlyFoundProjects isNotEmpty ] whileTrue: [
×
725
                | results |
×
726
                page := page + 1.
×
727
                ('import projects page #' , page printString) recordInfo.
×
728

×
729
                results := self repoApi projects: amount since: since page: page.
×
730

×
731
                newlyFoundProjects := self glhModel
×
732
                                              addAll: (self parseArrayOfProject: results)
×
733
                                              unless: self blockOnIdEquality.
×
734
                foundProject addAll: newlyFoundProjects ].
×
735

×
736
        ^ foundProject
×
737
]
×
738

739
{ #category : #'import - repositories' }
740
GLHModelImporter >> importRepository: aGLHRepository [
2✔
741

2✔
742
        | resultBranches branches |
2✔
743
        [
2✔
744
        ('import the repository of project ' , aGLHRepository project name)
2✔
745
                recordInfo.
2✔
746

2✔
747
        resultBranches := self repoApi branches getAllFromProject: aGLHRepository project id.
2✔
748
        
2✔
749
        branches := (resultBranches collect: [ :branchesJson | self parseBranchesResult: branchesJson ]) flattened.
2✔
750

2✔
751
        'import the branches of project ' recordInfo.
2✔
752

2✔
753
        branches := aGLHRepository branches
2✔
754
                            addAll: branches
2✔
755
                            unless: self blockOnNameEquality.
2✔
756
        branches := self glhModel
2✔
757
                            addAll: branches
2✔
758
                            unless: self blockOnNameEquality.
2✔
759

2✔
760

2✔
761
        self withFiles ifTrue: [
2✔
762
                branches do: [ :branch | self importFilesOfBranch: branch ] ] ]
2✔
763
                on: NeoJSONParseError
2✔
764
                do: [
2✔
765
                self inform: aGLHRepository project name , ' has no repository' ]
2✔
766
]
2✔
767

768
{ #category : #'import - users' }
769
GLHModelImporter >> importUser: aUserID [
2✔
770

2✔
771
        | result userResult |
2✔
772
        (self glhModel allWithType: GLHUser)
2✔
773
                detect: [ :user | user id = aUserID ]
2✔
774
                ifFound: [ :user | ^ user ].
2✔
775
        ('Import user: ' , aUserID printString) recordInfo.
2✔
776
        
2✔
777
        result := self repoApi users get: aUserID.
2✔
778
        userResult := self parseUserResult: result.
2✔
779
        
2✔
780
        ^ self glhModel add: userResult unless: self blockOnIdEquality
2✔
781
]
2✔
782

783
{ #category : #'import - users' }
784
GLHModelImporter >> importUserByUsername: anUsername [
2✔
785

2✔
786
        | dicUsername resultUser |
2✔
787
        dicUsername := ((self glhModel allWithType: GLHUser) collect: [ :user |
2✔
788
                                user username -> user ]) asSet asDictionary.
2✔
789

2✔
790
        dicUsername addAll: self userCatalogue collectUsernames.
2✔
791

2✔
792

2✔
793
        resultUser := dicUsername
2✔
794
                              at: anUsername
2✔
795
                              ifAbsent: [ "thus we have to import this new user"
2✔
796
                                      | result userId searchResult params |
2✔
797
                                      ('Import user with username: '
2✔
798
                                       , anUsername printString) recordInfo.
2✔
799
                                      params := { (#search -> anUsername) } asDictionary.
2✔
800
                                      result := self repoApi users allWithParams: params.
2✔
801
                                                        
2✔
802
                                                         "when result is an error"
2✔
803
                                                         (result isString) ifTrue: [ result := { result } ].
2✔
804
                                                        
2✔
805
                                      searchResult := result ifEmpty: [ result ] ifNotEmpty: [(result collect: [ :usersJson |
2✔
806
                                                               NeoJSONReader fromString: usersJson ]) first].
2✔
807
                                                         
2✔
808
                                      (searchResult class = Dictionary and: [
2✔
809
                                               (searchResult at: #message) includesSubstring:
2✔
810
                                                       '403 Forbidden' ])
2✔
811
                                              ifTrue: [ "if the result is an 403 error we fake a new user"
2✔
812
                                                      self glhModel
2✔
813
                                                              add: (GLHUser new
2✔
814
                                                                               username: anUsername;
2✔
815
                                                                               name: anUsername;
2✔
816
                                                                               yourself)
2✔
817
                                                              unless: [ :nu :ou | nu username = ou username ] ]
2✔
818
                                              ifFalse: [
2✔
819
                                                      searchResult
2✔
820
                                                              ifEmpty: [ "results can be empty thus we force a new user with the info we have "
2✔
821
                                                                      self glhModel
2✔
822
                                                                              add: (GLHUser new
2✔
823
                                                                                               username: anUsername;
2✔
824
                                                                                               name: anUsername;
2✔
825
                                                                                               yourself)
2✔
826
                                                                              unless: [ :nu :ou | nu username = ou username ] ]
2✔
827
                                                              ifNotEmpty: [ "because we may already have the researched user, we look by ID in the model"
2✔
828
                                                                      userId := searchResult first at: #id.
2✔
829
                                                                      (self glhModel allWithType: GLHUser)
2✔
830
                                                                              detect: [ :user | user id = userId ]
2✔
831
                                                                              ifNone: [ self importUser: userId ] ] ] ].
2✔
832

2✔
833
        self userCatalogue addUser: resultUser withName: anUsername.
2✔
834

2✔
835
        ^ resultUser
2✔
836
]
2✔
837

838
{ #category : #initialization }
839
GLHModelImporter >> initReader [
2✔
840

2✔
841
        generalReader := NeoJSONReader new.
2✔
842
        self configureReaderForCommit: generalReader.
2✔
843
        self configureReaderForGroup: generalReader.
2✔
844
        self configureReaderForDiffs: generalReader. 
2✔
845
]
2✔
846

847
{ #category : #initialization }
848
GLHModelImporter >> initialize [
2✔
849

2✔
850
        super initialize.
2✔
851
        withCommitDiffs := false.
2✔
852
        withInitialCommits := false.
2✔
853
        withInitialMergeRequest := false.
2✔
854

2✔
855
        withCommitsSince := (Date today - 1 week) asDateAndTime.
2✔
856

2✔
857
        self initReader.
2✔
858

2✔
859
]
2✔
860

861
{ #category : #private }
862
GLHModelImporter >> isServerError: aString [
2✔
863
        ^ aString = '{"message":"500 Internal Server Error"}'
2✔
864
]
2✔
865

866
{ #category : #'import - projects' }
867
GLHModelImporter >> loadAllProjectsFromRepositorySoftware [
×
868
        "heavy import that load all the active project inside the model. Only import the project entities"
×
869
        |projects|
×
870
        
×
871
        projects := self repoApi projects. 
×
872
]
×
873

874
{ #category : #'private - parsing' }
875
GLHModelImporter >> newParseCommitResult: result [
×
876

×
877
        generalReader  on: result readStream.
×
878

×
879
        ^ generalReader nextAs: GLHCommit
×
880
]
×
881

882
{ #category : #'private - parsing' }
883
GLHModelImporter >> newParseDiffResult: result [
2✔
884

2✔
885
        generalReader on: result readStream.
2✔
886
        ^ generalReader nextAs: #ArrayOfDiffs
2✔
887
]
2✔
888

889
{ #category : #'private - parsing' }
890
GLHModelImporter >> parseArrayOfProject: arrayOfProjects [
×
891

×
892
        | reader |
×
893
        reader := NeoJSONReader on: arrayOfProjects readStream.
×
894
        reader
×
895
                for: #ArrayOfProjects
×
896
                customDo: [ :customMappting |
×
897
                customMappting listOfElementSchema: GLHProject ].
×
898
        reader for: GLHProject do: [ :mapping |
×
899
                mapping mapInstVar: #name to: #name.
×
900
                mapping mapInstVar: #description to: #description.
×
901
                mapping mapInstVar: #id to: #id.
×
902
                mapping mapInstVar: #archived to: #archived.
×
903
                mapping mapInstVar: #web_url to: #html_url.
×
904
                mapping mapInstVar: #topics to: #topics ].
×
905
        ^ reader nextAs: #ArrayOfProjects
×
906
]
×
907

908
{ #category : #'private - parsing' }
909
GLHModelImporter >> parseBranchesResult: result [
2✔
910

2✔
911
        | reader |
2✔
912
        reader := NeoJSONReader on: result readStream.
2✔
913
        reader mapInstVarsFor: GLHBranch.
2✔
914
        reader
2✔
915
                for: #ArrayOfBranch
2✔
916
                customDo: [ :customMappting | 
2✔
917
                customMappting listOfElementSchema: GLHBranch ].
2✔
918
        ^ reader nextAs: #ArrayOfBranch
2✔
919
]
2✔
920

921
{ #category : #'private - parsing' }
922
GLHModelImporter >> parseCommitResult: result [
×
923

×
924
        | reader |
×
925
        reader := NeoJSONReader on: result readStream.
×
926

×
927
        reader for: GLHCommit do: [ :mapping |
×
928
                mapping mapInstVars:
×
929
                        #( id short_id title author_name author_email committer_name
×
930
                           committer_email message web_url ).
×
931
                (mapping mapInstVar: #authored_date) valueSchema: DateAndTime.
×
932
                (mapping mapInstVar: #committed_date) valueSchema: DateAndTime.
×
933
                (mapping mapInstVar: #created_at) valueSchema: DateAndTime.
×
934
                (mapping mapInstVar: #parent_ids) valueSchema: #ArrayOfIds.
×
935
                mapping
×
936
                        mapProperty: 'stats'
×
937
                        getter: [ :el | "Not used" ]
×
938
                        setter: [ :commit :value |
×
939
                                commit deletions: (value at: #deletions).
×
940
                                commit additions: (value at: #additions) ] ].
×
941

×
942
        reader for: DateAndTime customDo: [ :mapping |
×
943
                mapping decoder: [ :string | DateAndTime fromString: string ] ].
×
944

×
945
        reader
×
946
                for: #ArrayOfIds
×
947
                customDo: [ :mapping | mapping decoder: [ :string | string ] ].
×
948

×
949

×
950
        ^ reader nextAs: GLHCommit
×
951
]
×
952

953
{ #category : #'private - parsing' }
954
GLHModelImporter >> parseCommitsResult: result [
2✔
955

2✔
956
        | reader |
2✔
957
        reader := NeoJSONReader on: result readStream.
2✔
958

2✔
959
          reader for: GLHCommit do: [ :mapping |
2✔
960
                mapping mapInstVars:
2✔
961
                        #( id short_id title author_name author_email committer_name
2✔
962
                           committer_email message web_url ).
2✔
963
                (mapping mapInstVar: #authored_date) valueSchema: DateAndTime.
2✔
964
                (mapping mapInstVar: #committed_date) valueSchema: DateAndTime.
2✔
965
                (mapping mapInstVar: #created_at) valueSchema: DateAndTime.
2✔
966
                (mapping mapInstVar: #parent_ids) valueSchema: #ArrayOfIds.
2✔
967
                mapping
2✔
968
                        mapProperty: 'stats'
2✔
969
                        getter: [ :el | "Not used" ]
2✔
970
                        setter: [ :commit :value |
2✔
971
                                commit deletions: (value at: #deletions).
2✔
972
                                commit additions: (value at: #additions) ] ].
2✔
973

2✔
974
        reader for: DateAndTime customDo: [ :mapping |
2✔
975
                mapping decoder: [ :string | DateAndTime fromString: string ] ].
2✔
976

2✔
977
        reader
2✔
978
                for: #ArrayOfIds
2✔
979
                customDo: [ :mapping | mapping decoder: [ :string | string ] ].
2✔
980
  
2✔
981
        reader
2✔
982
                for: #ArrayOfCommit
2✔
983
                customDo: [ :customMappting |
2✔
984
                customMappting listOfElementSchema: GLHCommit ].
2✔
985

2✔
986
        ^ reader nextAs: #ArrayOfCommit
2✔
987
]
2✔
988

989
{ #category : #private }
990
GLHModelImporter >> parseDiffResult: result [
×
991

×
992
        | reader |
×
993
        self
×
994
                deprecated: 'Use #newParseDiffResult: instead'
×
995
                on: '28 June 2024'
×
996
                in:
×
997
                'Pharo-11.0.0+build.726.sha.aece1b5473acf3830a0e082c1bc3a15d4ff3522b (64 Bit)'.
×
998
        reader := NeoJSONReader on: result readStream.
×
999
        reader for: GLHDiff do: [ :mapping |
×
1000
                mapping mapInstVars:
×
1001
                        #( deleted_file new_file new_path old_path renamed_file ).
×
1002
                mapping mapInstVar: #diffString to: #diff ].
×
1003

×
1004
        reader
×
1005
                for: #ArrayOfDiffs
×
1006
                customDo: [ :customMappting |
×
1007
                customMappting listOfElementSchema: GLHDiff ].
×
1008
        ^ reader nextAs: #ArrayOfDiffs
×
1009
]
×
1010

1011
{ #category : #'private - parsing' }
1012
GLHModelImporter >> parseFileTreeResult: aResult [
×
1013

×
1014
        | reader |
×
1015
        reader := NeoJSONReader on: aResult readStream.
×
1016
        reader mapInstVarsFor: GLHApiFile.
×
1017
        reader
×
1018
                for: #ArrayOfFile
×
1019
                customDo: [ :customMappting | 
×
1020
                customMappting listOfElementSchema: GLHApiFile ].
×
1021
        ^ reader nextAs: #ArrayOfFile
×
1022
]
×
1023

1024
{ #category : #'private - parsing' }
1025
GLHModelImporter >> parseGroupResult: aResult [
2✔
1026

2✔
1027
        | reader |
2✔
1028

2✔
1029
        reader := NeoJSONReader on: aResult readStream.
2✔
1030
        reader for: GLHGroup do: [ :mapping |
2✔
1031
                mapping mapInstVars.
2✔
1032
                (mapping mapInstVar: #projects) valueSchema: #ArrayOfProjects ].
2✔
1033
        reader mapInstVarsFor: GLHProject.
2✔
1034
        reader
2✔
1035
                for: #ArrayOfProjects
2✔
1036
                customDo: [ :customMappting |
2✔
1037
                customMappting listOfElementSchema: GLHProject ].
2✔
1038
        ^ reader nextAs: GLHGroup
2✔
1039
]
2✔
1040

1041
{ #category : #'private - parsing' }
1042
GLHModelImporter >> parseJobsResult: result ofProject: aProject [
×
1043

×
1044
        | reader |
×
1045
        reader := NeoJSONReader on: result readStream.
×
1046
        reader for: GLHJob do: [ :mapping |
×
1047
                mapping mapInstVars: #( id allow_failure web_url name ).
×
1048

×
1049
                mapping
×
1050
                        mapProperty: #user
×
1051
                        getter: [ :object | #ignore ]
×
1052
                        setter: [ :object :value |
×
1053
                        object user: (self importUser: (value at: #id)) ].
×
1054

×
1055
                mapping
×
1056
                        mapProperty: #commit
×
1057
                        getter: [ :object | #ignore ]
×
1058
                        setter: [ :object :value |
×
1059
                                value ifNotNil: [
×
1060
                                        object commit:
×
1061
                                                (self importCommit: (value at: #id) ofProject: aProject) ] ].
×
1062

×
1063
                mapping
×
1064
                        mapProperty: #duration
×
1065
                        getter: [ :object | #ignore ]
×
1066
                        setter: [ :object :value |
×
1067
                        value ifNotNil: [ object duration: value seconds ] ] ].
×
1068

×
1069
        reader
×
1070
                for: #ArrayOfGLHJob
×
1071
                customDo: [ :customMappting |
×
1072
                customMappting listOfElementSchema: GLHJob ].
×
1073
        ^ reader nextAs: #ArrayOfGLHJob
×
1074
]
×
1075

1076
{ #category : #'private - parsing' }
UNCOV
1077
GLHModelImporter >> parsePipelinesResult: result [
×
UNCOV
1078

×
UNCOV
1079
        | reader |
×
UNCOV
1080
        
×
UNCOV
1081
        (result includesSubstring: '{"message":"40' )ifTrue: [ ^ {  } ].
×
UNCOV
1082
        
×
UNCOV
1083
        reader := NeoJSONReader on: result readStream.
×
UNCOV
1084
        reader mapInstVarsFor: GLHPipeline.
×
UNCOV
1085
        reader for: GLHPipeline do: [ :mapping |
×
UNCOV
1086
                mapping
×
UNCOV
1087
                        mapProperty: #created_at
×
UNCOV
1088
                        getter: [ :object | #ignore ]
×
UNCOV
1089
                        setter: [ :object :value |
×
UNCOV
1090
                        object runDate: (DateAndTime fromString: value) ] ].
×
UNCOV
1091
        reader
×
UNCOV
1092
                for: #ArrayOfPipelines
×
UNCOV
1093
                customDo: [ :customMappting |
×
UNCOV
1094
                customMappting listOfElementSchema: GLHPipeline ].
×
UNCOV
1095
        ^ reader nextAs: #ArrayOfPipelines
×
UNCOV
1096
]
×
1097

1098
{ #category : #'private - parsing' }
1099
GLHModelImporter >> parseProjectResult: aResult [ 
×
1100
                | reader |
×
1101
        reader := NeoJSONReader on: aResult readStream.
×
1102
        reader for: GLHProject do: [ :mapping |
×
1103
                mapping mapInstVars. ].
×
1104
"        reader mapInstVarsFor: GLHProject."
×
1105

×
1106
        ^ reader nextAs: GLHProject
×
1107
]
×
1108

×
NEW
1109
{ #category : #'private - parsing' }
×
1110
GLHModelImporter >> parseSubGroupResult: aResult [
×
1111

×
1112
        | reader |
×
1113
        reader := NeoJSONReader on: aResult readStream.
×
1114
        self configureReaderForGroup: reader.
×
1115
        ^ reader nextAs: #ArrayOfGroups
×
1116
]
×
1117

×
NEW
1118
{ #category : #'private - parsing' }
×
1119
GLHModelImporter >> parseUserResult: result [
×
1120

×
1121
        | reader |
×
1122
        reader := NeoJSONReader on: result readStream.
×
1123
        reader mapInstVarsFor: GLHUser.
×
1124
        ^ reader nextAs: GLHUser
×
1125
]
×
1126

×
NEW
1127
{ #category : #'private - parsing' }
×
1128
GLHModelImporter >> parseUsersResult: result [
×
1129

×
1130
        | reader |
×
1131
        reader := NeoJSONReader on: result readStream.
×
1132

×
1133
        reader mapInstVarsFor: GLHUser.
×
1134

×
1135
        reader
×
1136
                for: #ArrayOfUser
×
1137
                customDo: [ :customMappting |
×
1138
                customMappting listOfElementSchema: GLHUser ].
×
1139

×
1140
        ^ reader nextAs: #ArrayOfUser
×
1141
]
×
1142

×
NEW
1143
{ #category : #'imports - pipelines' }
×
1144
GLHModelImporter >> pipelinesOf: aProjectID [
×
1145

×
1146
        | result |
×
1147
        ('Search pipelines of: ' , aProjectID printString) recordInfo.
×
NEW
1148
        result := self repoApi pipelines getAllInProject: aProjectID.
×
NEW
1149
        "pipelinesOfProject: aProjectID."
×
NEW
1150
        ^ (result collect: [ :pipelinesJson | self parsePipelinesResult: pipelinesJson ]) flattened
×
1151
]
×
1152

×
NEW
1153
{ #category : #private }
×
1154
GLHModelImporter >> selectEntityType: aType overAttribut: aSelector equalTo: value [
×
1155

×
1156
        ^ (self glhModel allWithType: aType)
×
1157
                select: [ :entity | (entity perform: aSelector) = value ]
×
1158
]
×
1159

×
NEW
1160
{ #category : #'import - groups' }
×
1161
GLHModelImporter >> subGroupsOf: aGroupID [
×
1162

×
NEW
1163
        | results subgroups |
×
1164
        ('Search subgroup of: ' , aGroupID printString) recordInfo.
×
NEW
1165
        results := self repoApi groups subgroupsOf: aGroupID.
×
NEW
1166
        subgroups := (results collect: [ :subgroupsJson | self parseSubGroupResult: subgroupsJson ]) flattened.
×
1167
        
×
NEW
1168
        ^ subgroups
×
1169
]
×
1170

×
1171
{ #category : #accessing }
×
1172
GLHModelImporter >> withInitialCommits: boolean [
×
1173
        withInitialCommits := boolean 
×
1174
]
×
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

© 2026 Coveralls, Inc