Skip to content

snapshot list が場所の不正なエントリの中を読み、backups/ の外のサイズを表示する #332

Closed

Description

@takemi-ohama

何が起きるか

devbase snapshot list が、snapshot.yml の名前の不正なエントリ(../outside・backups/ の外を指すシンボリックリンク)でも backups/<name> を見に行き、backups/ の外のディレクトリのサイズを表示する。読むだけで、書き換え・削除はしない。rotate は同じエントリを #269 で「場所が不正」として一覧から外すので、list と振る舞いがそろっていない。

list() は devbase status(lib/devbase/commands/status.py:203)と TUI の選択(lib/devbase/tui/actions_snapshot.py:71)も呼ぶ。status は例外を握りつぶすため、下の 2 つの例外ではスナップショットの節が黙って消える。TUI は一覧での選択をやめ、名前の自由入力に切り替わる。

ファイルを指すシンボリックリンクのエントリでは NotADirectoryError、name の無いエントリでは KeyError: 'name' で list そのものが止まる。rotate はこの 2 つも「list が開けないエントリ」として外す(tests/snapshot/test_manager_series.py::test_cli_rotate_removes_entries_that_list_cannot_open)。

原因は SnapshotManager.list()(lib/devbase/snapshot/manager.py:294)が self.backups_dir / snap['name'] をそのまま iterdir() し、rotate が使う _safe_snap_dir の判定を通さないことである。

再現

  1. snapshot.yml に name: ../outside のエントリを足す
  2. <DEVBASE_ROOT>/outside/ にファイルを置く
  3. devbase snapshot list → ../outside の行に外側のディレクトリのサイズが出る

main = cc71c3c(2026-10-01)で SnapshotManager.list() を直接呼び、3 つの症状をすべて再現した(../outside で外側のサイズ 12345 バイトを返す・ファイルを指すリンクで NotADirectoryError・name の無いエントリで KeyError: 'name')。

見つけた場所

v4.0.0 のリリース後テスト(#255 / #269 の確認、dind に隔離した docker の上)。

受け入れ条件(案)

  • list が場所の不正なエントリの中を読まず、rotate と同じ判定で警告して外す
  • name の無いエントリ・ファイルを指すリンクのエントリでも、list が止まらずに警告して外す
  • devbase status と TUI の選択でも、不正なエントリを外した一覧が出る

直す場所

項目 内容
現れている場所 list() の呼び出し元 3 つ: lib/devbase/commands/snapshot.py:101 の _snapshot_list、lib/devbase/commands/status.py:203、lib/devbase/tui/actions_snapshot.py:71
直す場所 lib/devbase/snapshot/manager.py の SnapshotManager。エントリを検証して不正なものを外す段を 1 つにし、list() と rotate() が共有する(手: 統合 consolidate_duplication)

関連: #269 #255 #333(#333 は同じ SnapshotManager の検証の段と rotate() の戻り値を触るため、一緒に着手すると差分が重ならない)

進行

モード: —

  • 要求と受け入れ条件
  • 作業場所の用意 — 2026-10-03 20:05
  • 設計
  • 素材の収集と出典の確定
  • ドキュメント再構成
  • ドキュメントレビュー
  • 計画 — 2026-10-03 20:05
  • 実装 — 2026-10-03 20:18
  • 構造改善 — 2026-10-03 20:43
  • 実装レビュー — 2026-10-03 20:58
  • 完了判定 — 2026-10-03 20:22
  • Pull Request — 2026-10-03 20:24
  • 確定仕様化
  • 後片付け
  • 配布
  • 体裁レビュー
  • リリース後テスト
  • 振り返り — 2026-10-05 09:34
  • 棚卸し

振り返り: #421 (comment)

Activity

  1. added a commit that references this issue on Oct 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions