From 249b260774ef65078daa7f36de59fc55dd9bdfda Mon Sep 17 00:00:00 2001 From: Olivier Theriault Date: Tue, 13 Oct 2020 11:06:47 -0400 Subject: [PATCH] Add support for long fine names for tar archives See gh-1139 --- .../web/controller/ProjectGenerationController.java | 4 +++- .../ProjectGenerationControllerIntegrationTests.java | 9 +++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/initializr-web/src/main/java/io/spring/initializr/web/controller/ProjectGenerationController.java b/initializr-web/src/main/java/io/spring/initializr/web/controller/ProjectGenerationController.java index 4cb51cfb..8d521570 100644 --- a/initializr-web/src/main/java/io/spring/initializr/web/controller/ProjectGenerationController.java +++ b/initializr-web/src/main/java/io/spring/initializr/web/controller/ProjectGenerationController.java @@ -141,7 +141,9 @@ public abstract class ProjectGenerationController { private TarArchiveOutputStream createTarArchiveOutputStream(OutputStream output) { try { - return new TarArchiveOutputStream(new GzipCompressorOutputStream(output)); + final TarArchiveOutputStream taos = new TarArchiveOutputStream(new GzipCompressorOutputStream(output)); + taos.setLongFileMode(TarArchiveOutputStream.LONGFILE_POSIX); + return taos; } catch (IOException ex) { throw new IllegalStateException(ex); diff --git a/initializr-web/src/test/java/io/spring/initializr/web/controller/ProjectGenerationControllerIntegrationTests.java b/initializr-web/src/test/java/io/spring/initializr/web/controller/ProjectGenerationControllerIntegrationTests.java index dd40484d..6c1183fc 100755 --- a/initializr-web/src/test/java/io/spring/initializr/web/controller/ProjectGenerationControllerIntegrationTests.java +++ b/initializr-web/src/test/java/io/spring/initializr/web/controller/ProjectGenerationControllerIntegrationTests.java @@ -65,6 +65,15 @@ class ProjectGenerationControllerIntegrationTests extends AbstractInitializrCont assertThat(project).mavenBuild().hasDependenciesSize(2).hasDependency("org.acme", "foo", "1.3.5"); } + @Test + void tgzProjectWithLongFilenames() { + String queryParams = "name=spring-boot-service&dependencies=org.acme:foo&artifactId=spring-boot-service" + + "&groupId=com.spring.boot.service&baseDir=spring-boot-service"; + + ResponseEntity entity = downloadArchive("/starter.tgz?" + queryParams); + assertArchiveResponseHeaders(entity, MediaType.valueOf("application/x-compress"), "spring-boot-service.tar.gz"); + } + private void assertArchiveResponseHeaders(ResponseEntity entity, MediaType contentType, String fileName) { assertThat(entity.getHeaders().getContentType()).isEqualTo(contentType); assertThat(entity.getHeaders().getContentDisposition()).isNotNull();