Использование флага --reinstall с cabal-dev - PullRequest
3 голосов
/ 17 сентября 2011

Я работаю над библиотекой wxHaskell и хочу отделить свою работу по разработке от стабильного wxHaskell от хакерской атаки. Я использую cabal-dev следующим образом:

  1. Я получил источник для wxHaskell от darcs;
  2. Поскольку wxHaskell состоит из трех компонентов , я использовал cabal-dev add-source для добавления каждого из них (wx, wxcore, wxdirect);
  3. Затем я смог установить в локальную библиотеку пакетов песочницы, выполнив cabal-dev install wx, как и ожидалось, зависимости были обнаружены, и все было собрано и установлено.
  4. Наконец, я успешно запустил свой тестовый код с помощью ghc -package-conf, чтобы указать местоположение изолированной базы данных пакета.

Проблема возникает, когда я делаю изменения в исходном коде wxHaskell. Чтобы построить и установить обновленный код, я должен использовать cabal-dev install --reinstall, что имеет смысл, поскольку я не увеличиваю номер версии; происходит сборка, и я вижу «Установка библиотеки в ...» и «Регистрация ...», но внесенные в код изменения отсутствуют в перекомпилированной библиотеке «песочницы».

В настоящее время у меня есть обходной путь: удалить библиотеку cabal-dev и повторять процесс каждый раз, когда я хочу восстановить.

Ответы [ 2 ]

2 голосов
/ 20 сентября 2011

ОБНОВЛЕНИЕ: cabal-install> = 1.18 поддерживает песочницы и будет лучше поддерживаться, чем cabal-dev в будущем. Cabal-install также лучше поддерживает использование add-source с песочницами. Вот описание новых возможностей песочницы в cabal-install: http://coldwa.st/e/blog/2013-07-30-Cabal-sandbox.html

Старый ответ:

Как вы обнаружили, add-source не предназначен для использования с активно меняющимися проектами. Я не уверен, что и там есть хорошее решение - сложно отследить местоположение проекта add-source (по крайней мере, для этого не существует существующей инфраструктуры), и я не уверен, что это всегда правильная вещь.

Другой рабочий процесс может помочь вам лучше - просто используйте cabal-dev install, указывая на песочницу, которую вы хотите использовать для дальнейшей разработки. Последние версии набора инструментов Cabal (под которым я подразумеваю Cabal, cabal-install и cabal-dev) допускают такие вещи:

$ ls 
wx        wxcore          wxdirect
$ cabal-dev install --sandbox=<path-to-some-sandbox> ./wx ./wxcore ./wxdirect
...

(Примечание: я не проверял это с WX - могут возникнуть перегибы, о которых я не знаю!)

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

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

Я не утверждаю, что это идеал;) но я думаю, что это лучше, чем удалять песочницу каждый раз.

1 голос
/ 20 сентября 2011

После некоторого расследования я могу подтвердить, что это является результатом моего недопонимания в отношении использования add-source, как подробно описано в разделе «Использование локальной песочницы» раздела README , который дан здесь ( strong был добавлен мной самостоятельно и указывает причину моего недопонимания):


Cabal-dev также позволяет использовать не выпущенные пакеты, как если бы они были на взломе с cabal-dev add-source.

Например, пакеты linux-ptrace и posix-waitpid были только недавно загружен в хакер. Ранее, cabal-dev использовался для сборки приложения, которые зависят от этих двух пакетов:

$ ls
linux-ptrace/  myProject/  posix-waitpid/
$ cd myProject
$ cabal-dev add-source ../linux-ptrace ../posix-waitpid
$ cabal-dev install

Обратите внимание, что cabal-dev add-source принимает список местоположений источника.

Однако будьте осторожны, , поскольку добавленные пакеты не являются привязаны к их исходным местоположениям больше. Изменения в linux-ptrace источник в приведенном выше примере не будет использоваться myProject, если пользователь не выдаст cabal-dev add-source с путь к источнику linux-ptrace снова . Это похоже на cabal install шаг, который вы можете сделать сейчас, чтобы позволить проекту использовать изменения в зависимости.

...