Что означает Кабала, когда говорит: «Следующие пакеты, скорее всего, будут повреждены при переустановке» - PullRequest
3 голосов
/ 09 мая 2020

Я видел это сообщение пару раз при запуске cabal v1-install с предложением использовать --force-reinstalls для установки в любом случае. Поскольку я не так много знаю о клике, я не уверен, почему пакет сломался из-за переустановки. Не мог бы кто-нибудь рассказать мне предысторию этого сообщения?

1 Ответ

3 голосов
/ 09 мая 2020

Примечание для будущих читателей: это обсуждение исторических вопросов. Для практических целей вы можете спокойно игнорировать все это, если используете Cabal 3.

Проблема связана с транзитивными зависимостями. Например, предположим, что у нас установлены следующие три пакета в указанных c версиях:

  • A-1.0;
  • B-1.0, что зависит от A; и
  • C-1.0, который зависит от B, но не явно от A.

Затем мы установим A-1.1, который, казалось бы, будет работать нормально:

  • A-1.1 будет установлено, но более старая A-1.0 версия будет сохранена исключительно для других пакетов, созданных с ее использованием;
  • B-1.0 сохранит используя A-1.0; и
  • C-1.0 будет продолжать использовать B-1.0.

Однако возникнут проблемы, если мы по какой-либо причине попытаемся переустановить B-1.0 (в отличие от скажем, обновление до B-1.1):

  • A-1.1 и A-1.0 будут по-прежнему доступны для других пакетов, которые в них нуждаются;
  • B-1.0, однако, будут перестроены против A-1.1, поскольку невозможно сохранить вторую установку той же версии B; и
  • C-1.0, который был построен против замененного B-1.0 (который зависел от A-1.0), теперь будет сломан.

v1-install обеспечивал защиту от такая опасная переустановка. Использование --force-reinstalls отключит эту защиту.

Для подробного объяснения окружающих проблем см. Albert Y. C. Лая * Хранение и идентификация кабализованных пакетов (в частности, пример, который я здесь использовал, по сути является кратким изложением его следствия: раздел Pigeon Drop Con ).

Хотя Cabal 1 в своих более поздних версиях смогла в описанном выше сценарии обнаружить, что переустановка изменила B, даже несмотря на то, что номер версии остался прежним (что и сделало возможной защиту), он не мог одновременно использовать два варианта B-1.0. Cabal 3, с другой стороны, может это сделать, что устраняет проблему.

...