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

moosetechnology / GitProjectHealth / 13807399403

12 Mar 2025 08:58AM UTC coverage: 66.731% (+0.2%) from 66.508%
13807399403

Pull #145

github

web-flow
Merge 41a250ee3 into 2c2d8c5e1
Pull Request #145: Code addition merge rerquest project metric

6833 of 8097 new or added lines in 90 files covered. (84.39%)

1 existing line in 1 file now uncovered.

11746 of 17602 relevant lines covered (66.73%)

0.67 hits per line

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

0.0
/src/GitLabHealth-Model-Analysis/GitMetricExporter.class.st
1
Class {
2
        #name : #GitMetricExporter,
3
        #superclass : #Object,
4
        #instVars : [
5
                'glhImporter',
6
                'jiraImporter',
7
                'label',
8
                'entities',
9
                'projectCache',
10
                'sinceTimeLimit',
11
                'runningPeriods',
12
                'maxCommitWindow',
13
                'over',
14
                'emailDomain',
15
                'metrics',
16
                'analyses'
17
        ],
18
        #category : #'GitLabHealth-Model-Analysis'
19
}
20

21
{ #category : #'as yet unclassified' }
NEW
22
GitMetricExporter class >> demoPeriod [
×
NEW
23

×
NEW
24
        ^ self new
×
NEW
25
                  addAPeriodFrom: '01 march 2023' to: '31 may 2023';
×
NEW
26
                  addAPeriodFrom: '01 december 2023' to: '29 february 2024';
×
NEW
27
                  addAPeriodFrom: '01 march 2024' to: '31 may 2024'
×
NEW
28
]
×
29

30
{ #category : #adding }
NEW
31
GitMetricExporter >> addAPeriodFrom: since to: until [
×
NEW
32

×
NEW
33
        runningPeriods add: {
×
NEW
34
                        (#since -> since asDate).
×
NEW
35
                        (#until -> until asDate) } asDictionary.
×
NEW
36
        
×
NEW
37
        ^runningPeriods 
×
NEW
38
]
×
39

40
{ #category : #adding }
NEW
41
GitMetricExporter >> addEntitiesFromUserNames: userNames [
×
NEW
42
        "import all the project since a certain time"
×
NEW
43
        
×
NEW
44
        self
×
NEW
45
                deprecated: 'Use #setupAnalysesForUsersWithNames instead'
×
NEW
46
                on: '03 Sept 2024'
×
NEW
47
                in:
×
NEW
48
                'Pharo-11.0.0+build.726.sha.aece1b5473acf3830a0e082c1bc3a15d4ff3522b (64 Bit)'.
×
NEW
49

×
NEW
50
        'Import all projects from the Git repository' recordInfo.
×
NEW
51
        projectCache := projectCache ifNil: [
×
NEW
52
                                glhImporter importProjectsSince: sinceTimeLimit ].
×
NEW
53

×
NEW
54
        "then collect the project in which the user has be seen commited"
×
NEW
55
        entities addAll: (userNames collect: [ :username |
×
NEW
56
                         | projects  i size |
×
NEW
57
                         projects := self
×
NEW
58
                                             findParticipationOfCommitAuthorNamed: username
×
NEW
59
                                             amongProjects: projectCache.
×
NEW
60

×
NEW
61
                        "metrics := GitMetric4User new.
×
NEW
62
                         metrics
×
NEW
63
                                 glhImporter: glhImporter;
×
NEW
64
                                 jiraImporter: jiraImporter;
×
NEW
65
                                 findUserNamed: username."
×
NEW
66

×
NEW
67

×
NEW
68

×
NEW
69
                         i := 0.
×
NEW
70
                         size := projects size.
×
NEW
71
                         metrics itsProjects: (projects collect: [ :p |
×
NEW
72
                                          (' ' join: {
×
NEW
73
                                                           'complete import of project:'.
×
NEW
74
                                                           p name printString.
×
NEW
75
                                                           '['.
×
NEW
76
                                                           (i := i + 1) printString.
×
NEW
77
                                                           '/'.
×
NEW
78
                                                           size.
×
NEW
79
                                                           ']' }) recordInfo.
×
NEW
80

×
NEW
81
                                          p id -> (glhImporter completeImportProject: p) ]) asDictionary.
×
NEW
82

×
NEW
83
                         metrics ]).
×
NEW
84

×
NEW
85
        ^ self
×
NEW
86
]
×
87

88
{ #category : #adding }
NEW
89
GitMetricExporter >> addEntitiesFromUserNamesAndProjects: usersWithProjects [
×
NEW
90

×
NEW
91
        self
×
NEW
92
                deprecated: 'Use #setupAnalysesForUsersWithNames instead'
×
NEW
93
                on: '03 Sept 2024'
×
NEW
94
                in:
×
NEW
95
                'Pharo-11.0.0+build.726.sha.aece1b5473acf3830a0e082c1bc3a15d4ff3522b (64 Bit)'.
×
NEW
96

×
NEW
97
        entities addAll: (usersWithProjects associations collect: [ :assoc |
×
NEW
98
                         | username projects  |
×
NEW
99
                         username := assoc key.
×
NEW
100
                         projects := assoc value.
×
NEW
101

×
NEW
102
                        " metrics := GitMetric4User new.
×
NEW
103
                         metrics
×
NEW
104
                                 glhImporter: glhImporter;
×
NEW
105
                                 jiraImporter: jiraImporter;
×
NEW
106
                                 findUserNamed: username.
×
NEW
107
                         metrics loadProjectsFromIds: projects."
×
NEW
108

×
NEW
109
                         username ]).
×
NEW
110

×
NEW
111
        ^ self 
×
NEW
112
]
×
113

114
{ #category : #utilities }
NEW
115
GitMetricExporter >> constructFilePathFor: runningOver andEntities: entitiesName [
×
NEW
116

×
NEW
117
        | file |
×
NEW
118
        file := (FileLocator home
×
NEW
119
                 /
×
NEW
120
                         ('GitlabHealth-' , label printString , '-'
×
NEW
121
                          , runningOver printString , '-' , entitiesName printString
×
NEW
122
                          , '-'
×
NEW
123
                          , (DateAndTime now printString replaceAll: $: with: $-)
×
NEW
124
                          , '.csv')) asFileReference.
×
NEW
125
        ^ file
×
NEW
126
]
×
127

128
{ #category : #exporting }
NEW
129
GitMetricExporter >> csvMetricsFor: metricCollection at: date [
×
NEW
130

×
NEW
131
        | csvMetrics |
×
NEW
132
        csvMetrics := metricCollection collect: [ :metric |
×
NEW
133
                              metric new description , ' - ' , date asString
×
NEW
134
                              -> [ :groupAnalyses |
×
NEW
135
                                      | analysis |
×
NEW
136
                                      analysis := self
×
NEW
137
                                                          getAnalysisWithDate: date
×
NEW
138
                                                          from: groupAnalyses.
×
NEW
139
                                      analysis
×
NEW
140
                                              ifNil: [ nil ]
×
NEW
141
                                              ifNotNil: [ analysis metrics at: metric new name ] ] ].
×
NEW
142

×
NEW
143
        ^ csvMetrics asOrderedDictionary
×
NEW
144
]
×
145

146
{ #category : #accessing }
NEW
147
GitMetricExporter >> entities: aCollection [ 
×
NEW
148
        entities := aCollection
×
NEW
149
]
×
150

151
{ #category : #exporting }
NEW
152
GitMetricExporter >> exportFor: usersWithProjects [
×
NEW
153

×
NEW
154
        self
×
NEW
155
                deprecated: 'Use #exportInCSV instead'
×
NEW
156
                on: '03 Sept 2024'
×
NEW
157
                in:
×
NEW
158
                'Pharo-11.0.0+build.726.sha.aece1b5473acf3830a0e082c1bc3a15d4ff3522b (64 Bit)'.
×
NEW
159

×
NEW
160
        self exportFor: usersWithProjects over: {
×
NEW
161
                        Date.
×
NEW
162
                        Week.
×
NEW
163
                        Month.
×
NEW
164
                        Year }
×
NEW
165
]
×
166

167
{ #category : #exporting }
NEW
168
GitMetricExporter >> exportFor: usersWithProjects over: aCollectionOfDateWeekMonthOrYear [
×
NEW
169

×
NEW
170
        self
×
NEW
171
                deprecated: 'Use #exportInCSV instead'
×
NEW
172
                on: '03 Sept 2024'
×
NEW
173
                in:
×
NEW
174
                'Pharo-11.0.0+build.726.sha.aece1b5473acf3830a0e082c1bc3a15d4ff3522b (64 Bit)'.
×
NEW
175

×
NEW
176
        entities ifNil: [
×
NEW
177
                self addEntitiesFromUserNamesAndProjects: usersWithProjects ].
×
NEW
178

×
NEW
179
        self exportFor: aCollectionOfDateWeekMonthOrYear
×
NEW
180
]
×
181

182
{ #category : #exporting }
NEW
183
GitMetricExporter >> exportInCSV [
×
NEW
184

×
NEW
185
        self exportUserAnalysesInCSV.
×
NEW
186
        self exportProjectAnalysesInCSV.
×
NEW
187
]
×
188

189
{ #category : #exporting }
NEW
190
GitMetricExporter >> exportInDB: repository [
×
NEW
191

×
NEW
192
        repository enableSingleton.
×
NEW
193
        analyses do: [ :analysis | analysis save ]
×
NEW
194
]
×
195

196
{ #category : #exporting }
NEW
197
GitMetricExporter >> exportInS3: bucketName accessKey: accessKey secretKey: secretKey region: region [
×
NEW
198

×
NEW
199
        | s3 bucket ston date fileName |
×
NEW
200
        AWSS3Config default
×
NEW
201
                accessKeyId: accessKey;
×
NEW
202
                secretKey: secretKey;
×
NEW
203
                regionName: region.
×
NEW
204

×
NEW
205
        s3 := AWSS3 new.
×
NEW
206
        bucket := s3 bucketNamed: bucketName.
×
NEW
207

×
NEW
208
        ston := STON toString: analyses.
×
NEW
209

×
NEW
210
        date := Date today asString copyReplaceAll: ' ' asString with: '-'.
×
NEW
211
        fileName := ('-' join: {
×
NEW
212
                                     'analyse'.
×
NEW
213
                                     label.
×
NEW
214
                                     over asString.
×
NEW
215
                                     date }) , '.ston'.
×
NEW
216

×
NEW
217
        bucket atKey: fileName putObject: ston
×
NEW
218
]
×
219

220
{ #category : #exporting }
NEW
221
GitMetricExporter >> exportProjectAnalysesInCSV [
×
NEW
222

×
NEW
223
        | exportBrowserModel groupedByOver group groupOver groupByName periods csvMetrics file |
×
NEW
224
        exportBrowserModel := MiExportModel new.
×
NEW
225

×
NEW
226
        groupedByOver := self projectAnalyses groupedBy: #over.
×
NEW
227

×
NEW
228
        groupedByOver associations do: [ :groupAssociation |
×
NEW
229
                group := groupAssociation value.
×
NEW
230
                groupOver := groupAssociation key.
×
NEW
231

×
NEW
232

×
NEW
233
                groupByName := group groupedBy: #projectName.
×
NEW
234
                exportBrowserModel entitiesList: groupByName.
×
NEW
235

×
NEW
236
                exportBrowserModel removeColumnForQueryNamed: #Type.
×
NEW
237
                exportBrowserModel removeColumnForQueryNamed: #Name.
×
NEW
238

×
NEW
239
                exportBrowserModel
×
NEW
240
                        addColumnForQuery: [ :groupAnalyses |
×
NEW
241
                        (groupAnalyses at: 1) projectName ]
×
NEW
242
                        withName: #'Project name'.
×
NEW
243

×
NEW
244
                periods := (group groupedBy: #period) keys.
×
NEW
245

×
NEW
246
                periods do: [ :period |
×
NEW
247
                        csvMetrics := self
×
NEW
248
                                              csvMetricsFor: self projectMetrics
×
NEW
249
                                              at: (period at: #since).
×
NEW
250

×
NEW
251

×
NEW
252
                        csvMetrics associations do: [ :association |
×
NEW
253
                                exportBrowserModel
×
NEW
254
                                        addColumnForQuery: association value
×
NEW
255
                                        withName: association key ] ].
×
NEW
256

×
NEW
257
                file := self constructFilePathFor: groupOver andEntities: 'projects'.
×
NEW
258
                file writeStreamDo: [ :aStream |
×
NEW
259
                        exportBrowserModel writeCSVOn: aStream ] ]
×
NEW
260
]
×
261

262
{ #category : #exporting }
NEW
263
GitMetricExporter >> exportUserAnalysesInCSV [
×
NEW
264

×
NEW
265
        | exportBrowserModel groupedByOver group groupOver groupByName periods csvMetrics file |
×
NEW
266
        exportBrowserModel := MiExportModel new.
×
NEW
267
        groupedByOver := self userAnalyses groupedBy: #over.
×
NEW
268

×
NEW
269
        groupedByOver associations do: [ :groupAssociation |
×
NEW
270
                group := groupAssociation value.
×
NEW
271
                groupOver := groupAssociation key.
×
NEW
272

×
NEW
273
                groupByName := group groupedBy: #username.
×
NEW
274
                exportBrowserModel entitiesList: groupByName.
×
NEW
275
                exportBrowserModel removeColumnForQueryNamed: #Type.
×
NEW
276
                exportBrowserModel removeColumnForQueryNamed: #Name.
×
NEW
277

×
NEW
278
                exportBrowserModel
×
NEW
279
                        addColumnForQuery: [ :groupAnalyses |
×
NEW
280
                        (groupAnalyses at: 1) username ]
×
NEW
281
                        withName: #'User name'.
×
NEW
282

×
NEW
283
                exportBrowserModel
×
NEW
284
                        addColumnForQuery: [ :groupAnalyses | (groupAnalyses at: 1) email ]
×
NEW
285
                        withName: #'User email'.
×
NEW
286

×
NEW
287
                periods := (group groupedBy: #period) keys.
×
NEW
288
                periods do: [ :period |
×
NEW
289
                        csvMetrics := self
×
NEW
290
                                              csvMetricsFor: self userMetrics
×
NEW
291
                                              at: (period at: #since).
×
NEW
292
                        csvMetrics associations do: [ :association |
×
NEW
293
                                exportBrowserModel
×
NEW
294
                                        addColumnForQuery: association value
×
NEW
295
                                        withName: association key ] ].
×
NEW
296

×
NEW
297

×
NEW
298
                file := self
×
NEW
299
                                constructFilePathFor: groupOver
×
NEW
300
                                andEntities: 'users'.
×
NEW
301

×
NEW
302
                file writeStreamDo: [ :aStream |
×
NEW
303
                        exportBrowserModel writeCSVOn: aStream ] ]
×
NEW
304
]
×
305

306
{ #category : #projects }
NEW
307
GitMetricExporter >> findParticipationOfCommitAuthorNamed: username amongProjects: aCollectionOfProjects [
×
NEW
308

×
NEW
309
        | response itsProjects i size params |
×
NEW
310
        i := 1.
×
NEW
311
        size := aCollectionOfProjects size.
×
NEW
312
        itsProjects := aCollectionOfProjects select: [ :project |
×
NEW
313
                               (' ' join: {
×
NEW
314
                                                'search'.
×
NEW
315
                                                username printString.
×
NEW
316
                                                'in Project:'.
×
NEW
317
                                                project name printString.
×
NEW
318
                                                '['.
×
NEW
319
                                                (i := i + 1) printString.
×
NEW
320
                                                '/'.
×
NEW
321
                                                size.
×
NEW
322
                                                ']' }) recordInfo.
×
NEW
323

×
NEW
324
                                                        params := { 
×
NEW
325
                                                                #author -> username.
×
NEW
326
                                                                #since -> '01 january 2023' asDate asDateAndTime asString.
×
NEW
327
                                                                #until -> Date today asDateAndTime asString
×
NEW
328
                                                        } asDictionary.
×
NEW
329
                               response := glhImporter repoApi commits getAllInProject: project id withParams: params.
×
NEW
330
                               response := (response collect: [ :commitsJson | glhImporter parseCommitsResult: commitsJson]) flattened.
×
NEW
331
                               response isNotEmpty
×
NEW
332
                 ].
×
NEW
333

×
NEW
334
        ^ itsProjects
×
NEW
335
]
×
336

337
{ #category : #projects }
NEW
338
GitMetricExporter >> findProjectsOfUser: aCollection [ 
×
NEW
339
        self shouldBeImplemented.
×
NEW
340
]
×
341

342
{ #category : #analysis }
NEW
343
GitMetricExporter >> generateAnalysesOver: aDateWeekMonthOrYear [
×
NEW
344

×
NEW
345
        analyses := OrderedCollection new.
×
NEW
346
        runningPeriods do: [ :period |
×
NEW
347
                analyses addAll: (self
×
NEW
348
                                 generateUsersAnalysesDuringPeriod: period
×
NEW
349
                                 over: aDateWeekMonthOrYear).
×
NEW
350

×
NEW
351
                analyses addAll: (self
×
NEW
352
                                 generateProjectsAnalysesDuringPeriod: period
×
NEW
353
                                 over: aDateWeekMonthOrYear) ].
×
NEW
354

×
NEW
355
        ^ analyses
×
NEW
356
]
×
357

358
{ #category : #analysis }
NEW
359
GitMetricExporter >> generateProjectsAnalysesDuringPeriod: period over: aDateWeekMonthOrYear [
×
NEW
360

×
NEW
361
        ^self projectEntities collect: [ :project |
×
NEW
362
                | projectAnalysisReport |
×
NEW
363
                projectAnalysisReport := ProjectAnalysisReport new
×
NEW
364
                        projectName: project name;
×
NEW
365
                        period: period;
×
NEW
366
                        over: aDateWeekMonthOrYear.
×
NEW
367
                        
×
NEW
368
                
×
NEW
369
                  self projectMetrics do: [ :metric |
×
NEW
370
                                |newMetric result|
×
NEW
371
                           newMetric := metric new
×
NEW
372
                                               glhImporter: glhImporter;
×
NEW
373
                                               jiraImporter: jiraImporter;
×
NEW
374
                                               setPeriodSince: (period at: #since)
×
NEW
375
                                               until: (period at: #until);
×
NEW
376
                                               over: aDateWeekMonthOrYear;
×
NEW
377
                                               project: project.
×
NEW
378

×
NEW
379

×
NEW
380
                          result := newMetric calculate.
×
NEW
381
                          projectAnalysisReport metrics at: newMetric name put: result ]. 
×
NEW
382
                
×
NEW
383
                        projectAnalysisReport]
×
NEW
384
]
×
385

386
{ #category : #analysis }
NEW
387
GitMetricExporter >> generateUsersAnalysesDuringPeriod: period over: aDateWeekMonthOrYear [
×
NEW
388

×
NEW
389
        | userAnalysisReport newMetric result |
×
NEW
390
        ^ self userEntities collect: [ :user |
×
NEW
391
                  userAnalysisReport := UserAnalysisReport new
×
NEW
392
                                                username: user name;
×
NEW
393
                                                                                        email: (user email ifNil: [ user public_email]);
×
NEW
394
                                                period: period;
×
NEW
395
                                                over: aDateWeekMonthOrYear.
×
NEW
396

×
NEW
397
                  self userMetrics do: [ :metric |
×
NEW
398
                          newMetric := metric new
×
NEW
399
                                               glhImporter: glhImporter;
×
NEW
400
                                               jiraImporter: jiraImporter;
×
NEW
401
                                               setPeriodSince: (period at: #since)
×
NEW
402
                                               until: (period at: #until);
×
NEW
403
                                               over: aDateWeekMonthOrYear;
×
NEW
404
                                               user: user;
×
NEW
405
                                               emailDomain: emailDomain.
×
NEW
406

×
NEW
407

×
NEW
408
                          result := newMetric calculate.
×
NEW
409
                          userAnalysisReport metrics at: newMetric name put: result ].
×
NEW
410

×
NEW
411
                  userAnalysisReport ]
×
NEW
412
]
×
413

414
{ #category : #utilities }
NEW
415
GitMetricExporter >> getAnalysisWithDate: date from: analysisCollection [
×
NEW
416

×
NEW
417
        ^analysisCollection
×
NEW
418
                detect: [ :groupAnalysis | (groupAnalysis period at: #since) = date ]
×
NEW
419
                ifNone: [ nil ]
×
NEW
420
]
×
421

422
{ #category : #accessing }
NEW
423
GitMetricExporter >> glhImporter: anImporter [
×
NEW
424

×
NEW
425
        glhImporter := anImporter withInitialCommits: false; yourself. 
×
NEW
426
]
×
427

428
{ #category : #adding }
NEW
429
GitMetricExporter >> importAnalysesFromS3: bucketName accessKey: accessKey secretKey: secretKey region: region [
×
NEW
430

×
NEW
431
        | s3 bucket xmlObjects contentElements filesContent |
×
NEW
432
        AWSS3Config default
×
NEW
433
                accessKeyId: accessKey;
×
NEW
434
                secretKey: secretKey;
×
NEW
435
                regionName: region.
×
NEW
436

×
NEW
437
        s3 := AWSS3 new.
×
NEW
438
        bucket := s3 bucketNamed: bucketName.
×
NEW
439
        xmlObjects := bucket listObjects.
×
NEW
440
        contentElements := xmlObjects root elementsSelect: [ :element |
×
NEW
441
                                   element isNamed: 'Contents' ].
×
NEW
442

×
NEW
443
        filesContent := contentElements collect: [ :contentElement |
×
NEW
444
                                | keyValue |
×
NEW
445
                                keyValue := contentElement contentStringAt: 'Key'.
×
NEW
446
                                bucket getObject: keyValue ].
×
NEW
447

×
NEW
448
        ^ analyses := (filesContent collect: [ :file | STON fromString: file ])
×
NEW
449
                              flattened
×
NEW
450
]
×
451

452
{ #category : #initialization }
NEW
453
GitMetricExporter >> initialize [
×
NEW
454

×
NEW
455
        entities := OrderedCollection new.
×
NEW
456
        "set up the minimal date from which we are looking for the commits a particular user in projects"
×
NEW
457
        sinceTimeLimit := '2024-01-01' asDate asDateAndTime.
×
NEW
458
        runningPeriods := OrderedCollection new.
×
NEW
459
        maxCommitWindow := 3.
×
NEW
460
        over := Date.
×
NEW
461

×
NEW
462
        analyses := OrderedCollection new.
×
NEW
463

×
NEW
464
        metrics := {
×
NEW
465
                           CodeAdditionMetric.
×
NEW
466
                           CodeDeletionMetric.
×
NEW
467
                           CommentContributionMetric.
×
NEW
468
                           CommitFrequencyMetric.
×
NEW
469
                           CodeChurnMetric.
×
NEW
470
                           DelayUntilFirstChurnMetric.
×
NEW
471
                           TimeBetweenCommitMetric.
×
NEW
472
                           ContributedProjectMetric.
×
NEW
473
                           CodeAdditionByMRMetric.
×
NEW
474
                           CodeDeletionByMRMetric.
×
NEW
475
                           MergeRequestDurationMetric.
×
NEW
476
                           OpenedMergeRequestMetric.
×
NEW
477
                           ClosedMergeRequestMetric.
×
NEW
478
                           MergedMergeRequestMetric.
×
NEW
479
                           SelfMergedUnderAMinuteMergeRequestMetric.
×
NEW
480
                           ClosedTicketsMetric.
×
NEW
481
                           JiraTimeMRTimeDifferenceMetric.
×
NEW
482
                           CommitsNumberByJiraTicketsMetric.
×
NEW
483
                           CommitsLinkWithTicketMetric.
×
NEW
484

×
NEW
485

×
NEW
486
                           "Project Metrics"
×
NEW
487
                           CommitFrequencyProjectMetric.
×
NEW
488
                           ClosedMergeRequestProjectMetric.
×
NEW
489
                           CreatedMergeRequestProjectMetric.
×
NEW
490
                           MergedMergeRequestProjectMetric.
×
NEW
491
                                         ClosedMergeRequestDurationProjectMetric.
×
NEW
492
                                        OpenedMergeRequestDurationProjectMetric.
×
NEW
493
                                        MergedMergeRequestDurationProjectMetric.
×
NEW
494
                                        AutoCodeReviewCommitFrequencyProjectMetric
×
NEW
495
                                                 }
×
NEW
496
        "User Metrics"
×
NEW
497
]
×
498

499
{ #category : #accessing }
NEW
500
GitMetricExporter >> jiraImporter: anObject [
×
NEW
501

×
NEW
502
        jiraImporter := anObject
×
NEW
503
]
×
504

505
{ #category : #accessing }
NEW
506
GitMetricExporter >> label: aString [ 
×
NEW
507
        label := aString
×
NEW
508
]
×
509

510
{ #category : #accessing }
NEW
511
GitMetricExporter >> maxCommitWindow: anInteger [
×
NEW
512
        maxCommitWindow := anInteger abs
×
NEW
513
]
×
514

515
{ #category : #accessing }
NEW
516
GitMetricExporter >> metrics [
×
NEW
517

×
NEW
518
        ^ metrics
×
NEW
519
]
×
520

521
{ #category : #accessing }
NEW
522
GitMetricExporter >> metrics: anObject [
×
NEW
523

×
NEW
524
        metrics := anObject
×
NEW
525
]
×
526

527
{ #category : #adding }
NEW
528
GitMetricExporter >> onlyImportProjectsOfGroup: groupId [
×
NEW
529

×
NEW
530
        | group |
×
NEW
531
        group := glhImporter importGroup: groupId.
×
NEW
532
        projectCache := group toScope: GLHProject
×
NEW
533
]
×
534

535
{ #category : #accessing }
NEW
536
GitMetricExporter >> projectAnalyses [
×
NEW
537

×
NEW
538
        ^ analyses select: [ :analysis | analysis class = ProjectAnalysisReport ]
×
NEW
539
]
×
540

541
{ #category : #accessing }
NEW
542
GitMetricExporter >> projectEntities [
×
NEW
543

×
NEW
544
        ^ entities select: [ :entity | entity class = GLHProject ]
×
NEW
545
]
×
546

547
{ #category : #accessing }
NEW
548
GitMetricExporter >> projectMetrics [
×
NEW
549

×
NEW
550
        ^ metrics select: [ :metric | metric inheritsFrom: ProjectMetric ]
×
NEW
551
]
×
552

553
{ #category : #setup }
NEW
554
GitMetricExporter >> setupAnalysisForProjectsWithIds: projectIds [
×
NEW
555

×
NEW
556
        | projects |
×
NEW
557
        projects := glhImporter importProjects: projectIds.
×
NEW
558

×
NEW
559
        entities addAll: projects
×
NEW
560
]
×
561

562
{ #category : #setup }
NEW
563
GitMetricExporter >> setupAnalysisForUsersWithNames: userNames [
×
NEW
564
        "import all the project since a certain time"
×
NEW
565

×
NEW
566
        | users |
×
NEW
567
        users := userNames collect: [ :username |
×
NEW
568
                         glhImporter importUserByUsername: username ].
×
NEW
569

×
NEW
570
        glhImporter userCatalogue ifNotNil: [
×
NEW
571
                glhImporter userCatalogue scrapeAuthorNamesForUsers: users ].
×
NEW
572

×
NEW
573
        users do: [ :user |
×
NEW
574
                | projects |
×
NEW
575
                projects := glhImporter importContributedProjectsOfUser: user.
×
NEW
576

×
NEW
577
                projects do: [ :project |
×
NEW
578
                        glhImporter completeImportProject: project ] ].
×
NEW
579

×
NEW
580
        entities addAll: users.
×
NEW
581

×
NEW
582
        ^ self
×
NEW
583
]
×
584

585
{ #category : #accessing }
NEW
586
GitMetricExporter >> userAnalyses [
×
NEW
587

×
NEW
588
        ^ analyses select: [ :analysis | analysis class = UserAnalysisReport ]
×
NEW
589
]
×
590

591
{ #category : #accessing }
NEW
592
GitMetricExporter >> userEntities [
×
NEW
593

×
NEW
594
        ^ entities select: [ :entity | entity class = GLHUser ]
×
NEW
595
]
×
596

597
{ #category : #accessing }
NEW
598
GitMetricExporter >> userMetrics [
×
NEW
599

×
NEW
600
        ^ metrics select: [ :metric | metric inheritsFrom: UserMetric ]
×
NEW
601
]
×
602

603
{ #category : #setup }
NEW
604
GitMetricExporter >> withEmailDomain: anEmailDomain [
×
NEW
605

×
NEW
606
        "define the email domain of your Git user. Usefull to link them between service (i.e. Jira)"
×
NEW
607
        emailDomain := anEmailDomain
×
NEW
608
]
×
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