Files
herolib/lib/core/herocmds/generator.v
Mahmoud-Emad dcd5af4d5f feat: Add reset functionality to startup commands
- Add `reset` boolean parameter to `StartArgs` struct
- Pass `reset` parameter to `startupcmd` calls
- Update service creation logic to handle `reset` flag
- Modify `install_start` and `restart` to pass `reset` parameter
2025-11-23 11:01:47 +02:00

97 lines
2.2 KiB
V

module herocmds
import incubaid.herolib.core.generator.generic
import os
import cli { Command, Flag }
pub fn cmd_generator(mut cmdroot Command) {
mut cmd_run := Command{
name: 'generate'
description: 'generator for vlang code in hero context.\narg is path (required). Use "." for current directory.'
// required_args: 1
execute: cmd_generator_execute
}
cmd_run.add_flag(Flag{
flag: .bool
required: false
name: 'reset'
abbrev: 'r'
description: 'will reset.'
})
cmd_run.add_flag(Flag{
flag: .bool
required: false
name: 'force'
abbrev: 'f'
description: 'will work non interactive if possible.'
})
cmd_run.add_flag(Flag{
flag: .bool
required: false
name: 'generate'
abbrev: 'g'
description: 'generate the code only relevant for scanning.'
})
cmd_run.add_flag(Flag{
flag: .bool
required: false
name: 'scan'
abbrev: 's'
description: 'scanning operation, walk over directories.'
})
cmd_run.add_flag(Flag{
flag: .bool
required: false
name: 'installer'
abbrev: 'i'
description: 'Make sure its installer.'
})
cmdroot.add_command(cmd_run)
}
fn cmd_generator_execute(cmd Command) ! {
mut force := cmd.flags.get_bool('force') or { false }
mut reset := cmd.flags.get_bool('reset') or { false }
mut scan := cmd.flags.get_bool('scan') or { false }
mut generate := cmd.flags.get_bool('generate') or { false }
// Get path from required argument
mut path := ''
if cmd.args.len > 0 {
path = cmd.args[0]
}
// Handle "." as current working directory
if path == '.' {
path = os.getwd()
} else if path != '' {
// Expand home directory
path = path.replace('~', os.home_dir())
// Convert relative paths to absolute paths
if !os.is_abs_path(path) {
path = os.join_path(os.getwd(), path)
}
// Resolve to real path (handles symlinks and normalizes path)
path = os.real_path(path)
// Validate that path exists
if !os.exists(path) {
return error('Path does not exist: ${path}')
}
}
if scan {
generic.scan(path: path, generate: generate)!
} else {
generic.generate(path: path, reset: reset, force: force)!
}
}