Skip to content

Commit 1c52563

Browse files
authored
Merge pull request #442 from nebula-plugins/support-FilePermissions-api
support new Gradle's FilePermissions API
2 parents c5f99fa + 60acc1f commit 1c52563

File tree

6 files changed

+121
-12
lines changed

6 files changed

+121
-12
lines changed

src/main/groovy/com/netflix/gradle/plugins/daemon/OspackageDaemonPlugin.groovy

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package com.netflix.gradle.plugins.daemon
1919
import com.netflix.gradle.plugins.packaging.SystemPackagingBasePlugin
2020
import com.netflix.gradle.plugins.packaging.SystemPackagingTask
2121
import com.netflix.gradle.plugins.rpm.Rpm
22+
import com.netflix.gradle.plugins.utils.FilePermissionUtil
2223
import com.netflix.gradle.plugins.utils.WrapUtil
2324
import groovy.text.GStringTemplateEngine
2425
import groovy.transform.CompileDynamic
@@ -136,7 +137,7 @@ class OspackageDaemonPlugin implements Plugin<Project> {
136137
task.from(rendered) {
137138
into(destDir)
138139
rename('.*', destFile)
139-
fileMode 0555 // Since source files don't have the correct permissions
140+
FilePermissionUtil.setFilePermission(it, 0555)
140141
user 'root'
141142
}
142143
}

