Preserve file permissions in images built by Gradle

This commit copies the file mode along with other attributes when
copying files from the source archive to the build container while
building an image using the Gradle plugin. This preserves file
permissions on any resources included in the source archive.

Fixes gh-25915
pull/27078/head
Scott Frederick 4 years ago
parent 1d61da1786
commit 0ad7f76263

@ -1,5 +1,5 @@
/*
* Copyright 2012-2020 the original author or authors.
* Copyright 2012-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -80,7 +80,7 @@ public class ZipFileTarArchive implements TarArchive {
+ "' is not compatible with buildpacks; ensure jar file is valid and launch script is not enabled");
}
catch (IOException ex) {
throw new IllegalStateException("File is not readable", ex);
throw new IllegalStateException("File '" + jarFile + "' is not readable", ex);
}
}
@ -99,6 +99,7 @@ public class ZipFileTarArchive implements TarArchive {
tarEntry.setUserId(this.owner.getUid());
tarEntry.setGroupId(this.owner.getGid());
tarEntry.setModTime(NORMALIZED_MOD_TIME);
tarEntry.setMode(zipEntry.getUnixMode());
if (!zipEntry.isDirectory()) {
tarEntry.setSize(zipEntry.getSize());
}

@ -1,5 +1,5 @@
/*
* Copyright 2012-2020 the original author or authors.
* Copyright 2012-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -38,6 +38,7 @@ import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException
* Tests for {@link ZipFileTarArchive}.
*
* @author Phillip Webb
* @author Scott Frederick
*/
class ZipFileTarArchiveTests {
@ -77,6 +78,7 @@ class ZipFileTarArchiveTests {
assertThat(fileEntry.getLongUserId()).isEqualTo(123);
assertThat(fileEntry.getLongGroupId()).isEqualTo(456);
assertThat(fileEntry.getSize()).isEqualTo(4);
assertThat(fileEntry.getMode()).isEqualTo(0755);
String fileContent = StreamUtils.copyToString(tarStream, StandardCharsets.UTF_8);
assertThat(fileContent).isEqualTo("test");
}
@ -88,6 +90,7 @@ class ZipFileTarArchiveTests {
zip.putArchiveEntry(dirEntry);
zip.closeArchiveEntry();
ZipArchiveEntry fileEntry = new ZipArchiveEntry("spring/boot");
fileEntry.setUnixMode(0755);
zip.putArchiveEntry(fileEntry);
zip.write("test".getBytes(StandardCharsets.UTF_8));
zip.closeArchiveEntry();

Loading…
Cancel
Save