diff options
author | Julien Lancelot <julien.lancelot@sonarsource.com> | 2016-02-04 12:14:39 +0100 |
---|---|---|
committer | Julien Lancelot <julien.lancelot@sonarsource.com> | 2016-02-05 08:19:54 +0100 |
commit | ae05dc4dac7ec02cc00740ba074863b08400554d (patch) | |
tree | bffb2b546fef86ce0a02c45db76cf3bf42646ba1 | |
parent | 0161475560b18f9b0bb87a304a6b891d393091e2 (diff) | |
download | sonarqube-ae05dc4dac7ec02cc00740ba074863b08400554d.tar.gz sonarqube-ae05dc4dac7ec02cc00740ba074863b08400554d.zip |
SONAR-7114 Add line when changeset is invalid
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) |