Что означает буквенно-цифровое значение c в файле блокировки смеси эликсира? - PullRequest
6 голосов
/ 07 мая 2020

sample of the lock file

Привет, мне любопытно, что значение "d42e20054116c49d5242d3ff9e1913acccebe6015f449d6e312a5bc160e79a62" представляет в фрагменте файла блокировки выше. Я пробовал прочитать исходный код микса и чувствую, что он имеет какое-то отношение к git, но я не могу его точно определить.

Модуль, связанный с блокировкой, в исходном коде микса прочитал и писать методы блокировки (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 ha sh (либо созданный моим машина локально или извлечена из репозитория зависимости. Я не нашел этого ha sh ни в одном месте.

Любая помощь приветствуется. Спасибо!

1 Ответ

9 голосов
/ 08 мая 2020

Это ha sh, используемый в процессе конвергенции зависимостей. Грубо говоря, Mix.Dep.Converger строит :digraph зависимостей и использует сортировку топологии, чтобы определить, разошлись ли зависимости или нет.

Вы не сможете чтобы найти его в исходном коде Elixir / Mix , потому что он делегирует внешнему преобразователю , что зависит от типа зависимости. В случае зависимости типа :hex удаленный - это Hex.RemoteConverger.

Тем не менее, это значение находится под полной Hex.RemoteConverger ответственностью, mix ничего не знает об этом . Если вы хотите предоставить другой источник зависимости для mix, вы можете реализовать @behaviour Mix.RemoteConverger, и после процесса конвергенции зависимостей ваша реализация преобразователя будет вызываться с любыми аргументами, которые вы хотите.

...