Skip to content

Commit 0d756f5

Browse files
authored
Add extension selection and support for single file in migration_tool (#292)
* Add extension selection and support for single file in migration_tool
1 parent a6aa063 commit 0d756f5

File tree

5 files changed

+26
-27
lines changed

5 files changed

+26
-27
lines changed

migration_utils/src/main/kotlin/com/pubnub/migration/App.kt

+16-12
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,23 @@ import com.github.ajalt.clikt.core.CliktCommand
77
import com.github.ajalt.clikt.core.Context
88
import com.github.ajalt.clikt.core.main
99
import com.github.ajalt.clikt.parameters.arguments.argument
10+
import com.github.ajalt.clikt.parameters.options.default
1011
import com.github.ajalt.clikt.parameters.options.flag
1112
import com.github.ajalt.clikt.parameters.options.option
13+
import com.github.ajalt.clikt.parameters.options.split
1214
import com.github.ajalt.clikt.parameters.types.path
15+
import java.io.InputStream
1316

14-
class Migration(private val replacements: List<Pair<String, String>>) : CliktCommand("migration_utils") {
17+
class Migration(private val replacements: List<Pair<Regex, String>>) : CliktCommand("migration_utils") {
1518
val dryRun by option(help = "Perform a dry run (without changing any files)").flag()
1619
val noBackups by option(help = "Do not save backups of changed files as '<filename>.bck'").flag()
17-
val directory by argument(name = "project directory").path(mustExist = true, canBeDir = true, canBeFile = false)
18-
19-
val supportedExtensions = setOf("java", "kt")
20+
val directory by argument(name = "project directory").path(mustExist = true, canBeDir = true, canBeFile = true)
21+
val extensions by option(help = "Provide a list of file extensions to consider. Default: java, kt").split(",").default(
22+
listOf("kt", "java")
23+
)
2024

2125
override fun help(context: Context): String {
22-
return "This command will scan all files ending with ${supportedExtensions.map { "'.$it'" }.joinToString(", ")}" +
26+
return "This command will scan all files ending with extensions specified in `--extensions=kt,java`" +
2327
" in <project directory>, and replace package names of classes that have been moved to " +
2428
"com.pubnub.api.java.* in PubNub Java SDK v10.\n\n" +
2529
"Perform a --dry-run to print a list of files that will be changed.\n\n" +
@@ -30,7 +34,7 @@ class Migration(private val replacements: List<Pair<String, String>>) : CliktCom
3034

3135
override fun run() {
3236
directory.toFile().walk().forEach { file ->
33-
if (file.extension.lowercase() !in supportedExtensions) {
37+
if (file.extension.lowercase() !in this.extensions) {
3438
return@forEach
3539
}
3640
val newFileContent = file.useLines { lines ->
@@ -51,7 +55,7 @@ class Migration(private val replacements: List<Pair<String, String>>) : CliktCom
5155
companion object {
5256
fun replaceLines(
5357
lines: Sequence<String>,
54-
replacements: List<Pair<String, String>>,
58+
replacements: List<Pair<Regex, String>>,
5559
): String? {
5660
var fileChanged = false
5761
val newFileContent = lines.fold(StringBuilder()) { acc: StringBuilder, line: String ->
@@ -70,24 +74,24 @@ class Migration(private val replacements: List<Pair<String, String>>) : CliktCom
7074

7175
fun replaceLine(
7276
line: String,
73-
replacements: List<Pair<String, String>>,
77+
replacements: List<Pair<Regex, String>>,
7478
): String {
7579
return replacements.fold(line) { lineUnderReplacement, replacement ->
7680
lineUnderReplacement
7781
.replace(replacement.first, replacement.second)
7882
}
7983
}
8084

81-
fun loadReplacementsFile(): List<Pair<String, String>> =
82-
this::class.java.getResourceAsStream("/replacements.txt")!!
85+
fun loadReplacementsFile(inputStream: InputStream): List<Pair<Regex, String>> =
86+
inputStream
8387
.bufferedReader()
8488
.readLines()
8589
.map {
8690
val split = it.split(':')
8791
require(split.size == 2)
88-
split[0] to split[1]
92+
Regex("(?u)" + split[0].replace(".", "\\.") + "(?!\\p{Alnum})") to split[1]
8993
}
9094
}
9195
}
9296

93-
fun main(args: Array<String>) = Migration(Migration.loadReplacementsFile()).main(args)
97+
fun main(args: Array<String>) = Migration(Migration.loadReplacementsFile(Migration::class.java.getResourceAsStream("/replacements.txt")!!)).main(args)

migration_utils/src/test/kotlin/com/pubnub/migration/MigrationTest.kt

+6-13
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,17 @@ import kotlin.test.assertNull
1010
import kotlin.test.assertTrue
1111

1212
class MigrationTest {
13-
private val replacements = listOf(
14-
"aaa" to "bbb",
15-
"ccc" to "ddd"
16-
)
13+
private val replacements = Migration.loadReplacementsFile(this::class.java.getResourceAsStream("/testReplacements.txt")!!)
1714

1815
@Test
1916
fun loadReplacements() {
20-
val replacements = Migration.loadReplacementsFile()
21-
assertTrue { replacements.isNotEmpty() }
22-
replacements.forEach {
23-
assertEquals(it.first, it.second.replace(".java", ""))
24-
}
17+
assertTrue { replacements.size == 2 }
2518
}
2619

2720
@Test
2821
fun replaceLine() {
29-
val inputLine = "xaaax aaa zzz ddd ccc ccC AaA"
30-
val expectedLine = "xbbbx bbb zzz ddd ddd ccC AaA"
22+
val inputLine = "xaaax aaa; zzz ddd ccc ccC AaA"
23+
val expectedLine = "xaaax bbb; zzz ddd ddd ccC AaA"
3124

3225
val line = Migration.replaceLine(inputLine, replacements)
3326

@@ -37,13 +30,13 @@ class MigrationTest {
3730
@Test
3831
fun replaceLines_changed_lines_returned() {
3932
val inputLines = sequenceOf(
40-
"xaaax aaa zzz ddd ccc ccC AaA",
33+
"xaaax aaa; zzz ddd ccc ccC AaA",
4134
"bbb",
4235
"ccc aaa ddd",
4336
"aaa bbb ccc"
4437
)
4538
val expectedLines = """
46-
xbbbx bbb zzz ddd ddd ccC AaA
39+
xaaax bbb; zzz ddd ddd ccC AaA
4740
bbb
4841
ddd bbb ddd
4942
bbb bbb ddd

migration_utils/src/test/resources/goldenData/file1.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ fdkopfsk ksdopfksdpofskdpofsdk
44
fdsfddsfsds
55

66
fdsfopds kpofdskps bbb
7-
zzzbbbzzz
7+
zzzaaazzz

migration_utils/src/test/resources/goldenData/someFolder/file2.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@
44
fdsfddsfsds
55

66
fdsfopds kpofdskps bbb
7-
zzzbbbzzz
7+
zzzaaazzz
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
aaa:bbb
2+
ccc:ddd

0 commit comments

Comments
 (0)