aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJulien Lancelot <julien.lancelot@sonarsource.com>2016-02-04 12:14:39 +0100
committerJulien Lancelot <julien.lancelot@sonarsource.com>2016-02-05 08:19:54 +0100
commitae05dc4dac7ec02cc00740ba074863b08400554d (patch)
treebffb2b546fef86ce0a02c45db76cf3bf42646ba1
parent0161475560b18f9b0bb87a304a6b891d393091e2 (diff)
downloadsonarqube-ae05dc4dac7ec02cc00740ba074863b08400554d.tar.gz
sonarqube-ae05dc4dac7ec02cc00740ba074863b08400554d.zip
SONAR-7114 Add line when changeset is invalid
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/scm/Changeset.java1
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/scm/ReportScmInfo.java33
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/scm/ScmInfoImpl.java4
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/scm/ReportScmInfoTest.java4
4 files changed, 23 insertions, 19 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/scm/Changeset.java b/server/sonar-server/src/main/java/org/sonar/server/computation/scm/Changeset.java
index 0f0fa14ba81..6ab3677e88f 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/scm/Changeset.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/scm/Changeset.java
@@ -108,6 +108,7 @@ public final class Changeset {
}
Changeset changeset = (Changeset) o;
+
if (date != changeset.date) {
return false;
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/scm/ReportScmInfo.java b/server/sonar-server/src/main/java/org/sonar/server/computation/scm/ReportScmInfo.java
index f1d446953d5..5921675707e 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/scm/ReportScmInfo.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/scm/ReportScmInfo.java
@@ -51,16 +51,6 @@ class ReportScmInfo implements ScmInfo {
.transform(new LineIndexToChangeset(changesets)));
}
- private static Changeset convert(BatchReport.Changesets.Changeset changeset) {
- checkState(changeset.hasRevision(), "Changeset must have a revision");
- checkState(changeset.hasDate(), "Changeset must have a date");
- return Changeset.newChangesetBuilder()
- .setRevision(changeset.getRevision())
- .setAuthor(changeset.hasAuthor() ? changeset.getAuthor() : null)
- .setDate(changeset.getDate())
- .build();
- }
-
@Override
public Changeset getLatestChangeset() {
return this.delegate.getLatestChangeset();
@@ -83,24 +73,35 @@ class ReportScmInfo implements ScmInfo {
private static class LineIndexToChangeset implements Function<Integer, Changeset> {
private final BatchReport.Changesets changesets;
- private final Map<Integer, Changeset> changeSetCache;
+ private final Map<Integer, Changeset> changesetCache;
public LineIndexToChangeset(BatchReport.Changesets changesets) {
this.changesets = changesets;
- changeSetCache = new HashMap<>(changesets.getChangesetCount());
+ changesetCache = new HashMap<>(changesets.getChangesetCount());
}
@Override
@Nonnull
public Changeset apply(@Nonnull Integer lineNumber) {
int changesetIndex = changesets.getChangesetIndexByLine(lineNumber - 1);
- if (changeSetCache.containsKey(changesetIndex)) {
- return changeSetCache.get(changesetIndex);
+ Changeset changeset = changesetCache.get(changesetIndex);
+ if (changeset != null) {
+ return changeset;
}
- Changeset res = convert(changesets.getChangeset(changesetIndex));
- changeSetCache.put(changesetIndex, res);
+ Changeset res = convert(changesets.getChangeset(changesetIndex), lineNumber);
+ changesetCache.put(changesetIndex, res);
return res;
}
+
+ private static Changeset convert(BatchReport.Changesets.Changeset changeset, int line) {
+ checkState(changeset.hasRevision(), "Changeset on line %s must have a revision", line);
+ checkState(changeset.hasDate(), "Changeset on line %s must have a date", line);
+ return Changeset.newChangesetBuilder()
+ .setRevision(changeset.getRevision())
+ .setAuthor(changeset.hasAuthor() ? changeset.getAuthor() : null)
+ .setDate(changeset.getDate())
+ .build();
+ }
}
/**
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/scm/ScmInfoImpl.java b/server/sonar-server/src/main/java/org/sonar/server/computation/scm/ScmInfoImpl.java
index 75288bf03e4..3a5bba93aef 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/scm/ScmInfoImpl.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/scm/ScmInfoImpl.java
@@ -40,7 +40,9 @@ public class ScmInfoImpl implements ScmInfo {
public ScmInfoImpl(Iterable<Changeset> lineChangesets) {
checkState(!isEmpty(lineChangesets), "A ScmInfo must have at least one Changeset and does not support any null one");
- this.lineChangesets = from(lineChangesets).filter(CheckNotNull.INSTANCE).toArray(Changeset.class);
+ this.lineChangesets = from(lineChangesets)
+ .filter(CheckNotNull.INSTANCE)
+ .toArray(Changeset.class);
this.latestChangeset = computeLatestChangeset(lineChangesets);
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/scm/ReportScmInfoTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/scm/ReportScmInfoTest.java
index c74f1760987..a36d84c386b 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/computation/scm/ReportScmInfoTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/scm/ReportScmInfoTest.java
@@ -127,7 +127,7 @@ public class ReportScmInfoTest {
@Test
public void fail_with_ISE_when_changeset_has_no_revision() throws Exception {
thrown.expect(IllegalStateException.class);
- thrown.expectMessage("Changeset must have a revision");
+ thrown.expectMessage("Changeset on line 1 must have a revision");
new ReportScmInfo(BatchReport.Changesets.newBuilder()
.setComponentRef(FILE_REF)
@@ -142,7 +142,7 @@ public class ReportScmInfoTest {
@Test
public void fail_with_ISE_when_changeset_has_no_date() throws Exception {
thrown.expect(IllegalStateException.class);
- thrown.expectMessage("Changeset must have a date");
+ thrown.expectMessage("Changeset on line 1 must have a date");
new ReportScmInfo(BatchReport.Changesets.newBuilder()
.setComponentRef(FILE_REF)