Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions docs/specifications/base-image-contents.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,10 @@ docker.sock を mount して docker を使う。DinD を前提に作られた唯
| 知らせの検査 | `tests/containers/test_entrypoint_dind_removed.py` | entrypoint を source して、知らせの出力と、触れてはならないコマンドを呼ばないことを固定する |

型(クラス)は持たない。Dockerfile の命令・設定ファイル・entrypoint のシェル関数だけで構成する。
Dockerfile を命令に分ける部品(`Instruction` / `parse`)は `tests/containers/dockerfile_parse.py` に
あり、Dockerfile の形を固定する検査が共通に使う。
Dockerfile を命令に分ける部品(`Instruction` / `parse`)と、`RUN` を行継続を含む 1 命令ずつに分ける `run_blocks` は
`tests/containers/dockerfile_parse.py` にあり、Dockerfile の形を固定する検査が共通に使う。建てたイメージの中身を
見る検査は、Docker とイメージが使えないときに飛ばす理由を `tests/containers/docker_images.py` の
`image_unavailable` から得る(Docker を起動するため、`dockerfile_parse.py` とは分けて置く)。

## 仕様

Expand Down
13 changes: 13 additions & 0 deletions docs/specifications/cli-argument-resolution.md
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,14 @@ bash(`etc/devbase-completion.bash`)は、道ごとの分岐が `_devbase_com
候補は旗の有無に依らない。直前の語が `--context` なら、どの分岐にも入る前に候補を空にして終える。
連想配列を使わず、macOS の bash 3.2 で動く。

bash の補完の入口 `_devbase_completions` は、語の位置(`cword`)だけで振り分ける。位置 1 はトップレベルのサブコマンド、
位置 2 は `_devbase_complete_subcommands`、位置 3 は `_devbase_complete_args`、位置 4 は `_devbase_complete_after_args`
へ渡し、位置 3・4 はさらにグループ(`project`・`container|ct`・`env`・`plugin|pl`・`snapshot|ss`)ごとの関数
(`_devbase_complete_project_args` など)へ分ける。どの関数も 60 行以下に収める。devbase のルート
(`${DEVBASE_ROOT:-…}`)は `_devbase_resolve_root` 1 か所で解決し、呼び出し元の `local devbase_root` へ直に入れる。
標準出力で返すと、コマンド置換で値の末尾の改行が落ちるためである。bash の補完のテストは、補完を実行する補助
(`tests/cli/conftest.py` の `run_bash_completion`・`bash_complete`)を共通に使う。

zsh(`etc/_devbase`)は、サブコマンドの分岐から `_arguments` を直接呼ばず、`_devbase_arguments <深さ>` を通す。
`_arguments` は `words[1]` だけをコマンド名として飛ばすため、そのまま呼ぶと `devbase up <TAB>` の `up` が 1 番目の
引数に数えられ、`'1:name:_devbase_project_names'` が利用者の引数を指さない。`_devbase_arguments` は `words` と
Expand All @@ -167,6 +175,11 @@ zsh(`etc/_devbase`)は、サブコマンドの分岐から `_arguments` を
すべての道に分岐を置く(トップレベルの `build`・`container up|down|rebuild`・`env token`・入れ子の
`profile up|down|list` も `*)` に落とさない)。

`project` と `container` の `profile` の分岐は、同じ形の `case` の入れ子を 2 か所に持つ。関数へ寄せないのは、一致テスト
(`tests/cli/test_name_context_consistency.py`)が `case` の見出しを字下げの深さで辿って `--context` の指定を探すため
である。関数へ移すと、`profile)` の本体が呼び出しの 1 行になり、`up|down|list)` の見出しが見つからなくなる。重なりは
約 10 行で、テストの辿り方を変える費用に見合わない。

#### zsh の補完の実行テスト

`tests/cli/test_zsh_completion_run.py`(補完の実行テスト)は、zsh を起動して `etc/_devbase` を補完として読み込み、
Expand Down
Loading
Loading