conan lock merge¶
$ conan lock merge -h
usage: conan lock merge [-h] [--out-file OUT_FILE] [-v [V]] [-cc CORE_CONF]
[--lockfile LOCKFILE] [--lockfile-out LOCKFILE_OUT]
Merge 2 or more lockfiles.
options:
-h, --help show this help message and exit
--out-file OUT_FILE Write the output of the command to the specified file
instead of stdout.
-v [V] Level of detail of the output. Valid options from less
verbose to more verbose: -vquiet, -verror, -vwarning,
-vnotice, -vstatus, -v or -vverbose, -vv or -vdebug,
-vvv or -vtrace
-cc CORE_CONF, --core-conf CORE_CONF
Define core configuration, overwriting global.conf
values. E.g.: -cc core:non_interactive=True
--lockfile LOCKFILE Path to lockfile to be merged
--lockfile-out LOCKFILE_OUT
Filename of the created lockfile
conan lock merge
命令接受 2 个或更多 lockfile,并将它们聚合,生成一个最终的 lockfile。例如,如果我们有两个 lockfile lock1.lock
和 lock2.lock
,我们可以将它们合并到一个最终的 conan.lock
文件中
# we have 2 lockfiles lock1.lock and lock2.lock
$ conan lock add --requires=pkg/1.1 --lockfile-out=lock1.lock
$ cat lock1.lock
{
"version": "0.5",
"requires": [
"pkg/1.1",
],
"build_requires": [],
"python_requires": []
}
$ conan lock add --requires=other/2.1 --build-requires=tool/3.2 --lockfile-out=lock2.lock
$ cat lock2.lock
{
"version": "0.5",
"requires": [
"other/2.1"
],
"build_requires": [
"tool/3.2"
],
"python_requires": []
}
# we can merge both
$ conan lock merge --lockfile=lock1.lock --lockfile=lock2.lock
$ cat conan.lock
{
"version": "0.5",
"requires": [
"pkg/1.1",
"other/2.1"
],
"build_requires": [
"tool/3.2"
],
"python_requires": []
}
与 conan lock add
命令类似,conan lock merge
会严格排序版本列表
它不会执行任何类型的验证,检查包或版本是否存在,或者它们是否属于给定的依赖图
它只是对 JSON 文件进行基本处理,将它们聚合起来。
它不能保证 lockfile 会是完整的,如果不是,可能需要
--lockfile-partial
如果定义了 recipe revisions,它们必须包含时间戳才能正确排序。
警告
禁止手动修改 Conan lockfile,更改引用的严格排序,这可能导致任何任意的未定义行为。
请注意,不可能
conan lock add
一个版本范围。版本可能是未完全完成的(例如,未提供 revision),但它必须是一个确切的版本。
另请参阅
为了更好地理解 conan lock merge
,建议先理解 lockfile 的通用概念,请访问 lockfile 教程 以获得对 lockfile 的实用介绍。
conan lock merge
命令可以用于在一个 lockfile 中整合,当由于某些原因存在多个已分叉的 lockfile 时。一个用例是创建一个多配置 lockfile,其中包含所有操作系统(Linux、Windows 等)所需的所有锁定版本,即使在不同操作系统的图中有条件依赖。例如,在测试新依赖版本时,例如 pkg/3.4
的新版本,而之前 pkg/3.3
已经存在于图中,我们可能希望有一个新的 lockfile 来清理之前的 pkg/3.3
。如果我们应用 --lockfile-clean
参数,它将删除 lockfile 中未使用的版本,但也会删除特定于操作系统的依赖项。所以可以这样做:假设我们有如下 lockfile(简化,为简单起见删除了 revisions),它是测试我们主产品 app1/0.1
的新 pkgb/0.2
版本后的结果。
{
"version": "0.5",
"requires": [
"pkgb/0.2",
"pkgb/0.1",
"pkgawin/0.1",
"pkganix/0.1",
"app1/0.1"
]
}
pkgawin
和 pkganix
分别仅存在于 Windows 和 Linux 上的依赖项。一切看起来都很好,pkgb/0.2
新版本与我们的应用程序一起正常工作,并且我们想清理 lockfile 中未使用的内容。
$ conan lock create --requires=app1/0.1 --lockfile=app.lock --lockfile-out=win.lock -s os=Windows --lockfile-clean
# Note how both pkgb/0.1 and pkganix are gone
$ cat win.lock
{
"version": "0.5",
"requires": [
"pkgb/0.2",
"pkgawin/0.1",
"app1/0.1"
]
}
$ conan lock create --requires=app1/0.1 --lockfile=app.lock --lockfile-out=nix.lock -s os=Linux --lockfile-clean
# Note how both pkgb/0.1 and pkgawin are gone
$ cat win.lock
{
"version": "0.5",
"requires": [
"pkgb/0.2",
"pkganix/0.1",
"app1/0.1"
]
}
# Finally, merge the 2 clean lockfiles, for keeping just 1 for next iteration
$ conan lock merge --lockfile=win.lock --lockfile=nix.lock --lockfile-out=final.lock
$ cat final.lock
{
"version": "0.5",
"requires": [
"pkgb/0.2",
"pkgawin/0.1",
"pkganix/0.1",
"app1/0.1"
]
}