@@ -66,71 +66,59 @@ def _dispatch(devbase_root: Path, subcommand: str, **attrs) -> int:
6666# 名前選択 (registry から一覧を取得して選ばせる)
6767# ---------------------------------------------------------------------------
6868
69- def _installed_plugin_names (devbase_root : Path ) -> list [str ]:
70- """導入済み plugin 名の一覧を registry (plugins.yml) から取得する。"""
71- from devbase .plugin .registry import PluginRegistry
72-
73- try :
74- return [p .name for p in PluginRegistry (Path (devbase_root )).list_installed ()]
75- except DevbaseError as e :
76- logger .error ("%s" , e )
77- return []
78-
69+ def _registry_names (devbase_root : Path , lister : str ) -> list [str ]:
70+ """registry (plugins.yml) から名前一覧を取得する。
7971
80- def _repository_names (devbase_root : Path ) -> list [str ]:
81- """登録済みリポジトリ名の一覧を registry (plugins.yml) から取得する。"""
72+ ``lister`` は ``PluginRegistry`` の一覧メソッド名 (``list_installed`` /
73+ ``list_repositories``)。取得に失敗したら案内して空リストを返す。
74+ """
8275 from devbase .plugin .registry import PluginRegistry
8376
8477 try :
85- return [r .name for r in PluginRegistry (Path (devbase_root )).list_repositories ()]
78+ registry = PluginRegistry (Path (devbase_root ))
79+ return [item .name for item in getattr (registry , lister )()]
8680 except DevbaseError as e :
8781 logger .error ("%s" , e )
8882 return []
8983
9084
91- def _select_name (message : str , names : list [str ], * , all_label : str | None = None ):
92- """名前一覧から 1 件選ばせる共通ヘルパ。
85+ def _select_name (message : str , names : list [str ], * ,
86+ all_label : str | None = None , empty_hint : str = "対象がありません。" ):
87+ """名前一覧から 1 件選ばせる共通ヘルパ。対象が無ければ案内して ``_ARG_CANCEL``。
9388
9489 ``all_label`` 指定時は「全対象」(value="") を先頭に置く。選択メニューの ``None``
9590 (Ctrl-C → 全体中止) と衝突させないため空文字を番兵にし、``None`` への変換は
9691 呼び出し側で行う (_select_build_image と同じ流儀)。
9792
9893 戻り値: 名前 (``str``) / ``""`` (all_label 選択 = 全対象。呼び出し側で ``None``
9994 へ変換) / ``None`` (Ctrl-C → 全体中止を呼び出し元へ伝搬) / ``_ARG_CANCEL``
100- (Esc・← → サブメニューへ戻る)。
95+ (Esc・← → サブメニューへ戻る、または対象が 1 件もない )。
10196 """
102- choices : list [tuple [str , str ]] = []
103- if all_label is not None :
104- choices .append ((all_label , "" ))
97+ if not names :
98+ logger .info ("%s" , empty_hint )
99+ return _ARG_CANCEL
100+ choices = ([(all_label , "" )] if all_label is not None else [])
105101 choices += [(n , n ) for n in names ]
106- sel = menu .select (f"{ message } { menu .HINT_BACK } :" , choices , back = True , search = False )
107- if sel is None :
108- return None # Ctrl-C → 全体中止 (ナビ規約)
109- if sel is menu .MENU_BACK :
110- return _ARG_CANCEL # Esc/← → サブメニューを再表示
111- return sel # "" = 全対象 (呼び出し側で None へ変換)
102+ return flow .back_as_cancel (menu .select (
103+ f"{ message } { menu .HINT_BACK } :" , choices , back = True , search = False ))
112104
113105
114106def _select_installed_plugin (devbase_root : Path , message : str , * ,
115107 all_label : str | None = None ):
116108 """導入済み plugin から 1 件選ばせる。対象が無ければ案内して ``_ARG_CANCEL``。"""
117- names = _installed_plugin_names (devbase_root )
118- if not names :
119- logger .info ("導入済みの plugin がありません。"
120- "`plugin install` で導入してください。" )
121- return _ARG_CANCEL
122- return _select_name (message , names , all_label = all_label )
109+ return _select_name (
110+ message , _registry_names (devbase_root , "list_installed" ),
111+ all_label = all_label ,
112+ empty_hint = "導入済みの plugin がありません。`plugin install` で導入してください。" )
123113
124114
125115def _select_repository (devbase_root : Path , message : str , * ,
126116 all_label : str | None = None ):
127117 """登録済みリポジトリから 1 件選ばせる。対象が無ければ案内して ``_ARG_CANCEL``。"""
128- names = _repository_names (devbase_root )
129- if not names :
130- logger .info ("登録済みのリポジトリがありません。"
131- "`plugin repo add` で登録してください。" )
132- return _ARG_CANCEL
133- return _select_name (message , names , all_label = all_label )
118+ return _select_name (
119+ message , _registry_names (devbase_root , "list_repositories" ),
120+ all_label = all_label ,
121+ empty_hint = "登録済みのリポジトリがありません。`plugin repo add` で登録してください。" )
134122
135123
136124# ---------------------------------------------------------------------------
0 commit comments