Skip to content

Commit 1c8d32f

Browse files
committed
Support configuring separator in AppendingTransformer
1 parent 1845e43 commit 1c8d32f

File tree

6 files changed

+37
-4
lines changed

6 files changed

+37
-4
lines changed

api/shadow.api

+9
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,8 @@ public abstract class com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar
297297
public fun <init> ()V
298298
public fun append (Ljava/lang/String;)Lcom/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar;
299299
public synthetic fun append (Ljava/lang/String;)Lcom/github/jengelman/gradle/plugins/shadow/tasks/ShadowSpec;
300+
public fun append (Ljava/lang/String;Ljava/lang/String;)Lcom/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar;
301+
public synthetic fun append (Ljava/lang/String;Ljava/lang/String;)Lcom/github/jengelman/gradle/plugins/shadow/tasks/ShadowSpec;
300302
protected fun copy ()V
301303
protected fun createCopyAction ()Lorg/gradle/api/internal/file/copy/CopyAction;
302304
public fun dependencies (Lorg/gradle/api/Action;)Lcom/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar;
@@ -349,6 +351,7 @@ public abstract class com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar
349351

350352
public abstract interface class com/github/jengelman/gradle/plugins/shadow/tasks/ShadowSpec : org/gradle/api/file/CopySpec {
351353
public abstract fun append (Ljava/lang/String;)Lcom/github/jengelman/gradle/plugins/shadow/tasks/ShadowSpec;
354+
public abstract fun append (Ljava/lang/String;Ljava/lang/String;)Lcom/github/jengelman/gradle/plugins/shadow/tasks/ShadowSpec;
352355
public abstract fun dependencies (Lorg/gradle/api/Action;)Lcom/github/jengelman/gradle/plugins/shadow/tasks/ShadowSpec;
353356
public abstract fun getStats ()Lcom/github/jengelman/gradle/plugins/shadow/ShadowStats;
354357
public abstract fun mergeGroovyExtensionModules ()Lcom/github/jengelman/gradle/plugins/shadow/tasks/ShadowSpec;
@@ -397,15 +400,21 @@ public class com/github/jengelman/gradle/plugins/shadow/transformers/ApacheNotic
397400
}
398401

399402
public class com/github/jengelman/gradle/plugins/shadow/transformers/AppendingTransformer : com/github/jengelman/gradle/plugins/shadow/transformers/Transformer {
403+
public static final field Companion Lcom/github/jengelman/gradle/plugins/shadow/transformers/AppendingTransformer$Companion;
404+
public static final field DEFAULT_SEPARATOR Ljava/lang/String;
400405
public fun <init> (Lorg/gradle/api/model/ObjectFactory;)V
401406
public fun canTransformResource (Lorg/gradle/api/file/FileTreeElement;)Z
402407
public final fun getObjectFactory ()Lorg/gradle/api/model/ObjectFactory;
403408
public fun getResource ()Lorg/gradle/api/provider/Property;
409+
public fun getSeparator ()Lorg/gradle/api/provider/Property;
404410
public fun hasTransformedResource ()Z
405411
public fun modifyOutputStream (Lorg/apache/tools/zip/ZipOutputStream;Z)V
406412
public fun transform (Lcom/github/jengelman/gradle/plugins/shadow/transformers/TransformerContext;)V
407413
}
408414

415+
public final class com/github/jengelman/gradle/plugins/shadow/transformers/AppendingTransformer$Companion {
416+
}
417+
409418
public abstract interface annotation class com/github/jengelman/gradle/plugins/shadow/transformers/CacheableTransformer : java/lang/annotation/Annotation {
410419
}
411420

src/docs/changes/README.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55

66
**Added**
77

