elixir 混合锁文件中的字母数字值是什么意思?

mrj*_*emp 6 elixir

锁定文件示例

你好,我很好奇“d42e20054116c49d5242d3ff9e1913acccebe6015f449d6e312a5bc160e79a62”在上面的锁文件切片中代表什么。我试过通读 mix 源代码,感觉它与 git 有关系,但我无法准确指出它。

mix源码中与锁相关的模块有读写锁方法(https://github.com/elixir-lang/elixir/blob/5984c6cc29a41d5bc78d49427730c8786d75e2c9/lib/mix/lib/mix/dep/lock.ex#L13 ) 但并没有说太多关于它处理的地图。测试似乎也没有暗示这个值代表什么:https : //github.com/elixir-lang/elixir/blob/9e40b8f786625b2f036ce9c2467cd0a8ade35ce6/lib/mix/test/mix/dep/lock_test.exs

我认为它可能是一个 git commit hash(要么是由我的机器在本地生成的,要么是从依赖的仓库中提取的。我在任何一个地方都没有找到那个哈希。

任何帮助表示赞赏。谢谢!

Ale*_*kin 9

这是一个散列,用于依赖收敛过程。粗略地说,Mix.Dep.Converger构建一个:digraph依赖关系并使用拓扑排序来确定依赖关系是否已经发散。

您将无法在Elixir/Mix源代码中找到它,因为它委托给外部收敛器,这取决于它是什么类型的依赖项。在:hex依赖类型的情况下,远程是Hex.RemoteConverger

也就是说,这个值全权Hex.RemoteConverger负责,mix对此零线索。如果您想提供另一个mix可以实现的依赖源,@behaviour Mix.RemoteConverger并且在依赖收敛过程中,您的转换器实现将使用您想要的任何参数调用。

  • FWIW,这就是[我是如何透露的](https://rocket-science.ru/hacking/2020/05/08/reverse-engineering-for-poor)。 (3认同)