Repository navigation
#452 を実装する(スプリント m8e) - #494
Merged
Merged
Conversation
R9・R10 で _devbase_completions の分岐を関数へ移す前に、既存のテストが 見ていない分岐(env のフラグ・plugin と snapshot の引数・container scale・ プラグイン名とリポジトリ名など)の候補を、変更の前のコードで通る形で縛る。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- R1: cmd_env_keygen の中の DevbaseError の取り込み直しを消す - R2: _aws_plan_for_selection の選んだプロファイルの計画を先頭で 1 回だけ組む - R3: 丸ごとの計画を _aws_whole_plan に置き、_aws_sync_plan と _aws_plan_for_unregistered が呼ぶ - R5: manager.py に CONTAINER_HOME を置き、VS Code Server の 2 つの定数と compose.py の _DEPRECATED_TARGET をそれから作る(値は同じ) - R9: devbase_root の解決を _devbase_resolve_root に置く - R10: _devbase_completions を語の位置の振り分けにし、位置 2〜4 の分岐を グループごとの関数へ移す(候補は同じ) tests/ は変えていない。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- R11: 補完を実行する補助を tests/cli/conftest.py の run_bash_completion・ bash_complete に置き、3 つのファイルが使う - R12: DEVBASE_MANAGED を tests/volume/conftest.py へ移す(値は同じ) - R13: _Handler.do_GET を拒否と注入の _refuse_read と、応答の組み立ての _read_secret に分ける(段の順は同じ) - R14: RUN ブロックへ分ける手順を dockerfile_parse.run_blocks に置く - R15: Docker とイメージの有無を調べる手順を docker_images.image_unavailable に置き、4 つのファイルが接尾(建て方の案内)だけを渡す(飛ばす理由の文は同じ) テスト関数の assert は変えていない。補助の中の assert は文字列のまま移した。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
スプリント m8e のブランチへ、#452 の作業を集めました。内容はリファクタリングです。env sync の AWS の計画・ホームのパス・bash の補完で重なっていた処理と、テストの補助で重なっていた処理を、それぞれ 1 か所にまとめました。あわせて bash の補完の各分岐が出す候補を、現在の内容でテストに固定しました。
利用者向けの変化
移行の手順
変更の要点
tests/containers/docker_images.pyとtests/containers/dockerfile_parse.pyを追加したtests/conftest.pyとtests/volume/conftest.pyを整理したdo_GETを分割したテスト
issues/issue-452-design.mdに名前の出るテスト 34 件が、すべて HEAD にあることを確認設計と違う点
15 件の扱い
設計(
issues/issue-452-design.md)のとおり、直したのは 11 件(R1・R2・R3・R5・R9〜R15)、直さなかったのは 4 件(R4・R6・R7・R8)。設計から「直す / 直さない」を移した件は無い。check_group_option--group に使えない名前です)と終了コード 2 はコマンドの層の知識。呼ぶ先へ移すとコマンドの文言が設定の層へ入る(要求の理由 1)_mask_env_none_ENV_MASKERSの 4 つの関数の名前(_mask_env_<形>)と引数の揃いを保つ(要求の理由 2)SnapshotManager.listetc/_devbaseのprofiletest_name_context_consistency.pyの_zsh_branchがcaseの入れ子を字面で辿るため、関数へ移すとテストを変えずには通らない(設計の決定 5)コミットの分け方(設計の決定 13)
tests/c6ac5fd588c56e66b83b3兆候が消えたかの測定
Python は対象の 4 つのファイル(
lib/devbase/commands/env.py・lib/devbase/volume/manager.py・lib/devbase/volume/compose.py・tests/conftest.py)の全関数を測った。行数は
astのlineno〜end_lineno、C901 はuvx ruff check --select C901 --config 'lint.mccabe.max-complexity=0'、認知的複雑度はuvx complexipy --plain -i。値が変わった関数は次のとおりで、ほかの関数の値は変わっていない(上がった関数は無い)。
env.py#cmd_env_keygenenv.py#_aws_sync_planenv.py#_aws_plan_for_selectionenv.py#_aws_plan_for_unregisteredenv.py#_aws_whole_plan(新)tests/conftest.py#_Handler.do_GETtests/conftest.py#_Handler._refuse_read(新)tests/conftest.py#_Handler._read_secret(新)snapshot/manager.py#SnapshotManager.list(R7。直さない)重なりの数(
git grep -c -F、前は588c56e~1):env.pyのfrom devbase.errors import DevbaseError(先頭+関数の中)cmd_env_keygenの中の 1 つを消した。残る 2 つは前提 6 で扱わない)build_from_home(profiles).encode()_encode_aws_config_files, ALLlib/devbase/volume/の'/home/ubuntu…'の文字列の定義manager.CONTAINER_HOME)。3 つの定数の値は前と同じetc/devbase-completion.bashのcommand -v devbase 2>/dev/null_devbase_resolve_root)tests/cli/のCOMP_CWORD=を組むスクリプトtests/cli/conftest.py#run_bash_completion)tests/volume/のDEVBASE_MANAGED = {tests/volume/conftest.py)tests/containers/の RUN ブロックへ分ける手順dockerfile_parse.run_blocks)tests/containers/の docker とイメージを調べる手順docker_images.image_unavailable)bash の補完の関数の行数(関数名の行から
}の行まで、awkで数えた): 前は_devbase_completionsが 309 行。後は最大が_devbase_complete_subcommandsの 50 行で、どの関数も 60 行以下。_devbase_completions_devbase_complete_subcommands_devbase_complete_args_devbase_complete_project_args_devbase_complete_container_args_devbase_complete_env_args_devbase_complete_plugin_args_devbase_complete_snapshot_args_devbase_complete_after_args_devbase_complete_project_flags_devbase_complete_profile_flags_devbase_complete_plugin_after_args_devbase_resolve_root(新)_devbase_project_names・_devbase_complete_flags(変更なし)手で確かめたこと
/bin/bash(3.2.57)でも前後で同じbash -n etc/devbase-completion.bash・zsh -n etc/_devbaseが通る。etc/_devbaseは変えていないdevbase-base:latest、建て直していない。--entrypoint shellcheck -s bash)のetc/devbase-completion.bashへの指摘: 前 29 件(SC2207 28・SC2038 1)→ 後 29 件(同じ内訳)dockerをPATHから外した実行、docker infoだけ通りイメージの調べで失敗する偽のdockerを置いた実行(既定のイメージ名と、DEVBASE_TEST_BROWSER_IMAGE・DEVBASE_TEST_BASE_IMAGEで渡した名前)で、4 つのファイルのpytest -rsの理由の文が変更の前後で同じ。docker infoが失敗する偽のdockerでは「docker daemon へ繋がらない」で飛ばされるassertは変えていない(git diffのassertの行は、補助へ移したassert proc.returncode == 0, proc.stderrとassert blocks, "RUN が 1 つも見つからない"だけで、文字列は同じ)lib/devbase/volume/manager.pyの変更は先頭の定数の 2 つの hunk(CONTAINER_HOMEを足す・VSCODE_SERVER_TARGET/VSCODE_BIN_TARGETを作り直す)だけで、VolumeManager.__init__・ensure_volumesは触っていないenv -u DEVBASE_ROOT uv run --locked pytest tests/ -q: 4472 passed, 32 skipped(コミット 2 の時点と最後の時点の両方)uvx ruff check --select=E9,F63,F7,F82 lib: 通ったpython3 .github/scripts/proper_term_check.py)は「語の一覧が無いため飛ばした」と出た(~/.config/devbase/proper-terms.txtが無い)。検査したとは数えていないdevbase upは打っていない。base と派生のイメージは建て直していない設計と違えたところ
test_post_start_command.py・test_name_context_consistency.pyで、使わなくなったBASH_COMPLETIONの定数とos・subprocessの取り込みを消した。R15 の 4 つのファイルでも使わなくなったshutilの取り込みを消したDEVBASE_MANAGEDの説明の注記は、それを使う関数(user_env・_without_managed)の直上へ寄せたtest_completion.pyのtest_bash_completion_branches(68 件)とtest_bash_completion_plugin_repo_names(2 件。端末のpython3にyamlが無いときは飛ばす)として足したモード: standard / 通した工程: 実装 → 完了判定 → Pull Request
🤖 Generated with Claude Code