From 89ec056afff5924dc37711152f668e32636f06b1 Mon Sep 17 00:00:00 2001 From: Benoit Verhaeghe Date: Mon, 1 Sep 2025 08:32:56 +0200 Subject: [PATCH 1/3] should reject user withoutid --- src/GitLabHealth-Model-Analysis/GitMetricExporter.class.st | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/GitLabHealth-Model-Analysis/GitMetricExporter.class.st b/src/GitLabHealth-Model-Analysis/GitMetricExporter.class.st index ad8be32c..9a421f32 100644 --- a/src/GitLabHealth-Model-Analysis/GitMetricExporter.class.st +++ b/src/GitLabHealth-Model-Analysis/GitMetricExporter.class.st @@ -562,7 +562,7 @@ GitMetricExporter >> setupAnalysisForUsersWithNames: userNames [ glhImporter userCatalogue ifNotNil: [ glhImporter userCatalogue scrapeAuthorNamesForUsers: users ]. - users do: [ :user | + users select: [ :u | u id isNotNil ] thenDo: [ :user | | projects | projects := glhImporter importContributedProjectsOfUser: user. From 360853b951d974407845f7c89b872060691215f9 Mon Sep 17 00:00:00 2001 From: Benoit Verhaeghe Date: Mon, 1 Sep 2025 09:13:27 +0200 Subject: [PATCH 2/3] should fasten the metrics linked to Jira by not recomputing lot more than necessary --- .../CommitLinkedToJiraProjectMetric.class.st | 12 +++++++----- ...aTimeMRTimeDifferenceProjectMetric.class.st | 18 +++++++++++------- ...geRequestLinkedToJiraProjectMetric.class.st | 12 +++++++----- 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/src/GitLabHealth-Model-Analysis/CommitLinkedToJiraProjectMetric.class.st b/src/GitLabHealth-Model-Analysis/CommitLinkedToJiraProjectMetric.class.st index a338089b..2c0ed742 100644 --- a/src/GitLabHealth-Model-Analysis/CommitLinkedToJiraProjectMetric.class.st +++ b/src/GitLabHealth-Model-Analysis/CommitLinkedToJiraProjectMetric.class.st @@ -52,12 +52,14 @@ CommitLinkedToJiraProjectMetric >> load [ { #category : #issue } CommitLinkedToJiraProjectMetric >> loadCommitRequestIssues: aCommitCollection [ + | connector | + connector := GPJCConnector new + gpModel: glhImporter glhModel; + jiraModel: jiraImporter model; + yourself. aCommitCollection do: [ :commit | | id | - id := GPJCConnector new jiraKeyFromCommitMessage: commit message. + id := connector jiraKeyFromCommitMessage: commit message. jiraImporter importIssue: id. - GPJCConnector new - gpModel: glhImporter glhModel; - jiraModel: jiraImporter model; - connect ] + connector connectCommit: commit ] ] diff --git a/src/GitLabHealth-Model-Analysis/JiraTimeMRTimeDifferenceProjectMetric.class.st b/src/GitLabHealth-Model-Analysis/JiraTimeMRTimeDifferenceProjectMetric.class.st index 579db599..021fb69f 100644 --- a/src/GitLabHealth-Model-Analysis/JiraTimeMRTimeDifferenceProjectMetric.class.st +++ b/src/GitLabHealth-Model-Analysis/JiraTimeMRTimeDifferenceProjectMetric.class.st @@ -82,11 +82,15 @@ JiraTimeMRTimeDifferenceProjectMetric >> load [ { #category : #issue } JiraTimeMRTimeDifferenceProjectMetric >> loadMergeRequestIssues: aMergeRequestCollection [ - - (aMergeRequestCollection do: [ :mr | - |id| - id := GPJCConnector new jiraKeyFromCommitMessage: mr title . - jiraImporter importIssue: id. - GPJCConnector new gpModel: glhImporter glhModel; jiraModel: jiraImporter model; connect. - ]). + + | connector | + connector := GPJCConnector new + gpModel: glhImporter glhModel; + jiraModel: jiraImporter model; + yourself. + aMergeRequestCollection do: [ :mr | + | id | + id := connector jiraKeyFromCommitMessage: mr title. + jiraImporter importIssue: id. + connector connectMergeRequest: mr ] ] diff --git a/src/GitLabHealth-Model-Analysis/MergeRequestLinkedToJiraProjectMetric.class.st b/src/GitLabHealth-Model-Analysis/MergeRequestLinkedToJiraProjectMetric.class.st index a92f6898..8b873e17 100644 --- a/src/GitLabHealth-Model-Analysis/MergeRequestLinkedToJiraProjectMetric.class.st +++ b/src/GitLabHealth-Model-Analysis/MergeRequestLinkedToJiraProjectMetric.class.st @@ -58,12 +58,14 @@ MergeRequestLinkedToJiraProjectMetric >> load [ { #category : #issue } MergeRequestLinkedToJiraProjectMetric >> loadMergeRequestIssues: aMergeRequestCollection [ + | connector | + connector := GPJCConnector new + gpModel: glhImporter glhModel; + jiraModel: jiraImporter model; + yourself. aMergeRequestCollection do: [ :mr | | id | - id := GPJCConnector new jiraKeyFromCommitMessage: mr title. + id := connector jiraKeyFromCommitMessage: mr title. jiraImporter importIssue: id. - GPJCConnector new - gpModel: glhImporter glhModel; - jiraModel: jiraImporter model; - connect ] + connector connectMergeRequest: mr ] ] From d8b666315b037d3b1bfd0f9cc9ca43ab30cceb09 Mon Sep 17 00:00:00 2001 From: Benoit Verhaeghe Date: Mon, 1 Sep 2025 13:47:24 +0200 Subject: [PATCH 3/3] this should avoid full reconnect of jiraModel with GPH model when computing things incrementally --- .../CommitsLinkWithTicketMetric.class.st | 2 +- .../UserMetric.class.st | 4 +- .../GPJCConnectorTest.class.st | 48 +++++++++++++++++++ .../GPJCConnector.class.st | 20 ++++++-- 4 files changed, 67 insertions(+), 7 deletions(-) diff --git a/src/GitLabHealth-Model-Analysis/CommitsLinkWithTicketMetric.class.st b/src/GitLabHealth-Model-Analysis/CommitsLinkWithTicketMetric.class.st index 2de49b18..f3e35789 100644 --- a/src/GitLabHealth-Model-Analysis/CommitsLinkWithTicketMetric.class.st +++ b/src/GitLabHealth-Model-Analysis/CommitsLinkWithTicketMetric.class.st @@ -42,7 +42,7 @@ CommitsLinkWithTicketMetric >> load [ GPJCConnector new gpModel: glhImporter glhModel; jiraModel: jiraImporter model; - connect. + connectCommits: userCommits. ^userCommits := userCommits select: [ :commit | commit jiraIssue isNotNil ] diff --git a/src/GitLabHealth-Model-Analysis/UserMetric.class.st b/src/GitLabHealth-Model-Analysis/UserMetric.class.st index f42ff742..f4257c5a 100644 --- a/src/GitLabHealth-Model-Analysis/UserMetric.class.st +++ b/src/GitLabHealth-Model-Analysis/UserMetric.class.st @@ -175,7 +175,7 @@ UserMetric >> loadUserCompleteMergeRequestsWithJiraIssueSince: since until: unti GPJCConnector new gpModel: glhImporter glhModel; jiraModel: jiraImporter model; - connect. + connectMergeRequests: mergeRequests. ^ mergeRequests select: [ :mergeRequest | mergeRequest jiraIssue isNotNil ] @@ -203,7 +203,7 @@ UserMetric >> loadUserMergeRequestsWithJiraIssueSince: since until: until [ GPJCConnector new gpModel: glhImporter glhModel; jiraModel: jiraImporter model; - connect. + connectMergeRequests: mergeRequests. ^ mergeRequests select: [ :mergeRequest | mergeRequest jiraIssue isNotNil ] diff --git a/src/GitProject-JiraConnector-Tests/GPJCConnectorTest.class.st b/src/GitProject-JiraConnector-Tests/GPJCConnectorTest.class.st index 016dac72..f1f0d443 100644 --- a/src/GitProject-JiraConnector-Tests/GPJCConnectorTest.class.st +++ b/src/GitProject-JiraConnector-Tests/GPJCConnectorTest.class.st @@ -53,6 +53,30 @@ GPJCConnectorTest >> testConnectCommitDoesNotExist [ self assert: commit jiraIssue equals: nil ] +{ #category : #tests } +GPJCConnectorTest >> testConnectCommits [ + + | issue commit issue2 commit2 | + issue := jiraModel newIssue. + issue key: 'HELLO-WORLD'. + + commit := gitProject newCommit. + commit message: 'I am a commit for [HELLO-WORLD]'. + + issue2 := jiraModel newIssue. + issue2 key: 'HELLO-WORLD2'. + + commit2 := gitProject newCommit. + commit2 message: 'I am a commit for [HELLO-WORLD2]'. + + connector connectCommits: { commit }. + self assert: issue commits anyOne equals: commit. + self assert: commit jiraIssue equals: issue. + + self assert: issue2 commits isEmpty. + self assert: commit2 jiraIssue equals: nil +] + { #category : #test } GPJCConnectorTest >> testConnectMergeRequest [ @@ -83,6 +107,30 @@ GPJCConnectorTest >> testConnectMergeRequestDoesNotExist [ self assert: mergeRequest jiraIssue equals: nil ] +{ #category : #tests } +GPJCConnectorTest >> testConnectMergeRequests [ + + | issue mergeRequest issue2 mergeRequest2 | + issue := jiraModel newIssue. + issue key: 'HELLO-WORLD'. + + mergeRequest := gitProject newMergeRequest. + mergeRequest title: 'I am a merge request for [HELLO-WORLD]'. + + issue2 := jiraModel newIssue. + issue2 key: 'HELLO-WORLD2'. + + mergeRequest2 := gitProject newMergeRequest. + mergeRequest2 title: 'I am a merge request for [HELLO-WORLD2]'. + + connector connectMergeRequests: { mergeRequest }. + self assert: issue mergeRequest equals: mergeRequest. + self assert: mergeRequest jiraIssue equals: issue. + + self assert: issue2 mergeRequest equals: nil. + self assert: mergeRequest2 jiraIssue equals: nil +] + { #category : #test } GPJCConnectorTest >> testConnectSeveralCommit [ diff --git a/src/GitProject-JiraConnector/GPJCConnector.class.st b/src/GitProject-JiraConnector/GPJCConnector.class.st index cb0d5113..443fc359 100644 --- a/src/GitProject-JiraConnector/GPJCConnector.class.st +++ b/src/GitProject-JiraConnector/GPJCConnector.class.st @@ -24,10 +24,10 @@ Class { { #category : #accessing } GPJCConnector >> connect [ - (self gpModel allWithType: GLHCommit) do: [ :commit | - self connectCommit: commit ]. - (self gpModel allWithType: GLHMergeRequest) do: [ :mergeRequest | - self connectMergeRequest: mergeRequest ] + "This is slow, if you wanna connect more specific things please consider doing it using helper methods" + + self connectCommits: (self gpModel allWithType: GLHCommit). + self connectMergeRequests: (self gpModel allWithType: GLHMergeRequest) ] { #category : #accessing } @@ -38,6 +38,12 @@ GPJCConnector >> connectCommit: commit [ ifFound: [ :issue | commit jiraIssue: issue ] ] +{ #category : #accessing } +GPJCConnector >> connectCommits: commits [ + + commits do: [ :commit | self connectCommit: commit ] +] + { #category : #accessing } GPJCConnector >> connectMergeRequest: mergeRequest [ @@ -46,6 +52,12 @@ GPJCConnector >> connectMergeRequest: mergeRequest [ ifFound: [ :issue | mergeRequest jiraIssue: issue ] ] +{ #category : #accessing } +GPJCConnector >> connectMergeRequests: mergeRequests [ + + mergeRequests do: [ :mergeRequest | self connectMergeRequest: mergeRequest ] +] + { #category : #accessing } GPJCConnector >> gpModel [