src/main/groovy/com/netflix/gradle/plugins/deb/DebCopyAction.groovy

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,14 @@ import com.netflix.gradle.plugins.packaging.Directory
2424
import com.netflix.gradle.plugins.packaging.Link
2525
import com.netflix.gradle.plugins.utils.ApacheCommonsFileSystemActions
2626
import com.netflix.gradle.plugins.utils.DeprecationLoggerUtils
27+
import com.netflix.gradle.plugins.utils.FilePermissionUtil
2728
import groovy.transform.Canonical
2829
import org.apache.commons.lang3.StringUtils
2930
import org.apache.commons.lang3.time.DateFormatUtils
3031
import org.gradle.api.GradleException
3132
import org.gradle.api.internal.file.copy.CopyAction
3233
import org.gradle.api.internal.file.copy.FileCopyDetailsInternal
34+
import org.gradle.util.GradleVersion
3335
import org.slf4j.Logger
3436
import org.slf4j.LoggerFactory
3537
import org.vafer.jdeb.Compression
@@ -119,7 +121,7 @@ class DebCopyAction extends AbstractPackagingCopyAction<Deb> {
119121
String group = lookup(specToLookAt, 'permissionGroup') ?: task.permissionGroup
120122
Integer gid = (Integer) lookup(specToLookAt, 'gid') ?: task.gid ?: 0
121123

122-
int fileMode = fileDetails.mode
124+
int fileMode = FilePermissionUtil.getUnixPermission(fileDetails)
123125

124126
debFileVisitorStrategy.addFile(fileDetails, inputFile, user, uid, group, gid, fileMode)
125127
}
@@ -137,7 +139,8 @@ class DebCopyAction extends AbstractPackagingCopyAction<Deb> {
137139
Integer gid = (Integer) lookup(specToLookAt, 'gid') ?: task.gid ?: 0
138140
Boolean setgid = lookup(specToLookAt, 'setgid') ?: task.setgid
139141

140-
int fileMode = dirDetails.mode
142+
int fileMode = FilePermissionUtil.getUnixPermission(dirDetails)
143+
141144
if (setgid) {
142145
fileMode = fileMode | 02000
143146
}

src/main/groovy/com/netflix/gradle/plugins/packaging/ProjectPackagingExtension.groovy

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.netflix.gradle.plugins.packaging
22

3+
import com.netflix.gradle.plugins.utils.FilePermissionUtil
34
import groovy.transform.CompileDynamic
45
import org.gradle.api.Action
56
import org.gradle.api.Project
@@ -259,19 +260,21 @@ class ProjectPackagingExtension extends SystemPackagingExtension {
259260
// }
260261

261262
public Integer getFileMode() {
262-
return getDelegateCopySpec().getFileMode();
263+
return FilePermissionUtil.getFileMode(getDelegateCopySpec())
263264
}
264265

265266
public CopyProcessingSpec setFileMode(Integer mode) {
266-
return getDelegateCopySpec().setFileMode(mode);
267+
FilePermissionUtil.setFilePermission(getDelegateCopySpec(), mode)
268+
return getDelegateCopySpec()
267269
}
268270

269271
public Integer getDirMode() {
270-
return getDelegateCopySpec().getDirMode();
272+
return FilePermissionUtil.getDirMode(getDelegateCopySpec())
271273
}
272274

273275
public CopyProcessingSpec setDirMode(Integer mode) {
274-
return getDelegateCopySpec().setDirMode(mode);
276+
FilePermissionUtil.setDirPermission(getDelegateCopySpec(), mode)
277+
return getDelegateCopySpec()
275278
}
276279

277280
public Set<String> getIncludes() {

src/main/groovy/com/netflix/gradle/plugins/rpm/RpmCopyAction.groovy

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import com.netflix.gradle.plugins.packaging.Directory
2222
import com.netflix.gradle.plugins.packaging.Link
2323
import com.netflix.gradle.plugins.rpm.validation.RpmTaskPropertiesValidator
2424
import com.netflix.gradle.plugins.utils.DeprecationLoggerUtils
25+
import com.netflix.gradle.plugins.utils.FilePermissionUtil
2526
import groovy.transform.CompileDynamic
2627
import org.apache.commons.lang3.StringUtils
2728
import org.gradle.api.internal.file.copy.CopyAction
@@ -161,7 +162,7 @@ class RpmCopyAction extends AbstractPackagingCopyAction<Rpm> {
161162
String user = lookup(specToLookAt, 'user') ?: task.user
162163
String group = lookup(specToLookAt, 'permissionGroup') ?: task.permissionGroup
163164

164-
int fileMode = lookup(specToLookAt, 'fileMode') ?: fileDetails.mode
165+
int fileMode = FilePermissionUtil.getFileMode(specToLookAt) ?: FilePermissionUtil.getUnixPermission(fileDetails)
165166
def specAddParentsDir = lookup(specToLookAt, 'addParentDirs')
166167
boolean addParentsDir = specAddParentsDir != null ? specAddParentsDir : task.addParentDirs
167168

@@ -182,7 +183,7 @@ class RpmCopyAction extends AbstractPackagingCopyAction<Rpm> {
182183

183184
if (createDirectoryEntry) {
184185
logger.debug 'adding directory {}', dirDetails.relativePath.pathString
185-
int dirMode = lookup(specToLookAt, 'dirMode') ?: dirDetails.mode
186+
int dirMode = lookup(specToLookAt, 'dirMode') ?: FilePermissionUtil.getUnixPermission(dirDetails)
186187
Directive directive = (Directive) lookup(specToLookAt, 'fileType') ?: task.fileType
187188
String user = lookup(specToLookAt, 'user') ?: task.user
188189
String group = lookup(specToLookAt, 'permissionGroup') ?: task.permissionGroup
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package com.netflix.gradle.plugins.utils
2+
3+
import org.gradle.api.file.FileCopyDetails
4+
import org.gradle.api.file.SyncSpec
5+
import org.gradle.util.GradleVersion
6+
7+
/**
8+
* Utility class to get the unix permission of a file.
9+
*/
10+
class FilePermissionUtil {
11+
12+
/**
13+
* Get the unix permission of a file.
14+
* Gradle 8.3 introduced a new way to get the unix permission of a file.
15+
* Gradle 8.8 deprecated the old way. @see https://docs.gradle.org/8.8-rc-1/userguide/upgrading_version_8.html#unix_file_permissions_deprecated
16+
* @param details
17+
* @return
18+
*/
19+
static int getUnixPermission(FileCopyDetails details) {
20+
return isOlderThanGradle8_3() ? details.mode : details.permissions.toUnixNumeric()
21+
}
22+
23+
/**
24+
* Get the unix permission of a file.
25+
* Gradle 8.3 introduced a new way to get the unix permission of a file.
26+
* Gradle 8.8 deprecated the old way. @see https://docs.gradle.org/8.8-rc-1/userguide/upgrading_version_8.html#unix_file_permissions_deprecated
27+
* @param details
28+
* @return
29+
*/
30+
static Integer getFileMode(SyncSpec copySpecInternal) {
31+
if(!copySpecInternal) {
32+
return null
33+
}
34+
35+
if(isOlderThanGradle8_3()) {
36+
return copySpecInternal.fileMode
37+
} else if(copySpecInternal.filePermissions.present){
38+
copySpecInternal.filePermissions.get().toUnixNumeric()
39+
} else {
40+
return null
41+
}
42+
}
43+
44+
/**
45+
* Get the unix permission of a directory.
46+
* Gradle 8.3 introduced a new way to get the unix permission of a file.
47+
* Gradle 8.8 deprecated the old way. @see https://docs.gradle.org/8.8-rc-1/userguide/upgrading_version_8.html#unix_file_permissions_deprecated
48+
* @param copySpecInternal
49+
* @return
50+
*/
51+
static Integer getDirMode(SyncSpec copySpecInternal) {
52+
if(!copySpecInternal) {
53+
return null
54+
}
55+
56+
if(isOlderThanGradle8_3()) {
57+
return copySpecInternal.dirMode
58+
} else if(copySpecInternal.dirPermissions.present){
59+
copySpecInternal.dirPermissions.get().toUnixNumeric()
60+
} else {
61+
return null
62+
}
63+
}
64+
65+
/**
66+
* Set the unix permission of a file.
67+
* Gradle 8.3 introduced a new way to set the unix permission of a file.
68+
* @param copySpec
69+
* @param permission
70+
*/
71+
static void setFilePermission(SyncSpec copySpec, int permission) {
72+
isOlderThanGradle8_3() ?
73+
copySpec.setFileMode(permission) : copySpec.filePermissions {
74+
it.unix(permission)
75+
}
76+
}
77+
78+
/**
79+
* Set the unix permission of a directory.
80+
* Gradle 8.3 introduced a new way to set the unix permission of a file.
81+
* @param copySpec
82+
* @param permission
83+
*/
84+
static void setDirPermission(SyncSpec copySpec, int permission) {
85+
isOlderThanGradle8_3() ?
86+
copySpec.setDirMode(permission) : copySpec.dirPermissions {
87+
it.unix(permission)
88+
}
89+
}
90+
91+
private static final isOlderThanGradle8_3() {
92+
return GradleVersion.current().baseVersion < GradleVersion.version('8.3').baseVersion
93+
}
94+
}

src/test/groovy/com/netflix/gradle/plugins/rpm/RpmPluginTest.groovy

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -360,18 +360,25 @@ class RpmPluginTest extends ProjectSpec {
360360
os = LINUX
361361

362362
into '/tiny'
363-
fileMode 0555
363+
364+
filePermissions {
365+
unix(0555)
366+
}
364367

365368
from(srcDir1) {
366369
// should be default group
367370
}
368371

369372
from(srcDir2) {
370-
fileMode 0666
373+
filePermissions {
374+
unix(0666)
375+
}
371376
}
372377

373378
from(srcDir3) {
374-
fileMode 0555
379+
filePermissions {
380+
unix(0555)
381+
}
375382
}
376383
})
377384

0 commit comments

Comments
 (0)