mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-13 08:55:44 +01:00
use aceMode or codemirrorMode to determine programming language
This commit is contained in:
@@ -278,13 +278,13 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.github.sdorra</groupId>
|
<groupId>com.github.sdorra</groupId>
|
||||||
<artifactId>spotter-core</artifactId>
|
<artifactId>spotter-core</artifactId>
|
||||||
<version>2.0.0</version>
|
<version>2.1.1</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.tika</groupId>
|
<groupId>org.apache.tika</groupId>
|
||||||
<artifactId>tika-core</artifactId>
|
<artifactId>tika-core</artifactId>
|
||||||
<version>1.22</version>
|
<version>1.23</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- class loader leak prevention -->
|
<!-- class loader leak prevention -->
|
||||||
|
|||||||
@@ -122,7 +122,9 @@ public class ContentResource {
|
|||||||
private void appendContentHeader(String path, byte[] head, Response.ResponseBuilder responseBuilder) {
|
private void appendContentHeader(String path, byte[] head, Response.ResponseBuilder responseBuilder) {
|
||||||
ContentType contentType = ContentTypes.detect(path, head);
|
ContentType contentType = ContentTypes.detect(path, head);
|
||||||
responseBuilder.header("Content-Type", contentType.getRaw());
|
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 {
|
private byte[] getHead(String revision, String path, RepositoryService repositoryService) throws IOException {
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ final class DiffResultToDiffResultDtoMapper {
|
|||||||
|
|
||||||
|
|
||||||
Optional<Language> language = ContentTypes.detect(path).getLanguage();
|
Optional<Language> language = ContentTypes.detect(path).getLanguage();
|
||||||
language.ifPresent(value -> dto.setLanguage(value.getName()));
|
language.ifPresent(value -> dto.setLanguage(ProgrammingLanguages.getValue(value)));
|
||||||
|
|
||||||
List<DiffResultDto.HunkDto> hunks = new ArrayList<>();
|
List<DiffResultDto.HunkDto> hunks = new ArrayList<>();
|
||||||
for (Hunk hunk : file) {
|
for (Hunk hunk : file) {
|
||||||
|
|||||||
@@ -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<String> aceMode = language.getAceMode();
|
||||||
|
if (!aceMode.isPresent()) {
|
||||||
|
Optional<String> codemirrorMode = language.getCodemirrorMode();
|
||||||
|
return codemirrorMode.orElse(DEFAULT);
|
||||||
|
}
|
||||||
|
return aceMode.get();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -23,7 +23,7 @@ class DiffResultToDiffResultDtoMapperTest {
|
|||||||
void shouldMapDiffResult() {
|
void shouldMapDiffResult() {
|
||||||
DiffResult result = result(
|
DiffResult result = result(
|
||||||
addedFile("A.java", "abc"),
|
addedFile("A.java", "abc"),
|
||||||
modifiedFile("B.tsx", "def", "abc",
|
modifiedFile("B.ts", "def", "abc",
|
||||||
hunk("@@ -3,4 1,2 @@", 1, 2, 3, 4,
|
hunk("@@ -3,4 1,2 @@", 1, 2, 3, 4,
|
||||||
insertedLine("a", 1),
|
insertedLine("a", 1),
|
||||||
modifiedLine("b", 2),
|
modifiedLine("b", 2),
|
||||||
@@ -36,9 +36,9 @@ class DiffResultToDiffResultDtoMapperTest {
|
|||||||
DiffResultDto dto = DiffResultToDiffResultDtoMapper.INSTANCE.map(result);
|
DiffResultDto dto = DiffResultToDiffResultDtoMapper.INSTANCE.map(result);
|
||||||
|
|
||||||
List<DiffResultDto.FileDto> files = dto.getFiles();
|
List<DiffResultDto.FileDto> files = dto.getFiles();
|
||||||
assertAddedFile(files.get(0), "A.java", "abc", "Java");
|
assertAddedFile(files.get(0), "A.java", "abc", "java");
|
||||||
assertModifiedFile(files.get(1), "B.tsx", "abc", "def", "TypeScript");
|
assertModifiedFile(files.get(1), "B.ts", "abc", "def", "typescript");
|
||||||
assertDeletedFile(files.get(2), "C.go", "ghi", "Go");
|
assertDeletedFile(files.get(2), "C.go", "ghi", "golang");
|
||||||
|
|
||||||
DiffResultDto.HunkDto hunk = files.get(1).getHunks().get(0);
|
DiffResultDto.HunkDto hunk = files.get(1).getHunks().get(0);
|
||||||
assertHunk(hunk, "@@ -3,4 1,2 @@", 1, 2, 3, 4);
|
assertHunk(hunk, "@@ -3,4 1,2 @@", 1, 2, 3, 4);
|
||||||
|
|||||||
@@ -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");
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user