@@ -88,47 +88,36 @@ get_system_dir() {
8888 echo " $DOT_HOME /$installed_system "
8989}
9090
91- # Resolve module name (handles numeric prefixes like 00-, 01-)
92- resolve_module_path () {
91+ # Resolve script name (handles numeric prefixes like 01-50-mise )
92+ resolve_script_name () {
9393 local module=" $1 "
94+ local command=" $2 "
9495 local system_dir=" $( get_system_dir) "
95-
96- # First, try the module as-is
97- if [[ -d " $system_dir /$module " ]]; then
96+ local command_dir=" $system_dir /$command "
97+
98+ # First, try the module name as-is
99+ if [[ -f " $command_dir /$module " && -x " $command_dir /$module " ]]; then
98100 echo " $module "
99101 return 0
100102 fi
101-
102- # If module contains /, handle each part
103- if [[ " $module " == * /* ]]; then
104- local parent=" ${module%/* } "
105- local child=" ${module##*/ } "
106-
107- # Try with numeric prefix on child
108- for prefix in {00..99}; do
109- if [[ -d " $system_dir /$parent /${prefix} -${child} " ]]; then
110- echo " $parent /${prefix} -${child} "
111- return 0
112- fi
113- done
114-
115- # Try with numeric prefix on parent
116- for prefix in {00..99}; do
117- if [[ -d " $system_dir /${prefix} -${parent} /$child " ]]; then
118- echo " ${prefix} -${parent} /$child "
119- return 0
120- fi
121- done
122- else
123- # Try with numeric prefixes for top-level modules
124- for prefix in {00..99}; do
125- if [[ -d " $system_dir /${prefix} -${module} " ]]; then
126- echo " ${prefix} -${module} "
127- return 0
128- fi
129- done
103+
104+ # Try to find a script that ends with the module name (e.g., "mise" -> "01-50-mise")
105+ local found_script=" "
106+ for script in " $command_dir " /* ; do
107+ [[ ! -f " $script " || ! -x " $script " ]] && continue
108+ local script_name=$( basename " $script " )
109+ # Check if script ends with -$module
110+ if [[ " $script_name " == * -" $module " ]]; then
111+ found_script=" $script_name "
112+ break
113+ fi
114+ done
115+
116+ if [[ -n " $found_script " ]]; then
117+ echo " $found_script "
118+ return 0
130119 fi
131-
120+
132121 # Return original if no match found
133122 echo " $module "
134123 return 1
@@ -151,7 +140,7 @@ check_system_for_list() {
151140get_available_modules () {
152141 local command=" $1 "
153142 local modules=()
154-
143+
155144 # Get the installed system type
156145 local installed_system
157146 if [[ -n " ${INSTALLATION:- } " ]]; then
@@ -160,21 +149,19 @@ get_available_modules() {
160149 installed_system=$( head -n1 " $INSTALLATION_MARKER " )
161150 fi
162151 local system_dir=" $DOT_HOME /$installed_system "
163-
164- # Check if system directory exists
165- if [[ ! -d " $system_dir " ]]; then
152+ local command_dir=" $system_dir /$command "
153+
154+ # Check if command directory exists
155+ if [[ ! -d " $command_dir " ]]; then
166156 return
167157 fi
168-
169- # Find all modules with the given command script
158+
159+ # Find all executable files in the command directory
170160 # Use -perm for BSD find compatibility (macOS)
171161 while IFS= read -r -d ' ' script; do
172- local module_path=$( dirname " $script " )
173- # Get the full relative path from system_dir
174- local module_name=" ${module_path# $system_dir / } "
175-
176- modules+=(" $module_name " )
177- done < <( find " $system_dir " -name " $command " -type f -perm +111 -print0 2> /dev/null)
162+ local script_name=$( basename " $script " )
163+ modules+=(" $script_name " )
164+ done < <( find " $command_dir " -maxdepth 1 -type f -perm +111 -print0 2> /dev/null)
178165
179166 # Handle empty array to avoid unbound variable error
180167 if [[ ${# modules[@]} -gt 0 ]]; then
@@ -185,138 +172,204 @@ get_available_modules() {
185172# Run install command
186173cmd_install () {
187174 local module=" ${1:- all} "
188-
175+
189176 # Handle --list option
190177 if [[ " $module " == " --list" ]]; then
191178 check_system_for_list
192179 echo " Available modules for install:"
193180 get_available_modules " install"
194181 return 0
195182 fi
196-
183+
197184 check_system_setup
198185 init_logging " install"
199-
186+
200187 log_header " Installing: $module "
201-
188+
189+ # Export common variables for scripts
190+ export DOT_HOME=" $DOT_HOME "
191+ export SYSTEM_DIR=" $( get_system_dir) "
192+ export SHARED_DIR=" $DOT_HOME /shared"
193+
202194 if [[ " $module " == " all" ]]; then
203195 log_info " Installing all modules"
204-
196+
205197 # Get all available install scripts
206198 local available_modules=()
207199 while IFS= read -r line; do
208200 [[ -n " $line " ]] && available_modules+=(" $line " )
209201 done < <( get_available_modules " install" )
210202
211- for mod in " ${available_modules[@]} " ; do
212- log_step " Running install for module: $mod "
213- " $( get_system_dir) /$mod /install"
203+ for script_name in " ${available_modules[@]} " ; do
204+ # Extract module name from script filename (e.g., "01-50-mise" -> "mise")
205+ export MODULE_NAME=" $( basename " $script_name " | sed ' s/^[0-9]*-[0-9]*-//' ) "
206+
207+ init_module_logging " $MODULE_NAME "
208+ if " $SYSTEM_DIR /install/$script_name " ; then
209+ finalize_module_logging " success"
210+ else
211+ finalize_module_logging " failed"
212+ exit 1
213+ fi
214214 done
215215 else
216216 # Install specific module
217- local resolved_module=$( resolve_module_path " $module " )
218- if [[ -x " $( get_system_dir) /$resolved_module /install" ]]; then
219- " $( get_system_dir) /$resolved_module /install"
217+ local script_name=$( resolve_script_name " $module " " install" )
218+ if [[ -x " $SYSTEM_DIR /install/$script_name " ]]; then
219+ # Extract module name from script filename
220+ export MODULE_NAME=" $( basename " $script_name " | sed ' s/^[0-9]*-[0-9]*-//' ) "
221+
222+ init_module_logging " $MODULE_NAME "
223+ if " $SYSTEM_DIR /install/$script_name " ; then
224+ finalize_module_logging " success"
225+ else
226+ finalize_module_logging " failed"
227+ exit 1
228+ fi
220229 else
221230 log_error " Module $module does not have an install script"
222231 exit 1
223232 fi
224233 fi
225-
234+
226235 finalize_logging " success"
227236}
228237
229238# Run build command
230239cmd_build () {
231240 local module=" ${1:- all} "
232-
241+
233242 # Handle --list option
234243 if [[ " $module " == " --list" ]]; then
235244 check_system_for_list
236245 echo " Available modules for build:"
237246 get_available_modules " build"
238247 return 0
239248 fi
240-
249+
241250 check_system_setup
242251 init_logging " build"
243-
252+
244253 log_header " Building: $module "
245-
254+
255+ # Export common variables for scripts
256+ export DOT_HOME=" $DOT_HOME "
257+ export SYSTEM_DIR=" $( get_system_dir) "
258+ export SHARED_DIR=" $DOT_HOME /shared"
259+
246260 if [[ " $module " == " all" ]]; then
247261 log_info " Building all modules"
248-
262+
249263 # Get all available build scripts
250264 local available_modules=()
251265 while IFS= read -r line; do
252266 [[ -n " $line " ]] && available_modules+=(" $line " )
253267 done < <( get_available_modules " build" )
254268
255- for mod in " ${available_modules[@]} " ; do
256- log_step " Running build for module: $mod "
257- " $( get_system_dir) /$mod /build"
269+ for script_name in " ${available_modules[@]} " ; do
270+ # Extract module name from script filename (e.g., "03-00-git" -> "git")
271+ export MODULE_NAME=" $( basename " $script_name " | sed ' s/^[0-9]*-[0-9]*-//' ) "
272+
273+ init_module_logging " $MODULE_NAME "
274+ if " $SYSTEM_DIR /build/$script_name " ; then
275+ finalize_module_logging " success"
276+ else
277+ finalize_module_logging " failed"
278+ exit 1
279+ fi
258280 done
259281 else
260282 # Build specific module
261- local resolved_module=$( resolve_module_path " $module " )
262- if [[ -x " $( get_system_dir) /$resolved_module /build" ]]; then
263- " $( get_system_dir) /$resolved_module /build"
283+ local script_name=$( resolve_script_name " $module " " build" )
284+ if [[ -x " $SYSTEM_DIR /build/$script_name " ]]; then
285+ # Extract module name from script filename
286+ export MODULE_NAME=" $( basename " $script_name " | sed ' s/^[0-9]*-[0-9]*-//' ) "
287+
288+ init_module_logging " $MODULE_NAME "
289+ if " $SYSTEM_DIR /build/$script_name " ; then
290+ finalize_module_logging " success"
291+ else
292+ finalize_module_logging " failed"
293+ exit 1
294+ fi
264295 else
265296 log_error " Module $module does not have a build script"
266297 exit 1
267298 fi
268299 fi
269-
300+
270301 finalize_logging " success"
271302}
272303
273304# Run upgrade command
274305cmd_upgrade () {
275306 local module=" ${1:- all} "
276-
307+
277308 # Handle --list option
278309 if [[ " $module " == " --list" ]]; then
279310 check_system_for_list
280311 echo " Available modules for upgrade:"
281312 get_available_modules " upgrade"
282313 return 0
283314 fi
284-
315+
285316 check_system_setup
286317 init_logging " upgrade"
287-
318+
288319 log_header " Upgrading: $module "
289-
320+
321+ # Export common variables for scripts
322+ export DOT_HOME=" $DOT_HOME "
323+ export SYSTEM_DIR=" $( get_system_dir) "
324+ export SHARED_DIR=" $DOT_HOME /shared"
325+
290326 if [[ " $module " == " all" ]]; then
291327 log_info " Upgrading all modules"
292-
328+
293329 # Get all available upgrade scripts
294330 local available_modules=()
295331 while IFS= read -r line; do
296332 [[ -n " $line " ]] && available_modules+=(" $line " )
297333 done < <( get_available_modules " upgrade" )
298-
334+
299335 if [[ ${# available_modules[@]} -eq 0 ]]; then
300336 log_info " No modules have upgrade scripts"
301337 finalize_logging " success"
302338 return
303339 fi
304-
305- for mod in " ${available_modules[@]} " ; do
306- log_step " Running upgrade for module: $mod "
307- " $( get_system_dir) /$mod /upgrade"
340+
341+ for script_name in " ${available_modules[@]} " ; do
342+ # Extract module name from script filename
343+ export MODULE_NAME=" $( basename " $script_name " | sed ' s/^[0-9]*-[0-9]*-//' ) "
344+
345+ init_module_logging " $MODULE_NAME "
346+ if " $SYSTEM_DIR /upgrade/$script_name " ; then
347+ finalize_module_logging " success"
348+ else
349+ finalize_module_logging " failed"
350+ exit 1
351+ fi
308352 done
309353 else
310354 # Upgrade specific module
311- local resolved_module=$( resolve_module_path " $module " )
312- if [[ -x " $( get_system_dir) /$resolved_module /upgrade" ]]; then
313- " $( get_system_dir) /$resolved_module /upgrade"
355+ local script_name=$( resolve_script_name " $module " " upgrade" )
356+ if [[ -x " $SYSTEM_DIR /upgrade/$script_name " ]]; then
357+ # Extract module name from script filename
358+ export MODULE_NAME=" $( basename " $script_name " | sed ' s/^[0-9]*-[0-9]*-//' ) "
359+
360+ init_module_logging " $MODULE_NAME "
361+ if " $SYSTEM_DIR /upgrade/$script_name " ; then
362+ finalize_module_logging " success"
363+ else
364+ finalize_module_logging " failed"
365+ exit 1
366+ fi
314367 else
315368 log_error " Module $module does not have an upgrade script"
316369 exit 1
317370 fi
318371 fi
319-
372+
320373 finalize_logging " success"
321374}
322375
0 commit comments