Skip to content

Commit

Permalink
feat: add options command
Browse files Browse the repository at this point in the history
  • Loading branch information
oSumAtrIX committed Aug 23, 2023
1 parent 32da961 commit 9edbbf3
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 6 deletions.
18 changes: 13 additions & 5 deletions docs/1_usage.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,21 @@ Learn how to ReVanced CLI.
revanced-patches.jar
```

- ### ⚙️ Supply options to patches using ReVanced CLI

Some patches provide options. Currently, ReVanced CLI will generate and consume an `options.json` file at the location that is specified in `-o`. If the option is not specified, the options file will be generated in the current working directory.
- ### ⚙️ Generate options from patches using ReVanced CLI

Some patches accept options.

- ```bash
java -jar revanced-cli.jar options \
--overwrite \
--update \
revanced-patches.jar
```

The options file contains all options from supplied patch bundles.
> **Note**: A default `options.json` file will be automatically generated, if it does not exist
without any need of intervention.

> **Note**: The `options.json` file will be generated at the first time you use ReVanced CLI to patch an APK file for now. This will be changed in the future.
```bash
- ### 💉 Use ReVanced CLI to patch an APK file but install without root permissions
Expand Down
3 changes: 2 additions & 1 deletion src/main/kotlin/app/revanced/cli/command/Main.kt
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@ object CLIVersionProvider : IVersionProvider {
subcommands = [
ListPatchesCommand::class,
PatchCommand::class,
UninstallCommand::class
UninstallCommand::class,
OptionsCommand::class,
]
)
internal object Main
50 changes: 50 additions & 0 deletions src/main/kotlin/app/revanced/cli/command/OptionsCommand.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package app.revanced.cli.command

import app.revanced.patcher.PatchBundleLoader
import app.revanced.utils.Options
import app.revanced.utils.Options.setOptions
import picocli.CommandLine
import picocli.CommandLine.Help.Visibility.ALWAYS
import java.io.File

@CommandLine.Command(
name = "options",
description = ["Generate options file from patches"],
)
internal object OptionsCommand : Runnable {
@CommandLine.Parameters(
description = ["Paths to patch bundles"],
arity = "1..*"
)
lateinit var patchBundles: Array<File>

@CommandLine.Option(
names = ["-p", "--path"],
description = ["Path to patch options JSON file"],
showDefaultValue = ALWAYS
)
var path: File = File("options.json")

@CommandLine.Option(
names = ["-o", "--overwrite"],
description = ["Overwrite existing options file"],
showDefaultValue = ALWAYS
)
var overwrite: Boolean = false

@CommandLine.Option(
names = ["-u", "--update"],
description = ["Update existing options by adding missing and removing non-existent options"],
showDefaultValue = ALWAYS
)
var update: Boolean = false

override fun run() = if (!path.exists() || overwrite)
with(PatchBundleLoader.Jar(*patchBundles)) {
if (update) setOptions(path, logger)

Options.serialize(this, prettyPrint = true)
.let(path::writeText)
}
else logger.error("Options file already exists, use --override to override it")
}

0 comments on commit 9edbbf3

Please sign in to comment.