el-get-lock を入れて lock していこうと思ってたけど、 週に1つも lock されていかない感じだったのと 新しい PC を購入してそっちに Emacs を入れる時にバージョンが異なると嫌だなってことで まとめて lock することにした。
途中でちょっと力尽きているので、 何をやったか情報を残すことにした。
力尽き始めてから記録を残すことにしたので 結構記憶頼りである……。
https://github.com/mugijiru/.emacs.d/pull/84 あとでこれを見ながら lock 対応を進めていく。
最初はこのブログ記事に残そうと思ってたけど、 後から個人的に見返る分には GitHub の PR の方が楽な気もしたので 情報の本体はあっちに譲ることにした。
結果、ここの情報量がほぼゼロである。うける〜。
というのもアレなので、 実際にどういう作業をしたかを書くか。
作業内容
Git から取得しているパッケージの hash 値の取得
まず ~.emacs.d/el-get/*
について
el-get.lock の保持する形式と同じような感じで雑に HEAD の hash 値を取得した
#!/bin/sh cd ~/.emacs.d/el-get dirs=$(ls -d *) for dir in $dirs do checksum=$(cd $dir && git rev-parse HEAD) echo "($dir :checksum \"$checksum\")" done
Git 管理下じゃなかったやつの確認
これで取得されたやつの中には Git リポジトリから拾って来たやつじゃないのも混じってた。
その場合は .emacs.d
の HEAD の値が取られてたので
そいつらはとりあえず無視することにした
Git 管理下っぽいものを1つずつ lock
残ったやつ1つずつに対し
M-x el-get-find-recipe-file
でレシピを確認し、
GitHub や Git から取得しているようであれば、
el-get.lock に手で追加した上で
M-x el-get-lock-checkout
を実行して
指定したバージョンでの再インストールされることを確認していった。
最初は各フォルダで git rev-parse HEAD
をして確認もしてたけど
何個かやってからは、el-get-lock を信用できそうということでそれはやめた。
request.el については取得した hash 値が消えてたのか、取得できなかったので 諦めて最新にした。
という感じで 90 個ぐらい lock した。しんどかった。
実は、最初はまとめてそれをやったんだけど、 それをすると実は Git 管理下じゃないのかなんかの理由で失敗するやつがたまにいて lock ファイルがおかしくなったりとかしていたので、 諦めて1個1個丁寧な作業をしたのであった……。
残りのものを1つずつチェック
emacswiki から入ってたやつ
そのまま el-get-lock-checkout すると最新が入る。 で、大体更新されてないので、そのまま入れちゃえ〜で済ませるパターンが多かった
CVS から入ってたやつ
emacs-w3m ですね。 とりあえず lock するのを一旦諦めた
http で入ってるやつ
diminish ですね。 諦めたけど、これも emacswiki と同様に Partial support なので 割り切って lock しても良かったかもしれない。
ただ Partial support で el-get-lock-checkout しても最新が入るようなので あまり意味がないかもしれない
MELPA から入ってたやつ
- lock を諦めたパターン
- lock したパターン
基本的に MELPA 経由だったのを GitHub から取得するようにしたやつ。 MELPA 経由と GitHub から取得するのが混じってると 時々同じパッケージがそれぞれからインストールされるという厄介なことになるので……。
- ファイル内のバージョン番号などから hash を特定したパターン
dumb-jump などが該当。 バージョン固定しないと心配だったのでそうしたけど ここに該当するパターンのやつは、割と最新にしても良さそうな雰囲気があったな……
vue-mode とかはこれのために recipe まで書いた……。
(el-get-bundle AdamNiederer/vue-mode)
だけだと依存関係をどう解決するか不明だったので それなら自分で recipe 書いた方がいいや〜って。 - 最新化しちゃったパターン
最新入れても問題なさそうとか、使ってるのが最新だったからってのが大体こっち。 helm に関しては多分色々ミスって事故で最新になった。
- ファイル内のバージョン番号などから hash を特定したパターン
ELPA から入ってたやつ
rainbow-mode などが該当。 こいつらは lock もできないわ、Git からも取りにくいわでちょっと諦めた。 けど、el-get-lock が emacsmirror をサポートしているので、 そっちを使うようにしたら解決しそう。
結果
100個以上のパッケージが lock 対象になった。 https://github.com/mugijiru/.emacs.d/pull/84/files#diff-8e0ba40dc55379d834acec2b2ae92e67
あとは今回対象外となったパッケージを倒したい