Skip to content

Commit 0334b54

Browse files
authored
Merge pull request #443 from breskeby/fix-copy-spec-setguid
Fix dirMode handling and setgid fallback
2 parents 1c52563 + fa0e363 commit 0334b54

4 files changed

Lines changed: 116 additions & 26 deletions

File tree

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

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -131,20 +131,21 @@ class DebCopyAction extends AbstractPackagingCopyAction<Deb> {
131131
def specCreateDirectoryEntry = lookup(specToLookAt, 'createDirectoryEntry')
132132
boolean createDirectoryEntry = specCreateDirectoryEntry!=null ? specCreateDirectoryEntry : task.createDirectoryEntry
133133
if (createDirectoryEntry) {
134-
135134
logger.debug "adding directory {}", dirDetails.relativePath.pathString
136135
String user = lookup(specToLookAt, 'user') ?: task.user
137136
Integer uid = (Integer) lookup(specToLookAt, 'uid') ?: task.uid ?: 0
138137
String group = lookup(specToLookAt, 'permissionGroup') ?: task.permissionGroup
139138
Integer gid = (Integer) lookup(specToLookAt, 'gid') ?: task.gid ?: 0
140-
Boolean setgid = lookup(specToLookAt, 'setgid') ?: task.setgid
141-
142-
int fileMode = FilePermissionUtil.getUnixPermission(dirDetails)
139+
Boolean setgid = lookup(specToLookAt, 'setgid')
143140

141+
int dirMode = FilePermissionUtil.getUnixPermission(dirDetails)
142+
if (setgid == null) {
143+
setgid = task.setgid
144+
}
144145
if (setgid) {
145-
fileMode = fileMode | 02000
146+
dirMode = dirMode | 02000
146147
}
147-
debFileVisitorStrategy.addDirectory(dirDetails, user, uid, group, gid, fileMode)
148+
debFileVisitorStrategy.addDirectory(dirDetails, user, uid, group, gid, dirMode)
148149
}
149150
}
150151

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ class SystemPackagingExtension {
4747
File signingKeyRingFile
4848
String user
4949
String permissionGroup // Group is used by Gradle on tasks.
50-
Boolean setgid
50+
boolean setgid
5151

5252
/**
5353
* In Debian, this is the Section and has to be provided. Valid values are: admin, cli-mono, comm, database, debug,

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@ import org.redline_rpm.payload.Directive
3636
import org.slf4j.Logger
3737
import org.slf4j.LoggerFactory
3838

39-
import java.nio.channels.FileChannel
40-
4139
import static com.netflix.gradle.plugins.utils.GradleUtils.lookup
4240

4341
@CompileDynamic
@@ -183,11 +181,14 @@ class RpmCopyAction extends AbstractPackagingCopyAction<Rpm> {
183181

184182
if (createDirectoryEntry) {
185183
logger.debug 'adding directory {}', dirDetails.relativePath.pathString
186-
int dirMode = lookup(specToLookAt, 'dirMode') ?: FilePermissionUtil.getUnixPermission(dirDetails)
184+
int dirMode = FilePermissionUtil.getDirMode(specToLookAt) ?: FilePermissionUtil.getUnixPermission(dirDetails)
187185
Directive directive = (Directive) lookup(specToLookAt, 'fileType') ?: task.fileType
188186
String user = lookup(specToLookAt, 'user') ?: task.user
189187
String group = lookup(specToLookAt, 'permissionGroup') ?: task.permissionGroup
190-
Boolean setgid = lookup(specToLookAt, 'setgid') ?: task.setgid
188+
Boolean setgid = lookup(specToLookAt, 'setgid')
189+
if (setgid == null) {
190+
setgid = task.setgid
191+
}
191192
if (setgid) {
192193
dirMode = dirMode | 02000
193194
}

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

Lines changed: 103 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ class RpmPluginIntegrationTest extends BaseIntegrationTestKitSpec {
1717
@Issue("https://github.com/nebula-plugins/gradle-ospackage-plugin/issues/82")
1818
def "rpm task is marked up-to-date when setting arch or os property"() {
1919

20-
given:
21-
File libDir = new File(projectDir, 'lib')
22-
libDir.mkdirs()
23-
new File(libDir, 'a.java').text = "public class A { }"
20+
given:
21+
File libDir = new File(projectDir, 'lib')
22+
libDir.mkdirs()
23+
new File(libDir, 'a.java').text = "public class A { }"
2424
buildFile << '''
2525
plugins {
2626
id 'com.netflix.nebula.rpm'
@@ -167,7 +167,7 @@ task buildRpm(type: Rpm) {
167167
def scanFiles = Scanner.scan(file('build/distributions/sample-1.0.0.noarch.rpm')).files
168168

169169
['./usr/local/myproduct', './usr/local/myproduct/bin', './usr/local/myproduct/bin/apple', './usr/share/myproduct', './usr/share/myproduct/etc', './usr/share/myproduct/etc/banana'] == scanFiles*.name
170-
[ DIR, DIR, FILE, DIR, DIR, FILE] == scanFiles*.type
170+
[DIR, DIR, FILE, DIR, DIR, FILE] == scanFiles*.type
171171

172172
}
173173

@@ -200,10 +200,10 @@ task buildRpm(type: Rpm) {
200200

201201
then:
202202
def scan = Scanner.scan(file('build/distributions/sample-1.0.0.noarch.rpm'))
203-
def scannerApple = scan.files.find { it.name =='./usr/local/myproduct/bin/apple'}
203+
def scannerApple = scan.files.find { it.name == './usr/local/myproduct/bin/apple' }
204204
scannerApple.asString() == '/usr/local/myproduct/apple'
205205
}
206-
206+
207207
def 'verifyCopySpecCanComeFromExtension'() {
208208
given:
209209
File srcDir = new File(projectDir, 'src')
@@ -302,9 +302,9 @@ task buildRpm(type: Rpm) {
302302
given:
303303
File packageDir = directory("package")
304304
packageDir.mkdirs()
305-
File target = new File(packageDir,"my-script.sh")
305+
File target = new File(packageDir, "my-script.sh")
306306
target.createNewFile()
307-
File file = new File(packageDir,'bin/my-symlink')
307+
File file = new File(packageDir, 'bin/my-symlink')
308308
FileUtils.forceMkdirParent(file)
309309
java.nio.file.Files.createSymbolicLink(file.toPath(), target.toPath())
310310
buildFile << """
@@ -320,7 +320,7 @@ task buildRpm(type: Rpm) {
320320
"""
321321

322322
when:
323-
runTasks('buildRpm', '--warning-mode', 'none')
323+
runTasks('buildRpm')
324324

325325
then:
326326
def scan = Scanner.scan(this.file('build/distributions/example-3.noarch.rpm'))
@@ -333,9 +333,9 @@ task buildRpm(type: Rpm) {
333333
given:
334334
File packageDir = directory("package")
335335
packageDir.mkdirs()
336-
File target = new File(packageDir,"my-script.sh")
336+
File target = new File(packageDir, "my-script.sh")
337337
target.createNewFile()
338-
File file = new File(packageDir,'bin/my-symlink')
338+
File file = new File(packageDir, 'bin/my-symlink')
339339
FileUtils.forceMkdirParent(file)
340340
java.nio.file.Files.createSymbolicLink(file.toPath(), target.toPath())
341341
buildFile << """
@@ -353,7 +353,7 @@ task buildRpm(type: Rpm) {
353353
"""
354354

355355
when:
356-
runTasks('buildRpm', '--warning-mode', 'none')
356+
runTasks('buildRpm')
357357

358358
then:
359359
def scan = Scanner.scan(this.file('build/distributions/example-4.noarch.rpm'))
@@ -440,6 +440,94 @@ buildRpm {
440440
def scanFiles = Scanner.scan(file('build/distributions/sample-1.0.0.noarch.rpm')).files
441441

442442
['./usr/share/myproduct/etc/banana'] == scanFiles*.name
443-
[ FILE] == scanFiles*.type
444-
}
443+
[FILE] == scanFiles*.type
444+
}
445+
446+
def 'setgid can be set in rpm and deb'() {
447+
given:
448+
File emptyFolder = new File(projectDir, 'test/someFolder/sub')
449+
emptyFolder.mkdirs()
450+
buildFile << """
451+
plugins {
452+
id 'com.netflix.nebula.ospackage'
445453
}
454+
455+
version = '1.0.0'
456+
457+
ospackage {
458+
addParentDirs false
459+
}
460+
461+
buildRpm {
462+
packageName = 'sample'
463+
464+
from(${GradleUtils.quotedIfPresent(emptyFolder.parentFile.path)}) {
465+
createDirectoryEntry = true
466+
setgid = ${setgidValue}
467+
dirPermissions {
468+
unix(0644)
469+
}
470+
into '/usr/share/myproduct/etc/'
471+
}
472+
}
473+
"""
474+
when:
475+
runTasks('buildRpm')
476+
477+
then:
478+
def scanFiles = Scanner.scan(file('build/distributions/sample-1.0.0.noarch.rpm')).files
479+
480+
['./usr/share/myproduct/etc/sub'] == scanFiles*.name
481+
[DIR] == scanFiles*.type
482+
[expectedPermissions] == scanFiles*.permissions
483+
484+
where:
485+
setgidValue | expectedPermissions
486+
true | 1444
487+
false | 0644
488+
}
489+
490+
def 'setgid in ospackage extension propagates to rpm and deb'() {
491+
given:
492+
File emptyFolder = new File(projectDir, 'test/someFolder/sub')
493+
emptyFolder.mkdirs()
494+
buildFile << """
495+
plugins {
496+
id 'com.netflix.nebula.ospackage'
497+
}
498+
499+
version = '1.0.0'
500+
501+
ospackage {
502+
addParentDirs false
503+
setgid = ${setgidValue}
504+
}
505+
506+
buildRpm {
507+
packageName = 'sample'
508+
509+
from(${GradleUtils.quotedIfPresent(emptyFolder.parentFile.path)}) {
510+
createDirectoryEntry = true
511+
dirPermissions {
512+
unix(0644)
513+
}
514+
into '/usr/share/myproduct/etc/'
515+
}
516+
}
517+
"""
518+
when:
519+
runTasks('buildRpm', '--warning-mode', 'all', '--stacktrace')
520+
521+
then:
522+
def scanFiles = Scanner.scan(file('build/distributions/sample-1.0.0.noarch.rpm')).files
523+
524+
['./usr/share/myproduct/etc/sub'] == scanFiles*.name
525+
[DIR] == scanFiles*.type
526+
[expectedPermissions] == scanFiles*.permissions
527+
528+
where:
529+
setgidValue | expectedPermissions
530+
true | 1444
531+
false | 0644
532+
}
533+
}

0 commit comments

Comments
 (0)