18:41:07
icon

Use `cp -c` when copying files by tesaguri · Pull Request #17373 · Homebrew/brew · GitHub 
github.com/Homebrew/brew/pull/
マージされていた。macOSにおいてファイルのコピーをCoWで行うようにして高速化&ストレージに優しくするパッチ

Web site image
Use `cp -c` when copying files by tesaguri · Pull Request #17373 · Homebrew/brew
18:46:30
icon

どうせならRubyの`FileUtils`がmacOSでも`clonefile(2)`を使うようになってくれると嬉しいよね(Linuxでは既にCoWらしい)という話になって、メンテナがシュッと上流へのパッチを作り始めていて腕力を感じるなどした。それはそれとしてHomebrewはCaskのファイルをコピーで`sudo`が必要なときに`cp`コマンドを呼び出すから`FileUtils`がCoWに対応してもこのパッチの意義は残るのだけど

18:51:28
2024-06-13 18:42:39 rinsukiの投稿 rinsuki@mstdn.rinsuki.net
icon

Homebrewでコピーってどこでしてるんだろ (基本的にシンボリックリンクな印象があった)

18:53:38
icon

これは私もコードを調べて意外に思った点なのだけど、Homebrewは例えばbottleのアーカイブの展開先の一時ディレクトリからkegへpourするときなどに割と`mv`でなく`cp`相当の処理をしていることが多いようだった。理由は特に調べていないけど

19:07:18
2024-06-13 18:45:50 らりお・ザ・何らかの🈗然㊌ソムリエの投稿 lo48576@mastodon.cardina1.red
icon

cp --reflink=always は知ってるけど -c は初耳だぞ!? と思って Linux で man cp したけどやっぱりなかった。 Mac 版限定なのか

19:08:03
icon

Sonomaより前のmacOSの`cp -c`がcoreutilsの`cp —reflink=auto`でなく`cp --reflink=always`相当の挙動(CoWに出来ない場合にエラーになる)だったので、私もはじめはそれ(とLinuxbrew対応)を理由にcoreutils formulaがインストールされている場合にcoreutilsの`cp --reflink=auto`を使う実装にしていたのだけど、メンテナからのフィードバ--ックでmacOS Sonoma以降でのみ`cp -c`を使う実装にしたという経緯がある

19:12:56
icon

最新のメジャーバージョンであるSonomaにのみ対応するというのは思い切った判断だなと思ったけど、まあパフォーマンスの改善のための処理でしかないし、古いバージョンの対応のためのコードがいつか負債になることを考えればそれもそうかと思うなどした

19:24:16
icon

Vimのdein.vimプラグインについても`dein#recache_runtimepath`に時間がかかるので手元では同様に`gcp --reflink=auto`を使うようにパッチを当てたものを使っているけど、こちらについてはHomebrewと違って`cp`の実装を真面目に判別しようとすると泥沼になりそうなのでupstreamは出来なそうだなと思っている

19:38:43
icon

github.com/Homebrew/brew/commi
そういえば「レビューが終わったらコミット履歴を整理するよ」と伝えていたのだけど、結局approve即mergeされてしまい、とっ散らかったコミット履歴がそのままmasterに入ってしまったな……。まあメンテナがそれで良いなら良いのだけど