]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-14929 - Detect trailing lines as new when it's a new change
authorBelen Pruvost <belen.pruvost@sonarsource.com>
Mon, 17 Jan 2022 19:52:02 +0000 (20:52 +0100)
committersonartech <sonartech@sonarsource.com>
Fri, 21 Jan 2022 20:03:22 +0000 (20:03 +0000)
sonar-scanner-engine/src/main/java/org/sonar/scm/git/GitScmProvider.java
sonar-scanner-engine/src/test/java/org/sonar/scm/git/GitScmProviderTest.java

index d9157b5a3ce24e43b86cbdbce3bd6837c03888b8..784b9182af03be83c020a76eded8f07a438ba6de 100644 (file)
@@ -191,7 +191,7 @@ public class GitScmProvider extends ScmProvider {
       // copied from DiffCommand so that we can use a custom DiffFormatter which ignores white spaces.
       diffFmt.setRepository(repo);
       diffFmt.setProgressMonitor(NullProgressMonitor.INSTANCE);
-      diffFmt.setDiffComparator(RawTextComparator.WS_IGNORE_ALL);
+      diffFmt.setDiffComparator(RawTextComparator.DEFAULT);
 
       Path workTree = repo.getWorkTree().toPath();
       String relativePath = workTree.relativize(changedFile).toString();
index daac3162570ec8c0efa69e161272a66b75589a2a..a2c27b9c5c43000838f0f5139f76593047da090b 100644 (file)
@@ -27,7 +27,6 @@ import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.nio.file.StandardOpenOption;
 import java.time.Instant;
-import java.time.temporal.ChronoUnit;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Date;
@@ -432,6 +431,33 @@ public class GitScmProviderTest {
       .isEmpty();
   }
 
+  @Test
+  public void branchChangedLines_should_always_detect_trailing_lines_that_are_not_endings() throws IOException, GitAPIException {
+    String fileName = "file-m1.xoo";
+    Path filePath = worktree.resolve(fileName);
+
+    StringBuilder newFileContent = new StringBuilder();
+    newFileContent
+      .append(randomizedContent(fileName, 3))
+      .append("\r\n")
+      .append("\n");
+
+    createAndCommitFile(fileName, newFileContent.toString());
+    ObjectId forkPoint = git.getRepository().exactRef("HEAD").getObjectId();
+
+    git.branchCreate().setName("b1").setStartPoint(forkPoint.getName()).call();
+    git.checkout().setName("b1").call();
+
+    String newFileContent2 = new String(Files.readAllBytes(filePath), StandardCharsets.UTF_8)
+      .replaceAll("\r\n", "     \n");
+    Files.write(filePath, newFileContent2.getBytes(StandardCharsets.UTF_8), StandardOpenOption.TRUNCATE_EXISTING);
+    commit(fileName);
+
+    assertThat(newScmProvider().branchChangedLines("master", worktree, Collections.singleton(filePath)))
+      .containsOnly(
+        entry(worktree.resolve(fileName), new HashSet<>(Arrays.asList(4))));
+  }
+
   @Test
   public void branchChangedFiles_falls_back_to_origin_when_local_branch_does_not_exist() throws IOException, GitAPIException {
     git.branchCreate().setName("b1").call();