4个版本
0.1.3 | 2024年7月17日 |
---|---|
0.1.2 | 2024年6月5日 |
0.1.1 | 2023年1月25日 |
0.1.0 | 2023年1月25日 |
#132 in 构建工具
每月 170 次下载
50KB
685 行
deppatcher
Cargo.toml文件的大规模重写工具
用法
规则 - jsonnet函数,接收包描述(见 DirectInput
),并返回包源(见 DirectSource
)
例如,你想使用git仓库重写所有对包 evm
的使用,你可以使用这个规则
function(pkg) if pkg.package == "evm" then {
git: "https://github.com/CertainLach/evm"
}
要执行此规则,可以写入 deppatcher patch -e "rule"
,或者保存到文件,然后 deppatcher patch file.jsonnet
。补丁命令接收与jsonnet解释器相同的参数
要快速用其他工作区中定义的包覆盖所有使用的包,请使用
deppatcher link /home/lach/build/my-evm-fork
重写后,原始包源将存储在 Cargo.toml
中,可以是恢复(deppatcher revert
),也可以是删除(deppatcher freeze
)
与本地工作区的使用
对于路径覆盖,cargo期望你提供依赖项的完整路径,在工作区的情况下,是依赖项在该工作区中的路径
为了简化问题,有一个 dpp.loadPaths
辅助函数可用,它接收工作区的路径(相对于规则文件),并返回一个对象,该对象将工作区中的包映射到它们的绝对路径
例如,对于 jrsonnet,它将返回
{
jrsonnet: '/code/cmds/jrsonnet',
jsonnet: '/code/bindings/jsonnet'
'jrsonnet-evaluator': '/code/crates/evaluator',
'jrsonnet-parser': '/code/crates/parser',
'jrsonnet-interner': '/code/crates/interner',
...
}
其中 /code/
- 仓库树绝对路径
示例场景
- 你使用substrate,你只能依赖git版本,你不能仅仅指定master分支
在仓库中你有很多类似的行
sp-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.18" }
当你需要更新到该依赖项的下一个版本时,你需要多次搜索和替换,这很麻烦,而且并不总是有效(例如,如果你想在自己的分支中有自己的版本控制)
sp-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19" }
使用deppatcher时,只需编写更新规则,例如这样
function(pkg) if pkg.source.git == "https://github.com/paritytech/substrate" then pkg.source {
branch: "polkadot-v0.9.19"
}
deppatcher存储了包的原始版本以供回滚,您需要运行deppatcher freeze
来删除它们
- 您依赖https://github.com/paritytech/frontier,这个仓库有很多模块,您需要临时使用本地分支。
使用[patch]
和/或手动指定path
将有效,然而,这些只能指向虚拟清单,您不能直接输入
fp-consensus = { path = "~/my-frontier-fork" }
您应该输入此仓库克隆中依赖项的路径
fp-consensus = { path = "~/my-frontier-fork/primitives/consensus" }
deppatcher可以拯救您!
local frontier = dpp.loadPaths('/home/lach/work/substrate/frontier');
function(pkg) if std.objectHas(frontier, pkg.package) then {
path: frontier[pkg.package],
}
或者通过使用别名,它在底层与上面的代码完全相同
deppatcher link /home/lach/work/substrate/frontier
当您需要切换回所有内容时,请使用deppatcher revert
命令
替代方案
https://github.com/bkchr/diener - 非常有限,您不能更新非substrate依赖项(例如frontier或分叉的substrate),回滚部分补丁,或执行任何其他非平凡操作。您可以用diener做的所有事情,您也可以用deppatcher做
依赖项
~14–24MB
~364K SLoC