8-
- Sync `SimpleRelocator` changes from maven-shade-plugin. ([#1076](https://github.com/GradleUp/shadow/pull/1076))
8+
- Sync `SimpleRelocator` changes from maven-shade-plugin. ([#1076](https://github.com/GradleUp/shadow/pull/1076))
9+
- Support configuring `separator` in `AppendingTransformer`. ([#1169](https://github.com/GradleUp/shadow/pull/1169))
10+
This is useful for handling files like `resources/application.yml`.
911

1012
**Changed**
1113

src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/transformers/AppendingTransformerTest.kt

+9-1
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,22 @@ class AppendingTransformerTest : BaseTransformerTest() {
2020
shadowJarBlock = fromJar(one, two),
2121
transformerBlock = """
2222
resource = '$ENTRY_TEST_PROPERTIES'
23+
separator = '\n# This is an empty line\n'
2324
""".trimIndent(),
2425
),
2526
)
2627

2728
run(shadowJarTask)
2829

2930
val content = outputShadowJar.use { it.getContent(ENTRY_TEST_PROPERTIES) }.trimIndent()
30-
assertThat(content).isEqualTo(CONTENT_ONE_TWO)
31+
assertThat(content).isEqualTo(
32+
"""
33+
$CONTENT_ONE
34+
# This is an empty line
35+
$CONTENT_TWO
36+
# This is an empty line
37+
""".trimIndent(),
38+
)
3139
}
3240

3341
@Test

src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.kt

+5
Original file line numberDiff line numberDiff line change
@@ -209,9 +209,14 @@ public abstract class ShadowJar :
209209
}
210210

211211
override fun append(resourcePath: String): ShadowJar {
212+
return append(resourcePath, AppendingTransformer.DEFAULT_SEPARATOR)
213+
}
214+
215+
override fun append(resourcePath: String, separator: String): ShadowJar {
212216
return runCatching {
213217
transform(AppendingTransformer::class.java) {
214218
it.resource.set(resourcePath)
219+
it.separator.set(separator)
215220
}
216221
}.getOrDefault(this)
217222
}

src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowSpec.kt

+2
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ public interface ShadowSpec : CopySpec {
4545

4646
public fun append(resourcePath: String): ShadowSpec
4747

48+
public fun append(resourcePath: String, separator: String): ShadowSpec
49+
4850
public fun relocate(pattern: String, destination: String): ShadowSpec
4951

5052
public fun relocate(pattern: String, destination: String, action: Action<SimpleRelocator>?): ShadowSpec

src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/transformers/AppendingTransformer.kt

+9-2
Original file line numberDiff line numberDiff line change
@@ -27,20 +27,23 @@ public open class AppendingTransformer @Inject constructor(
2727
* Defer initialization, see [issue 763](https://github.com/GradleUp/shadow/issues/763).
2828
*/
2929
private var _data: ByteArrayOutputStream? = null
30-
private inline val data get() = if (_data == null) ByteArrayOutputStream().also { _data = it } else _data!!
30+
private inline val data get() = _data ?: ByteArrayOutputStream().also { _data = it }
3131

3232
@get:Optional
3333
@get:Input
3434
public open val resource: Property<String> = objectFactory.property()
3535

36+
@get:Input
37+
public open val separator: Property<String> = objectFactory.property(DEFAULT_SEPARATOR)
38+
3639
override fun canTransformResource(element: FileTreeElement): Boolean {
3740
return resource.orNull.equals(element.relativePath.pathString, ignoreCase = true)
3841
}
3942

4043
override fun transform(context: TransformerContext) {
4144
context.inputStream.use {
4245
it.copyTo(data)
43-
data.write('\n'.code)
46+
data.write(separator.get().toByteArray())
4447
}
4548
}
4649

@@ -57,4 +60,8 @@ public open class AppendingTransformer @Inject constructor(
5760
data.toByteArray().inputStream().copyTo(os)
5861
data.reset()
5962
}
63+
64+
public companion object {
65+
public const val DEFAULT_SEPARATOR: String = "\n"
66+
}
6067
}

0 commit comments

Comments
 (0)