diff --git a/src/main/java/com/talanlabs/sonar/plugins/gitlab/Reporter.java b/src/main/java/com/talanlabs/sonar/plugins/gitlab/Reporter.java index bbef21a..2782155 100644 --- a/src/main/java/com/talanlabs/sonar/plugins/gitlab/Reporter.java +++ b/src/main/java/com/talanlabs/sonar/plugins/gitlab/Reporter.java @@ -19,12 +19,20 @@ */ package com.talanlabs.sonar.plugins.gitlab; +import com.google.common.base.Charsets; +import com.google.common.hash.HashCode; +import com.google.common.hash.HashFunction; +import com.google.common.hash.Hashing; import com.talanlabs.sonar.plugins.gitlab.models.*; import org.apache.commons.lang3.StringEscapeUtils; import org.sonar.api.batch.rule.Severity; import javax.annotation.Nullable; import java.io.File; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -231,10 +239,22 @@ public String buildJson() { private String buildIssueCodeQualityJson(ReportIssue reportIssue) { Issue issue = reportIssue.getIssue(); + String description = prepareMessageJson(issue.getMessage()); + String location = buildLocationCodeQualityJson(reportIssue); + + HashFunction hf = Hashing.md5(); + HashCode hc = hf.newHasher() + .putString(description, Charsets.UTF_8) + .putString(location, Charsets.UTF_8) + .hash(); + + String fingerprint = hc.toString(); + StringJoiner sj = new StringJoiner(",", "{", "}"); - sj.add("\"fingerprint\":\"" + issue.getKey() + "\""); - sj.add("\"description\":\"" + prepareMessageJson(issue.getMessage()) + "\""); - sj.add("\"location\":" + buildLocationCodeQualityJson(reportIssue)); + sj.add("\"fingerprint\":\"" + fingerprint + "\""); + sj.add("\"description\":\"" + description + "\""); + sj.add("\"severity\":\"" + issue.getSeverity().name().toLowerCase() + "\""); + sj.add("\"location\":" + location); return sj.toString(); } diff --git a/src/test/java/com/talanlabs/sonar/plugins/gitlab/ReporterBuilderTest.java b/src/test/java/com/talanlabs/sonar/plugins/gitlab/ReporterBuilderTest.java index feb4875..6fcb379 100644 --- a/src/test/java/com/talanlabs/sonar/plugins/gitlab/ReporterBuilderTest.java +++ b/src/test/java/com/talanlabs/sonar/plugins/gitlab/ReporterBuilderTest.java @@ -545,7 +545,7 @@ public void testCommitAnalysisWithNewIssuesCodeClimate() { reporterBuilder.build(null, Arrays.asList(newIssue, globalIssue, issueOnProject, issueOnDir, fileNotInPR, lineNotVisible, notNewIssue)); Mockito.verify(commitFacade).writeJsonFile(Mockito.contains( - "[{\"fingerprint\":\"null\",\"description\":\"msg\",\"location\":{\"path\":\"null\",\"lines\": { \"begin\":0,\"end\":0}}},{\"fingerprint\":\"null\",\"description\":\"msg4\",\"location\":{\"path\":\"null\",\"lines\": { \"begin\":0,\"end\":0}}},{\"fingerprint\":\"null\",\"description\":\"msg5\",\"location\":{\"path\":\"null\",\"lines\": { \"begin\":0,\"end\":0}}},{\"fingerprint\":\"null\",\"description\":\"msg1\",\"location\":{\"path\":\"null\",\"lines\": { \"begin\":1,\"end\":1}}},{\"fingerprint\":\"null\",\"description\":\"msg2\",\"location\":{\"path\":\"null\",\"lines\": { \"begin\":2,\"end\":2}}},{\"fingerprint\":\"null\",\"description\":\"msg3\",\"location\":{\"path\":\"null\",\"lines\": { \"begin\":1,\"end\":1}}}]")); + "[{\"fingerprint\":\"06496daf6fab6a0f97d6e0469e23c314\",\"description\":\"msg\",\"severity\":\"blocker\",\"location\":{\"path\":\"null\",\"lines\": { \"begin\":0,\"end\":0}}},{\"fingerprint\":\"0c0d7bbe0396951af65c450966b422fb\",\"description\":\"msg4\",\"severity\":\"blocker\",\"location\":{\"path\":\"null\",\"lines\": { \"begin\":0,\"end\":0}}},{\"fingerprint\":\"7d626e4f4d387b14046054a2c2eff2ff\",\"description\":\"msg5\",\"severity\":\"blocker\",\"location\":{\"path\":\"null\",\"lines\": { \"begin\":0,\"end\":0}}},{\"fingerprint\":\"42e8b6ecbbab8acf76ead03757e49300\",\"description\":\"msg1\",\"severity\":\"blocker\",\"location\":{\"path\":\"null\",\"lines\": { \"begin\":1,\"end\":1}}},{\"fingerprint\":\"52660d2146c00c13d697e8a12be7cad3\",\"description\":\"msg2\",\"severity\":\"blocker\",\"location\":{\"path\":\"null\",\"lines\": { \"begin\":2,\"end\":2}}},{\"fingerprint\":\"c6acd4f8aa70e27dde47469a54efdebe\",\"description\":\"msg3\",\"severity\":\"blocker\",\"location\":{\"path\":\"null\",\"lines\": { \"begin\":1,\"end\":1}}}]")); } @Test