Зависимость пакета установки Haskell Stack от github

Можно ли установить версию пакета из github с помощью стека Haskell?

например в файле .cabal или stack.yaml, как я могу указать зависимость в репозитории / ветке / ревизии git?


person Abraham P    schedule 14.07.2016    source источник


Ответы (3)


Для стека ‹1,11:

В документации для раздела stack.yaml packages приведены примеры ссылки на более сложный пакет. локации.

packages:
- location: .
- location: dir1/dir2
- location: https://example.com/foo/bar/baz-0.0.2.tar.gz
- location: http://github.com/yesodweb/wai/archive/2f8a8e1b771829f4a8a77c0111352ce45a14c30f.zip
- location:
    git: [email protected]:commercialhaskell/stack.git
    commit: 6a86ee32e5b869a877151f74064572225e1a0398
- location:
    hg: https://example.com/hg/repo
    commit: da39a3ee5e6b4b0d3255bfef95601890afd80709

Затем добавьте extra-dep: true в запись package, чтобы stack не рассматривал код, который он втягивает, как что-то, над чем вы разрабатываете (например, не загружайте его в GHCi).

person R B    schedule 14.07.2016
comment
Этот ответ кажется устаревшим. Вы можете указать URL-адреса и пути к файлам в extra-deps - person Flip; 08.03.2018
comment
@Flip, не могли бы вы вставить ссылку на эту часть документа? - person danza; 09.05.2018
comment
Это на той же странице. docs.haskellstack.org/en/stable/yaml_configuration/ В этом разделе много примеров. Из документации: Дополнительные зависимости, которые представляют собой пакеты, предоставляемые локально поверх определения моментальных снимков доступных пакетов. Они могут поступать из Hackage (или альтернативного индекса пакета, который вы определили, см. Package-index), HTTP (S) или локального архива, репозитория Git или Mercurial или локального пути к файлу. - person Flip; 09.05.2018

Новый синтаксис для Stack> 1.7.1

Как прокомментировал @Flip, документы на docs.haskellstack.org уточнить новый синтаксис для вашего stack.yaml: (обратите внимание, что необходимо использовать полный хеш фиксации)

extra-deps:
- github: apolishch/prime_table
  commit: a510622a824af999a809191e8c959b8ea5fa8bdb
- github: apolishch/reactive-banana
  commit: 74bac0f86ed172f95bb6f6a31041992fc161cf79
  subdirs: reactive-banana

Для ясности: зависимости в вашем stack.yaml убедитесь, что пакеты (которых нет в Stackage) доступны, если бы они были нужны какому-то .cabal файлу в вашем проекте, на всякий случай.

Вам все равно нужно указать имя пакета в build-depends в вашем .cabal файле, чтобы сказать, что вы действительно зависите от пакета.

Обратите внимание, что не имеет значения, в какой ветке находится фиксация, и репозитории могут быть вилками. Когда пакет находится в подкаталоге, вы можете указать его, в противном случае он будет по умолчанию на верхнем уровне.

Синтаксис для стека> 1.6.0

extra-deps:
- github: [email protected]:apolishch/prime_table.git
  commit: a510622a824af999a809191e8c959b8ea5fa8bdb

[Edit] Я обнаружил, что иногда синтаксис из 1.7.1 не работает с сообщением об ошибке

C:\Users\username\AppData\Local\Programs\stack\x86_64-windows\ghc-8.4.3\lib/../mingw/bin\ar.exe: .stack-work\dist\7d103d30\build\objs-10648\libHSpackagename-0.1.0.0-DlGXqyeqb9MDn2z8KhgjVb.a: No such file or directory

и я решил это, используя синтаксис 1.6.0, хотя я использовал Stack 1.7.1. При использовании Travis это не удастся, потому что Travis, конечно же, не может клонировать через SSH без ваших ключей SSH. Но вы все равно можете использовать ссылку https как

extra-deps:
- github: https://github.com/apolishch/prime_table.git
  commit: a510622a824af999a809191e8c959b8ea5fa8bdb
person PHPirate    schedule 03.08.2018

В моем случае я хотел зависеть от вилки pandoc, указывая точную фиксацию. Это сработало, добавив в stack.yml следующее:

extra-deps: - archive: https://github.com/italia/pandoc/archive/1327c564cccf5dfa387a2956443990d9854c85cd.zip

Это будет работать с любым URL-адресом ветвью в Git. Я нашел свой URL-адрес, просмотрев файлы в момент фиксации и скопировав URL-адрес из кнопки «Загрузить ZIP».

Обратите внимание, что моя ветка имеет конкретную версию, более высокую, чем любая версия, которую Stack может получить от преобразователя. Я точно определяю версию в зависимостях Кабала. Если версия в этой ветке будет перекрываться с версией, доступной в индексе преобразователя, я не уверен, какая из них будет выбрана.

person danza    schedule 09.05.2018