niyue / tomlpatch

A command line tool to patch a TOML file structurally

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

tomlpatch

Do you want to patch your toml file structurally like modifying a nested python dictionary? This is a tool for you.

Description

Sometimes, you want to edit/patch a toml file, but you don't want to use the diff between two source files to patch the toml file since it may introduce conflicts that requires human intervention to resolve. For example, Cargo.toml is used by Rust projects, and this tool can be used to patch the Cargo.toml file with an external JSON file that contains the structural patch information so that you don't need to manually resolve the Cargo.toml file.

Installation

pip install tomlpatch

Usage

tomlpatch original_toml_file patch_json_file

Example

Suppose you have a Cargo.toml file like this:

[package]
name = "my_package"
version = "0.0.1"

liberssl = { version = "0.10.42", default-features = false, features=["vendered"] }
sources = ["s1", "s2"]
targets = ["t1", "t2", "t3"]

And you want to patch the Cargo.toml file with a JSON file like this:

{
  "patch": {
    "package.version": "0.0.2",
    "package.liberssl.features": null
  },
  "extend": {
    "package.sources": ["s4", "s5"]
  },
  "remove": {
    "package.targets": ["t2"]
  }
}

Then you can use the following command to patch the Cargo.toml file:

tomlpatch Cargo.toml patch.json

After the patch, the Cargo.toml file will be like this:

[package]
name = "my_package"
version = "0.0.2"
sources = [
    "s1",
    "s2",
    "s4",
    "s5",
]
targets = [
    "t1",
    "t3",
]

[package.liberssl]
version = "0.10.42"
default-features = false

TODO

  • Switch to tomkit for style preserving patching

About

A command line tool to patch a TOML file structurally

License:MIT License


Languages

Language:Python 95.6%Language:Makefile 4.4%