10 Contexts

zhangly 2021-03-15 19:01:02
Categories: > Tags:

概述

当使用rez-env创建解析环境时,实际上是创建了一个称为context的东西。
一个context存储的信息包括:

context不存储解析到的程序包副本,而是为每个包存储一种句柄,
它提供了足够的信息来知道从哪里获取完整的包定义和内容。

context本身非常小,以json格式存储在一个rxt文件中。
当你使用rez-env时,它实际在磁盘上创建了一个临时的context文件,直到shell退出时这个文件就会被删除。

]$ rez-env foo bah

You are now in a rez-configured environment.

resolved by ajohns@14jun01.methodstudios.com, on Wed Oct 22 12:44:00 2014,
using Rez v2.0.rc1.10

requested packages:
foo
bah

resolved packages:
eek-2.6   /packages/inhouse/eek/2.6
foo-1.2   /packages/inhouse/foo/1.2
bah-4     /packages/inhouse/bah/4

> ]$ echo $REZ_RXT_FILE
/tmp/rez_context_0tMS4U/context.rxt

解析存储

可以使用rez-env —output将解析后的context直接写入文件。

]$ rez-env foo bah --output test.rxt

之后你可以这样读取context文件,重新构建同样的环境。

]$ rez-env --input test.rxt

You are now in a rez-configured environment.

resolved by ajohns@14jun01.methodstudios.com, on Wed Oct 22 12:44:00 2014,
using Rez v2.0.rc1.10

requested packages:
foo
bah

resolved packages:
eek-2.6   /packages/inhouse/eek/2.6
foo-1.2   /packages/inhouse/foo/1.2
bah-4     /packages/inhouse/bah/4

> ]$ █

context并不存储配置环境的副本(比如导出的环境变量等)。context只存储为了配置环境而需要的程序包解析列表。
当使用rez-env —input加载一个环境时,每个包的command部分都会被解释一遍。

你可以把包的command看作配置环境时的脚本片段。通过创建一个context,你就创建了一个脚本片段列表,
当这些片段连续运行时,就产生了目标环境。

rez-context工具

rez-context可以检查context文件。当已经在一个解析后的shell中,运行这个命令会进行检查。
除非在参数后明确指定了要检查哪一个context文件,默认都是检查当前环境。
这个例子就是指定context文件检查:

]$ rez-context test.rxt

resolved by ajohns@14jun01.methodstudios.com, on Wed Oct 22 12:44:00 2014,
using Rez v2.0.rc1.10

requested packages:
foo
bah

resolved packages:
eek-2.6   /packages/inhouse/eek/2.6
foo-1.2   /packages/inhouse/foo/1.2
bah-4     /packages/inhouse/bah/4