|
26 | 26 | import java.util.Set;
|
27 | 27 | import java.util.TreeMap;
|
28 | 28 | import java.util.function.Function;
|
29 |
| -import java.util.function.Supplier; |
30 | 29 |
|
31 |
| -import org.gradle.api.GradleException; |
| 30 | +import org.gradle.api.file.ConfigurableFilePermissions; |
32 | 31 | import org.gradle.api.file.CopySpec;
|
33 | 32 | import org.gradle.api.file.FileCopyDetails;
|
34 | 33 | import org.gradle.api.file.FileTreeElement;
|
@@ -133,44 +132,44 @@ CopyAction createCopyAction(Jar jar, ResolvedDependencies resolvedDependencies,
|
133 | 132 | File output = jar.getArchiveFile().get().getAsFile();
|
134 | 133 | Manifest manifest = jar.getManifest();
|
135 | 134 | boolean preserveFileTimestamps = jar.isPreserveFileTimestamps();
|
136 |
| - Integer dirMode = getDirMode(jar); |
137 |
| - Integer fileMode = getFileMode(jar); |
| 135 | + Integer dirPermissions = getUnixNumericDirPermissions(jar); |
| 136 | + Integer filePermissions = getUnixNumericFilePermissions(jar); |
138 | 137 | boolean includeDefaultLoader = isUsingDefaultLoader(jar);
|
139 | 138 | Spec<FileTreeElement> requiresUnpack = this.requiresUnpack.getAsSpec();
|
140 | 139 | Spec<FileTreeElement> exclusions = this.exclusions.getAsExcludeSpec();
|
141 | 140 | LaunchScriptConfiguration launchScript = this.launchScript;
|
142 | 141 | Spec<FileCopyDetails> librarySpec = this.librarySpec;
|
143 | 142 | Function<FileCopyDetails, ZipCompression> compressionResolver = this.compressionResolver;
|
144 | 143 | String encoding = jar.getMetadataCharset();
|
145 |
| - CopyAction action = new BootZipCopyAction(output, manifest, preserveFileTimestamps, dirMode, fileMode, |
146 |
| - includeDefaultLoader, layerToolsLocation, requiresUnpack, exclusions, launchScript, librarySpec, |
147 |
| - compressionResolver, encoding, resolvedDependencies, supportsSignatureFile, layerResolver, |
| 144 | + CopyAction action = new BootZipCopyAction(output, manifest, preserveFileTimestamps, dirPermissions, |
| 145 | + filePermissions, includeDefaultLoader, layerToolsLocation, requiresUnpack, exclusions, launchScript, |
| 146 | + librarySpec, compressionResolver, encoding, resolvedDependencies, supportsSignatureFile, layerResolver, |
148 | 147 | loaderImplementation);
|
149 | 148 | return jar.isReproducibleFileOrder() ? new ReproducibleOrderingCopyAction(action) : action;
|
150 | 149 | }
|
151 | 150 |
|
152 |
| - private Integer getDirMode(CopySpec copySpec) { |
153 |
| - return getMode(copySpec, "getDirPermissions", () -> copySpec.getDirMode()); |
| 151 | + private Integer getUnixNumericDirPermissions(CopySpec copySpec) { |
| 152 | + return (GradleVersion.current().compareTo(GradleVersion.version("8.3")) >= 0) |
| 153 | + ? asUnixNumeric(copySpec.getDirPermissions()) : getDirMode(copySpec); |
154 | 154 | }
|
155 | 155 |
|
156 |
| - private Integer getFileMode(CopySpec copySpec) { |
157 |
| - return getMode(copySpec, "getFilePermissions", () -> copySpec.getFileMode()); |
| 156 | + private Integer getUnixNumericFilePermissions(CopySpec copySpec) { |
| 157 | + return (GradleVersion.current().compareTo(GradleVersion.version("8.3")) >= 0) |
| 158 | + ? asUnixNumeric(copySpec.getFilePermissions()) : getFileMode(copySpec); |
158 | 159 | }
|
159 | 160 |
|
160 |
| - @SuppressWarnings("unchecked") |
161 |
| - private Integer getMode(CopySpec copySpec, String methodName, Supplier<Integer> fallback) { |
162 |
| - if (GradleVersion.current().compareTo(GradleVersion.version("8.3")) >= 0) { |
163 |
| - try { |
164 |
| - Object filePermissions = ((Property<Object>) copySpec.getClass().getMethod(methodName).invoke(copySpec)) |
165 |
| - .getOrNull(); |
166 |
| - return (filePermissions != null) |
167 |
| - ? (int) filePermissions.getClass().getMethod("toUnixNumeric").invoke(filePermissions) : null; |
168 |
| - } |
169 |
| - catch (Exception ex) { |
170 |
| - throw new GradleException("Failed to get permissions", ex); |
171 |
| - } |
172 |
| - } |
173 |
| - return fallback.get(); |
| 161 | + private Integer asUnixNumeric(Property<ConfigurableFilePermissions> permissions) { |
| 162 | + return permissions.isPresent() ? permissions.get().toUnixNumeric() : null; |
| 163 | + } |
| 164 | + |
| 165 | + @SuppressWarnings("deprecation") |
| 166 | + private Integer getDirMode(CopySpec copySpec) { |
| 167 | + return copySpec.getDirMode(); |
| 168 | + } |
| 169 | + |
| 170 | + @SuppressWarnings("deprecation") |
| 171 | + private Integer getFileMode(CopySpec copySpec) { |
| 172 | + return copySpec.getFileMode(); |
174 | 173 | }
|
175 | 174 |
|
176 | 175 | private boolean isUsingDefaultLoader(Jar jar) {
|
|
0 commit comments