最近のGNU ELPAリポジトリ事情
なんかめちゃくちゃ変わってた。
GNU ELPA
GNU Emacs公式のパッケージアーカイブ。package-archives変数にもデフォルトで指定されている(が、MELPAにほぼお株を奪われている)。 GNU ELPAリポジトリに最近多くのコミットがなされ、管理形式が結構変わった(使いやすくなった)。
多分ほぼ全てStefan Monnierさんによる改修。実装の鬼。
makeによるパッケージ毎のビルドが可能になった。ドキュメントも整備されていてわかりやすい。
GNU ELPA リポジトリ
mainブランチ
masterではなくmainブランチがデフォルトブランチになった。
改修でmasterの歴史がぐちゃぐちゃになったため(?)。
elpa-configやelpa-packagesファイルを含むが、このブランチ自体は管理者用Elispを含まない。
GNU ELPA READMEというタイトルのREADMEファイルを含む。
git worktree addでelpa-adminブランチをadminディレクトリに置くためだけのMakefileを含む。
elpa-adminブランチ
管理者用Elispファイルelpa-admin.elとそれを使ってビルド、フェッチなどを行うGNUmakefileを含む。
GNUmakefileはmainブランチのMakefileによってリポジトリのルートにシンボリックリンクが貼られる。
GNU MakeはMakefileよりGNUmakefileを優先するため、リポジトリルートでmakeすればGNUmakefileのターゲットを実行できる。
ELPA-Admin READMEというタイトルのREADMEファイルとNonGNU ELPA READMEというタイトルのREADME.orgファイルを含む。
このREADMEファイルの後半は現在では古い内容となっている(らしい)。
externals/***ブランチ
GNU ELPAが提供する全てのパッケージはexternals/***な個別のブランチで管理されている。
以前はmasterブランチのpackagesディレクトリ下に置かれているパッケージが多かったが、改修後は全てexternals/***ブランチに置かれるようになった。
mainブランチのREADMEには「『externals/***』というブランチ名は歴史的事情による」と書かれている。
elpa-configのbranch-prefixに"externals/"指定。
GNU ELPA リポジトリのmakeの使い方
make fetch/***
GNU ELPAリポジトリにあるexternals/***ブランチをフェッチする。
make build/***
packagesディレクトリ下の***パッケージをpackage.el用のファイルにビルドしてarchive/およびarchive-devel/に出力する。packagesディレクトリ下に***パッケージがなかったら自動でgit worktree addする。
make packages/***
packagesディレクトリ下の***パッケージをその場 (in-place) でビルドする(バイトコンパイル、-pkg.el、-autoloads.el生成)。packagesディレクトリ下に***パッケージがなかったら自動でgit worktree addする。
package-directory-list変数にpackagesディレクトリを追加することで、ローカルでGNU ELPAパッケージを管理可能。
make sync/***
パッケージのアップストリームの更新を取得して、GNU ELPAリポジトリのexternals/***ブランチにpushする。
ちょっと試してみる
容量と速度を気にして--single-branchでcloneして試す。
code:shell
cd elpa
git fetch origin elpa-admin:refs/remotes/origin/elpa-admin
make
make fetch/leaf
make build/leaf
archive-devel/とarchive/にビルドされたパッケージができた。
GNU-devel ELPA
多分Stefan Monnierさんが実験で置いているパッケージアーカイブ。
改修後のelpa-admin.elはリリース版(archive/ 下に出力)とdevel版(archive-devel/ 下に出力)の2つをビルドして出力するが、多分archive-develに出力された方を置いてるんだと思う。
余談だがdevel版のビルドはdateコマンドに依存しているため、dateコマンドのフラグの仕様が異なるmacOSだとビルドに失敗する。
パッケージのビルド時、ElispファイルでVersionが0に指定されているものはdevel版のみビルドされる。
NonGNU ELPA
copyright assignment要らずで貢献しやすいように(?)ということで最近できた。
devel/ はない模様。
NonGNU ELPA リポジトリ
歴史的事情がないおかげか、branch-prefixはelpa/***になっている。
mainブランチ
README.orgを含む。
Makefileではelpa.gitのelpa-adminをフェッチして共通のelpa-admin.elを使うようにしているようだ。
emacs-develメーリングリストを見た感じ「俺のパッケージをNonGNU ELPAに入れてくれ」っていうのはまだない気がする。
request.elはkiwix.elをGNU ELPAに入れるタイミングで追加された(kiwix.elはrequest.elを依存に持つ)。
他のパッケージはStefanさんの独断で追加された?
README.orgには「パッケージ開発者はNonGNU ELPA上バージョンをメンテする義務はない」みたいに書かれている。