LoginSignup
1
0

More than 1 year has passed since last update.

cabalでGitレポジトリから直接パッケージをインストールする際のダウンロード量を削減するためのworkaround

Posted at

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オプションをつけてもよかったかも)

参考:

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0