Cabal 2.4以降ではsource-repository-package
stanzaによってGitHubなどにあるレポジトリから直接パッケージをインストールできるようになっている。
例えば、cabal.projectファイルに以下のように記述する。
source-repository-package
type: git
location: https://github.com/brendanhay/amazonka
tag: 0ccede621e56fb6f240e4850e205cde82d0e4a4b
subdir: lib/amazonka lib/amazonka-core lib/services/amazonka-sts
(なお、subdirに複数のディレクトリを指定するには cabal-install >=3.2.0.0 が必要らしい)
これによってamazonkaパッケージをGitHubレポジトリから直接インストールできる。
ただし、このやり方では何かにつけてcabalがレポジトリのフルクローンをとるので、ものによっては膨大なダウンロードが発生してしまう。
これに対するworkaroundとしては、いったんローカルファイルシステムにshallow cloneをとっておいて、source-repository-package
にはそのshallow cloneを指定するという手がある。
上記の例なら、まず以下のように2.0.0-rc1タグのスナップショットだけをローカルにクローンしておき、
$ cd /path/to/repo
$ git clone -b 2.0.0-rc1 --depth 1 --no-tags https://github.com/brendanhay/amazonka amazonka-2.0-rc1
cabal.projectにはローカルのGitレポジトリを指定する。
source-repository-package
type: git
location: file:///path/to/repo/amazonka-2.0-rc1
tag: 0ccede621e56fb6f240e4850e205cde82d0e4a4b
subdir: lib/amazonka lib/amazonka-core lib/services/amazonka-sts
(試していないが、git cloneコマンドには--bare
オプションをつけてもよかったかも)
参考: