diff --git a/scm-webapp/pom.xml b/scm-webapp/pom.xml index d186cb106e..487eb0bfeb 100644 --- a/scm-webapp/pom.xml +++ b/scm-webapp/pom.xml @@ -278,13 +278,13 @@ com.github.sdorra spotter-core - 2.0.0 + 2.1.1 org.apache.tika tika-core - 1.22 + 1.23 diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ContentResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ContentResource.java index 9f99efdea2..9f08c63c13 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ContentResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ContentResource.java @@ -122,7 +122,9 @@ public class ContentResource { private void appendContentHeader(String path, byte[] head, Response.ResponseBuilder responseBuilder) { ContentType contentType = ContentTypes.detect(path, head); responseBuilder.header("Content-Type", contentType.getRaw()); - contentType.getLanguage().ifPresent(language -> responseBuilder.header("X-Programming-Language", language)); + contentType.getLanguage().ifPresent( + language -> responseBuilder.header(ProgrammingLanguages.HEADER, ProgrammingLanguages.getValue(language)) + ); } private byte[] getHead(String revision, String path, RepositoryService repositoryService) throws IOException { diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/DiffResultToDiffResultDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/DiffResultToDiffResultDtoMapper.java index d9abde23c3..63070eab89 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/DiffResultToDiffResultDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/DiffResultToDiffResultDtoMapper.java @@ -65,7 +65,7 @@ final class DiffResultToDiffResultDtoMapper { Optional language = ContentTypes.detect(path).getLanguage(); - language.ifPresent(value -> dto.setLanguage(value.getName())); + language.ifPresent(value -> dto.setLanguage(ProgrammingLanguages.getValue(value))); List hunks = new ArrayList<>(); for (Hunk hunk : file) { diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ProgrammingLanguages.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ProgrammingLanguages.java new file mode 100644 index 0000000000..cecd923265 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ProgrammingLanguages.java @@ -0,0 +1,24 @@ +package sonia.scm.api.v2.resources; + +import com.github.sdorra.spotter.Language; + +import java.util.Optional; + +final class ProgrammingLanguages { + + static final String HEADER = "X-Programming-Language"; + + private static final String DEFAULT = "text"; + + private ProgrammingLanguages() { + } + + static String getValue(Language language) { + Optional aceMode = language.getAceMode(); + if (!aceMode.isPresent()) { + Optional codemirrorMode = language.getCodemirrorMode(); + return codemirrorMode.orElse(DEFAULT); + } + return aceMode.get(); + } +} diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/DiffResultToDiffResultDtoMapperTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/DiffResultToDiffResultDtoMapperTest.java index 2b75e06f39..fcfd45dea3 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/DiffResultToDiffResultDtoMapperTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/DiffResultToDiffResultDtoMapperTest.java @@ -23,7 +23,7 @@ class DiffResultToDiffResultDtoMapperTest { void shouldMapDiffResult() { DiffResult result = result( addedFile("A.java", "abc"), - modifiedFile("B.tsx", "def", "abc", + modifiedFile("B.ts", "def", "abc", hunk("@@ -3,4 1,2 @@", 1, 2, 3, 4, insertedLine("a", 1), modifiedLine("b", 2), @@ -36,9 +36,9 @@ class DiffResultToDiffResultDtoMapperTest { DiffResultDto dto = DiffResultToDiffResultDtoMapper.INSTANCE.map(result); List files = dto.getFiles(); - assertAddedFile(files.get(0), "A.java", "abc", "Java"); - assertModifiedFile(files.get(1), "B.tsx", "abc", "def", "TypeScript"); - assertDeletedFile(files.get(2), "C.go", "ghi", "Go"); + assertAddedFile(files.get(0), "A.java", "abc", "java"); + assertModifiedFile(files.get(1), "B.ts", "abc", "def", "typescript"); + assertDeletedFile(files.get(2), "C.go", "ghi", "golang"); DiffResultDto.HunkDto hunk = files.get(1).getHunks().get(0); assertHunk(hunk, "@@ -3,4 1,2 @@", 1, 2, 3, 4); diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ProgrammingLanguagesTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ProgrammingLanguagesTest.java new file mode 100644 index 0000000000..cfecb0a7fa --- /dev/null +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ProgrammingLanguagesTest.java @@ -0,0 +1,25 @@ +package sonia.scm.api.v2.resources; + +import com.github.sdorra.spotter.Language; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class ProgrammingLanguagesTest { + + @Test + void shouldReturnAceModeIfPresent() { + assertThat(ProgrammingLanguages.getValue(Language.GO)).isEqualTo("golang"); + assertThat(ProgrammingLanguages.getValue(Language.JAVA)).isEqualTo("java"); + } + + @Test + void shouldReturnCodemirrorIfAceModeIsMissing() { + assertThat(ProgrammingLanguages.getValue(Language.HTML_ECR)).isEqualTo("htmlmixed"); + } + + @Test + void shouldReturnTextIfNoModeIsPresent() { + assertThat(ProgrammingLanguages.getValue(Language.HXML)).isEqualTo("text"); + } +}