如何防止 Firely.Terminal 破坏 FHIR 包缓存?
How to keep Firely.Terminal from trashing the FHIR package cache?
Firely.Terminal 的一个出色方面是它能够以与使用缓存的 HAPI 工具完全兼容的方式与本地 FHIR 包缓存 (~/.fhir
) 进行互操作。可悲的是,情况似乎不再如此。
今天我将 Firely.Terminal 更新到版本 2.4.2,新版本似乎遍历了 FHIR 包缓存,在没有被要求的情况下更改文件。
过去 现有 包中唯一 Firely.Terminal 改变的是缺少的 .index.json
的生成。对于新安装的软件包,与 HAPI 安装的软件包的唯一区别是 .index.json
中的一些附加字段(存在一些通常会被抑制的包含 null 的字段,以及添加的 fhirVersion
字段)。
当 new Firely.Terminal 被告知要将包添加到范围 (fhir install
) 时,它会自动 'bakes' 它,这似乎涉及诸如快照所有 StructureDefinition 资源和扩展所有 ValueSet 资源之类的事情。即使是内容完好无损的资源,其时间戳也会被丢弃。同样的命运降临在被添加到范围的包的清单中列为依赖项的所有包。
有一个 'unbake' 命令(例如 fhir unbake --package kbv.ita.for@1.0.1
),但这不是递归操作。更重要的是,当它说 'Bake successfully removed from KBV.ITA.FOR@1.0.1' (注意错误的大写)时,那是一个彻头彻尾的谎言 - 除了删除文件 .bake.json
.[=18 之外,包目录的内容完全没有改变=]
因此,将包缓存恢复到正常工作状态的唯一方法是识别所有垃圾包,将它们全部删除,然后使用一些 HAPI 工具引用它们以便重新缓存它们。
如果 Firely.Terminal 破坏了它自己的缓存,我也不会介意。但是它破坏的是当前用户的全局HAPI包缓存,这简直不能接受。
有什么方法可以抑制Firely.Terminal的破坏性行为吗?理想情况下是全局(具有机器范围的影响),但秘密命令开关会在紧要关头完成。如果那不可能:有没有人知道哪个旧版本是最新的仍然有效,以及从哪里获得它?
注意:如果缓存的包是写保护的,那么 Firely.Terminal 不会接受提示 - 它会尝试破坏文件并喷出大量 'access denied' 消息。更重要的是,它甚至在发生错误时也不会停止;取而代之的是,它继续以其愉快的方式进行,并将人们可能忘记写保护的所有内容都丢弃了。
背景:FHIR包缓存的一个对我们工作很重要的特性是缓存中的文件与(规范)中的文件完全相同发布的包。特别是,我们需要在没有快照的情况下发布的配置文件不包含快照,在没有扩展的情况下发布的值集不包含扩展等等。一方面,这使得验证缓存文件与已发布包(或其固定版本)中包含的文件完全相同成为可能。另一方面,我们需要控制快照配置文件、扩展值集等的上下文,因为可能需要提供与包清单中声明的依赖项不同的依赖项。后者有时是必要的,因为 profile/package 版本管理在德国电子处方的背景下有点,呃,特殊并且可能与 FHIR 标准不同。为此,所有资源都必须动态地 snapshotted/expanded(取决于使用上下文),而不是静态地在磁盘上。事情正在朝着更符合标准的方向发展,但我们还没有完全做到这一点。
没有烘焙的最新版本(安装时)
从对 the latest versions of Firely Terminal 的一些快速测试来看,似乎 2.2.0
是最新的,但没有 bake
功能(安装时 auto-bake)。安装说明:
> dotnet tool uninstall --global Firely.Terminal
> dotnet tool install --global Firely.Terminal --version 2.2.0
烘焙
引入了 bake
功能来为包提供快照,因为并非所有下游工具(最值得注意的是 sushi
)都能够自己生成这些。
目前 bake
默认情况下可能有点过于激进,还会为已有的包重新计算快照。原则上,这应该不是问题,因为快照只是用于计算所有分层差异的缓存。由于快照逻辑仍在发展,因此有时甚至需要重新计算。但在较新的版本中,我们将关注:
- 将默认值更改为在已提供时不重新计算
- 提供全局设置以将默认值更改为从不calculate/always(重新)计算快照
这应该可以防止 Firely Terminal 接触包缓存中不需要接触的任何文件。根据您的问题,鉴于您使用了 'thrashing' 和 'destroying'?
,我不确定在 'baking' 之后共享 FHIR 缓存的状态是否有任何损坏
未烘焙
unbake
命令用于从软件包文件夹中删除快照。我在测试中发现它没有这样做,我将把它作为一个问题来解决。
Firely.Terminal 的一个出色方面是它能够以与使用缓存的 HAPI 工具完全兼容的方式与本地 FHIR 包缓存 (~/.fhir
) 进行互操作。可悲的是,情况似乎不再如此。
今天我将 Firely.Terminal 更新到版本 2.4.2,新版本似乎遍历了 FHIR 包缓存,在没有被要求的情况下更改文件。
过去 现有 包中唯一 Firely.Terminal 改变的是缺少的 .index.json
的生成。对于新安装的软件包,与 HAPI 安装的软件包的唯一区别是 .index.json
中的一些附加字段(存在一些通常会被抑制的包含 null 的字段,以及添加的 fhirVersion
字段)。
当 new Firely.Terminal 被告知要将包添加到范围 (fhir install
) 时,它会自动 'bakes' 它,这似乎涉及诸如快照所有 StructureDefinition 资源和扩展所有 ValueSet 资源之类的事情。即使是内容完好无损的资源,其时间戳也会被丢弃。同样的命运降临在被添加到范围的包的清单中列为依赖项的所有包。
有一个 'unbake' 命令(例如 fhir unbake --package kbv.ita.for@1.0.1
),但这不是递归操作。更重要的是,当它说 'Bake successfully removed from KBV.ITA.FOR@1.0.1' (注意错误的大写)时,那是一个彻头彻尾的谎言 - 除了删除文件 .bake.json
.[=18 之外,包目录的内容完全没有改变=]
因此,将包缓存恢复到正常工作状态的唯一方法是识别所有垃圾包,将它们全部删除,然后使用一些 HAPI 工具引用它们以便重新缓存它们。
如果 Firely.Terminal 破坏了它自己的缓存,我也不会介意。但是它破坏的是当前用户的全局HAPI包缓存,这简直不能接受。
有什么方法可以抑制Firely.Terminal的破坏性行为吗?理想情况下是全局(具有机器范围的影响),但秘密命令开关会在紧要关头完成。如果那不可能:有没有人知道哪个旧版本是最新的仍然有效,以及从哪里获得它?
注意:如果缓存的包是写保护的,那么 Firely.Terminal 不会接受提示 - 它会尝试破坏文件并喷出大量 'access denied' 消息。更重要的是,它甚至在发生错误时也不会停止;取而代之的是,它继续以其愉快的方式进行,并将人们可能忘记写保护的所有内容都丢弃了。
背景:FHIR包缓存的一个对我们工作很重要的特性是缓存中的文件与(规范)中的文件完全相同发布的包。特别是,我们需要在没有快照的情况下发布的配置文件不包含快照,在没有扩展的情况下发布的值集不包含扩展等等。一方面,这使得验证缓存文件与已发布包(或其固定版本)中包含的文件完全相同成为可能。另一方面,我们需要控制快照配置文件、扩展值集等的上下文,因为可能需要提供与包清单中声明的依赖项不同的依赖项。后者有时是必要的,因为 profile/package 版本管理在德国电子处方的背景下有点,呃,特殊并且可能与 FHIR 标准不同。为此,所有资源都必须动态地 snapshotted/expanded(取决于使用上下文),而不是静态地在磁盘上。事情正在朝着更符合标准的方向发展,但我们还没有完全做到这一点。
没有烘焙的最新版本(安装时)
从对 the latest versions of Firely Terminal 的一些快速测试来看,似乎 2.2.0
是最新的,但没有 bake
功能(安装时 auto-bake)。安装说明:
> dotnet tool uninstall --global Firely.Terminal
> dotnet tool install --global Firely.Terminal --version 2.2.0
烘焙
引入了 bake
功能来为包提供快照,因为并非所有下游工具(最值得注意的是 sushi
)都能够自己生成这些。
目前 bake
默认情况下可能有点过于激进,还会为已有的包重新计算快照。原则上,这应该不是问题,因为快照只是用于计算所有分层差异的缓存。由于快照逻辑仍在发展,因此有时甚至需要重新计算。但在较新的版本中,我们将关注:
- 将默认值更改为在已提供时不重新计算
- 提供全局设置以将默认值更改为从不calculate/always(重新)计算快照
这应该可以防止 Firely Terminal 接触包缓存中不需要接触的任何文件。根据您的问题,鉴于您使用了 'thrashing' 和 'destroying'?
,我不确定在 'baking' 之后共享 FHIR 缓存的状态是否有任何损坏未烘焙
unbake
命令用于从软件包文件夹中删除快照。我在测试中发现它没有这样做,我将把它作为一个问题来解决。