Skip to content

Commit 9c0baf1

Browse files
committed
feat: implement migrate command
1 parent f2edaed commit 9c0baf1

File tree

4 files changed

+45
-21
lines changed

4 files changed

+45
-21
lines changed

src/main/kotlin/net/azisaba/automaticbackupscript/Main.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
package net.azisaba.automaticbackupscript
22

33
import kotlinx.cli.ArgParser
4-
import kotlinx.cli.ArgType
54
import kotlinx.cli.ExperimentalCli
6-
import kotlinx.cli.default
75
import net.azisaba.automaticbackupscript.command.BackupCommand
86
import net.azisaba.automaticbackupscript.command.MigrateCommand
97

@@ -12,8 +10,7 @@ object Main {
1210
System.setProperty("org.slf4j.simpleLogger.logFile", "System.out")
1311
}
1412

15-
private val parser = ArgParser("AutomaticBackupScript")
16-
val configFile by parser.option(ArgType.String, "config-file", "c", "Config file (core)").default("config/core.json")
13+
val parser = ArgParser("AutomaticBackupScript")
1714

1815
@OptIn(ExperimentalCli::class)
1916
@JvmStatic

src/main/kotlin/net/azisaba/automaticbackupscript/command/BackupCommand.kt

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,29 @@ import kotlinx.cli.ExperimentalCli
55
import kotlinx.cli.Subcommand
66
import kotlinx.cli.default
77
import kotlinx.coroutines.runBlocking
8+
import kotlinx.serialization.encodeToString
89
import net.azisaba.automaticbackupscript.Application
910
import net.azisaba.automaticbackupscript.config.BackupConfig
1011
import net.azisaba.automaticbackupscript.config.CoreConfig
12+
import net.azisaba.automaticbackupscript.config.CoreConfig.Companion.serializer
13+
import net.azisaba.automaticbackupscript.config.CoreConfig.Companion.toml
1114
import java.io.File
1215

1316
@OptIn(ExperimentalCli::class)
1417
object BackupCommand : Subcommand("backup", "Backup files") {
18+
private val configFile by option(ArgType.String, "core-config-file", "c", "Config file (core)").default("config/core.toml")
1519
private val configPath by option(ArgType.String, "config-file", "f", "Configuration file").default("config/backup.toml")
1620

21+
val config: CoreConfig by lazy {
22+
File(configFile).let { file ->
23+
if (!file.parentFile.exists()) file.parentFile.mkdirs()
24+
if (!file.exists()) file.writeText(toml.encodeToString(CoreConfig()))
25+
toml.decodeFromString(serializer(), file.readText())
26+
}
27+
}
28+
1729
override fun execute() {
18-
CoreConfig.config.executePreExecuteScript()
30+
config.executePreExecuteScript()
1931
val configFile = File(configPath)
2032
BackupConfig.load(configFile)
2133
if (BackupConfig.config.webhookUrl == "insert url here") {

src/main/kotlin/net/azisaba/automaticbackupscript/command/MigrateCommand.kt

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,20 @@ import kotlinx.cli.default
77
import kotlinx.serialization.ExperimentalSerializationApi
88
import kotlinx.serialization.encodeToString
99
import kotlinx.serialization.json.Json
10+
import net.azisaba.automaticbackupscript.config.BackupConfig
1011
import net.azisaba.automaticbackupscript.config.CoreConfig
1112
import java.io.File
13+
import kotlin.io.path.nameWithoutExtension
1214

1315
@OptIn(ExperimentalCli::class)
1416
object MigrateCommand : Subcommand("migrate", "Migrate old config") {
15-
private val oldConfigPath by option(ArgType.String, "old-config-file", "o", "Old configuration file").default("config/backup.json")
16-
private val newConfigPath by option(ArgType.String, "new-config-file", "n", "New configuration file").default("config/backup.toml")
17+
private val coreConfigPath by option(ArgType.String, "Core-config-file", "c", "Core configuration file").default("config/core.json")
18+
private val backupConfigPath by option(
19+
ArgType.String,
20+
"Backup-config-file",
21+
"b",
22+
"Backup configuration file",
23+
).default("config/backup.json")
1724

1825
@OptIn(ExperimentalSerializationApi::class)
1926
private val json =
@@ -24,12 +31,29 @@ object MigrateCommand : Subcommand("migrate", "Migrate old config") {
2431
ignoreUnknownKeys = true
2532
}
2633

34+
fun changeExtToToml(old: File): File {
35+
val p = old.toPath()
36+
return File(p.parent.toFile(), p.nameWithoutExtension + ".toml")
37+
}
38+
2739
override fun execute() {
2840
println("Config migrator")
29-
println("From: $oldConfigPath")
30-
println("To: $newConfigPath")
31-
val config = json.decodeFromString(CoreConfig.serializer(), File(oldConfigPath).readText())
32-
File(newConfigPath).writeText(CoreConfig.toml.encodeToString(config))
33-
println("Migration completed.")
41+
val oldCoreConfig: File = File(coreConfigPath)
42+
val newCoreConfig: File = changeExtToToml(oldCoreConfig)
43+
println("From: $oldCoreConfig")
44+
println("To: $newCoreConfig")
45+
val coreConfig = json.decodeFromString(CoreConfig.serializer(), oldCoreConfig.readText())
46+
newCoreConfig.writeText(CoreConfig.toml.encodeToString(coreConfig))
47+
println("Core config migrated.")
48+
49+
val oldBackupConfig: File = File(backupConfigPath)
50+
val newBackupConfig: File = changeExtToToml(oldBackupConfig)
51+
println("From: $oldBackupConfig")
52+
println("To: $newBackupConfig")
53+
val backupConfig = json.decodeFromString(BackupConfig.serializer(), oldBackupConfig.readText())
54+
newBackupConfig.writeText(CoreConfig.toml.encodeToString(backupConfig))
55+
println("Backup config migrated.")
56+
57+
println("All migration completed.")
3458
}
3559
}

src/main/kotlin/net/azisaba/automaticbackupscript/config/CoreConfig.kt

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ import com.akuleshov7.ktoml.TomlInputConfig
66
import com.akuleshov7.ktoml.TomlOutputConfig
77
import kotlinx.serialization.ExperimentalSerializationApi
88
import kotlinx.serialization.Serializable
9-
import kotlinx.serialization.encodeToString
10-
import net.azisaba.automaticbackupscript.Main
119
import net.azisaba.automaticbackupscript.util.ProcessExecutor
1210
import java.io.File
1311

@@ -32,13 +30,6 @@ data class CoreConfig(
3230
indentation = TomlIndentation.NONE,
3331
),
3432
)
35-
36-
val config: CoreConfig =
37-
File(Main.configFile).let { file ->
38-
if (!file.parentFile.exists()) file.parentFile.mkdirs()
39-
if (!file.exists()) file.writeText(toml.encodeToString(CoreConfig()))
40-
toml.decodeFromString(serializer(), file.readText())
41-
}
4233
}
4334

4435
fun executePreExecuteScript() {

0 commit comments

Comments
 (0)