Skip to content

v1.16.0

Choose a tag to compare

@kan kan released this 24 Sep 08:42
· 15 commits to main since this release
3e278d2

Added

  • lib/doctor.sh にラベル列の幅を求める 2 つの関数を足した。どちらも現在の
    BOOCH_DOCTOR_LABEL_WIDTH と最長ラベルの大きいほうを返す。長さは printf の %-*s に合わせて
    バイト数で数える。節の前に BOOCH_DOCTOR_LABEL_WIDTH をこの値にすれば、節全体の状態列が揃う。
    • booch_doctor_labels_width label...: 任意のラベルの集合から求める
    • booch_doctor_symlinks_width "src|dest"...: booch_doctor_symlinks と同じ規則でラベルを
      組み立てて求める。ラベルの組み立て規則を利用側へ写さずに済む

Changed

  • lib/state.sh と lib/apt.sh で、外部プロセスの起動を減らした。挙動は変わらない(#18)。
    • _booch_state_file: id の符号化とパスの返却を printf -v にし、1 文字ごとの fork と、
      呼び出しごとのコマンド置換の fork をなくした
    • booch_state_changed: 記録を cat ではなく read で読む
    • booch_state_fresh / booch_apt_key_deadline: 現在時刻を date +%s ではなく
      printf '%(%s)T' -1 で取る。lib/state.sh は date に依存しなくなった

Fixed

  • booch_doctor_symlinks で、ラベル(dest の $HOME を ~ に短縮したもの)が
    BOOCH_DOCTOR_LABEL_WIDTH(既定 30)を超える行だけ状態の列が後ろへずれていた。関数内で幅を最長
    ラベルまで広げて描画する。広げた幅は関数を抜けると元に戻る(#16)。
  • booch_doctor_disk が、空き容量が閾値を下回りヒントを渡さなかったときに終了コード 1 を返していた。
    set -e の呼び出し側はここで止まっていた。
  • booch_sudo_stop が、キープアライブの子プロセスが既に無いと pkill の失敗で途中終了していた。
    set -e の呼び出し側では PID が残っていた。
  • テストフレームワーク(tests/lib.sh)が、テスト関数の途中の assert の失敗を見逃していた。
    if の条件の中でテストを実行していたため set -e が無効になり、最後の行の終了コードだけで合否を
    決めていた。これで隠れていた上の 2 件と、捕捉の仕方を誤っていたテスト 4 件を直した。