Skip to content

fix(env): export dest 末尾 / のファイル名自動補完 (#24)#25

Open
takemi-ohama wants to merge 2 commits into
mainfrom
feature/PLAN03-2-dest-filename-completion
Open

fix(env): export dest 末尾 / のファイル名自動補完 (#24)#25
takemi-ohama wants to merge 2 commits into
mainfrom
feature/PLAN03-2-dest-filename-completion

Conversation

@takemi-ohama
Copy link
Copy Markdown
Contributor

概要

devbase env export s3://bucket/prefix/ のように 末尾 / の dest を指定したとき、ファイル名部分が空のオブジェクトが作られていた問題を修正する (#24)。

aws s3 cp の慣習に合わせて、dest が「ディレクトリ的」な場合は既定ファイル名 (devbase-env-<TS>.dbenv / .dbenv.tar.gz) を自動補完する。

関連 Issue

変更点

  • lib/devbase/env/io_export.py
    • _default_filename() / _complete_dir_dest() を追加
    • dest が明示指定されたケースでも「ディレクトリ的」(S3 URI 末尾 / / ローカル既存ディレクトリ / 末尾 /) なら既定ファイル名を append する
    • 補完したパスは INFO ログで報告する
  • tests/cli/test_env_export.py
    • _complete_dir_dest の単体テスト 7 件 (S3 末尾 / 補完 / S3 フルキー回帰 / ローカル既存ディレクトリ補完 / ローカル末尾 / 補完 / 通常ファイル非補完 / stdio 非補完 / 平文 .dbenv.tar.gz サフィックス)
    • end-to-end テスト 1 件 (ローカルディレクトリ指定で実際に export → 1 ファイルが生成され復号できる)

動作確認

  • 既存テスト全パス (178 件)
  • 追加テスト 8 件パス
  • 手動: devbase env export s3://.../prefix/ で末尾 / 補完を実機確認 (任意)
  • フルキー指定時の従来挙動が回帰していないことをテストで担保

補足

issue 「想定される対応」の案 1 (ファイル名自動補完, aws s3 cp 互換) を採用。
案 2 (明示エラー) ではなく案 1 を採った理由は plan ファイル issues/PLAN03-2.md に記載。

`devbase env export s3://bucket/prefix/` のように末尾 `/` の dest を指定したとき、
ファイル名部分が空のオブジェクトが作られていた問題を修正する。
`aws s3 cp` 互換でディレクトリ的 dest に既定ファイル名 (`devbase-env-<TS>.dbenv`)
を自動補完する。

- S3 URI 末尾 `/`: prefix にファイル名を append
- ローカル既存ディレクトリ / 末尾 `/`: ディレクトリ配下にファイルを生成
- それ以外 (フルキー / 通常ファイルパス / stdio `-`) は従来通り

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copy link
Copy Markdown
Contributor Author

@takemi-ohama takemi-ohama left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 1 | codex | APPROVE

修正必須の指摘事項はありません。

Copy link
Copy Markdown
Contributor Author

@takemi-ohama takemi-ohama left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 1 | gemini | REQUEST_CHANGES

ファイル名補完のロジックについて、結合度の高い実装とテストアサーションの改善点を指摘しました。
ご確認のほどよろしくお願いします。

Comment thread lib/devbase/env/io_export.py
Comment thread tests/cli/test_env_export.py
Copy link
Copy Markdown
Contributor Author

@takemi-ohama takemi-ohama left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 1 | gemini | REQUEST_CHANGES

PLAN03-2 のファイル名自動補完、ご対応ありがとうございます。
S3 URI とローカルパスの双方で末尾 / をディレクトリとして扱う修正、およびユニットテストの追加を確認しました。
1点だけ、可読性向上のための軽微な修正提案をインラインコメントに記載しましたので、ご確認いただけますと幸いです。

Comment thread lib/devbase/env/io_export.py
- `_generate_default_filename` を新設し `_default_dest` / `_default_filename`
  の結合を解消 (major / 設計)
- `_complete_dir_dest` の `endswith` をタプル形式に統一 (minor / 可読性)
- `test_complete_dir_dest_local_trailing_slash` を `os.sep` 完全パス比較
  (`==`) に変更 (minor / テスト)
Copy link
Copy Markdown
Contributor Author

@takemi-ohama takemi-ohama left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 2 | codex | APPROVE

重大な修正提案はありません。

Copy link
Copy Markdown
Contributor Author

@takemi-ohama takemi-ohama left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 2 | gemini | APPROVE

今回の変更内容は、コードの結合度を下げ、テストの堅牢性を高めるものであり、全体として良い改善だと評価します。

1点、将来のメンテナンス性を考慮し、Docstring 内の PR 番号への言及を削除することを提案します。

"""既定ファイル名 (prefix なし) を生成する共通ヘルパー。
`_default_dest` / `_default_filename` の両方から呼ぶことで結合度を下げる
(PR #25 cross-review round 1 gemini 指摘)。"""
# microsecond まで含めて衝突を回避する (PR #22 codex round 3 指摘)
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[minor / 可読性] Docstring 内の PR 番号やレビューラウンドへの言及は、将来的なメンテナンス性を考慮すると削除する方が望ましいです。コードやコメントは、それ自体で完結して理解できるように記述されているのが理想です。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

env export: S3 dest が '/' 終端のときファイル名が補完されず空キーオブジェクトが作られる

1 participant