Unify inspection configuration handling
This commit is contained in:
@@ -6,23 +6,36 @@ import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/fs"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"gitea.maximumdirect.net/eric/promptkit"
|
||||
appconfig "gitea.maximumdirect.net/eric/scriptorium/internal/config"
|
||||
appformat "gitea.maximumdirect.net/eric/scriptorium/internal/format"
|
||||
)
|
||||
|
||||
type promptInspectionConfig struct {
|
||||
configPath, promptDir, promptID, promptVersion, outputPath string
|
||||
configExplicit bool
|
||||
outputFormat appformat.OutputFormat
|
||||
}
|
||||
|
||||
type profileInspectionConfig struct {
|
||||
configPath, profileDir, profileID, outputPath string
|
||||
configExplicit bool
|
||||
outputFormat appformat.OutputFormat
|
||||
}
|
||||
|
||||
// emptyPromptDefinitionFS satisfies Promptkit's engine-level prompt-source
|
||||
// requirement without exposing the caller's working directory. Profile
|
||||
// inspection never reads this source.
|
||||
type emptyPromptDefinitionFS struct{}
|
||||
|
||||
func (emptyPromptDefinitionFS) Open(name string) (fs.File, error) {
|
||||
return nil, &fs.PathError{Op: "open", Path: name, Err: fs.ErrNotExist}
|
||||
}
|
||||
|
||||
func inspectCommand(args []string, stdout, stderr io.Writer) int {
|
||||
if len(args) == 0 {
|
||||
fmt.Fprintln(stderr, "inspect parse error: inspection mode is required")
|
||||
@@ -78,7 +91,7 @@ func inspectProfileCommand(args []string, stdout, stderr io.Writer) int {
|
||||
fmt.Fprintf(stderr, "inspect error: %v\n", err)
|
||||
return ExitRuntimeError
|
||||
}
|
||||
engine, err := newEngine(settings)
|
||||
engine, err := newEngine(settings, promptkit.WithPromptFS(emptyPromptDefinitionFS{}, "."))
|
||||
if err != nil {
|
||||
fmt.Fprintf(stderr, "engine error: %v\n", err)
|
||||
return ExitRuntimeError
|
||||
@@ -113,6 +126,7 @@ func parseProfileInspectionArgs(args []string) (*profileInspectionConfig, error)
|
||||
if err := fs.Parse(args); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
cfg.configExplicit = flagWasSet(fs, "config")
|
||||
if fs.NArg() > 0 {
|
||||
return nil, fmt.Errorf("unexpected positional args: %v", fs.Args())
|
||||
}
|
||||
@@ -131,14 +145,13 @@ func parseProfileInspectionArgs(args []string) (*profileInspectionConfig, error)
|
||||
}
|
||||
|
||||
func resolveAppSettingsForProfileInspection(cfg *profileInspectionConfig) (engineSettings, error) {
|
||||
settings, err := appconfig.LoadConfig(cfg.configPath, cfg.configPath != "")
|
||||
settings, err := resolveAppSettingsWithConfigPresence(cfg.configPath, cfg.configExplicit, appconfig.CLIOverrides{
|
||||
ProfileDir: cfg.profileDir,
|
||||
})
|
||||
if err != nil {
|
||||
return engineSettings{}, fmt.Errorf("application config error: %w", err)
|
||||
return engineSettings{}, err
|
||||
}
|
||||
if strings.TrimSpace(cfg.profileDir) != "" {
|
||||
settings.ProfileDir = filepath.Clean(cfg.profileDir)
|
||||
}
|
||||
return engineSettings{promptDir: ".", profileDir: settings.ProfileDir, backends: settings.Backends}, nil
|
||||
return engineSettings{profileDir: settings.ProfileDir, backends: settings.Backends}, nil
|
||||
}
|
||||
|
||||
func parsePromptInspectionArgs(args []string) (*promptInspectionConfig, error) {
|
||||
@@ -155,6 +168,7 @@ func parsePromptInspectionArgs(args []string) (*promptInspectionConfig, error) {
|
||||
if err := fs.Parse(args); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
cfg.configExplicit = flagWasSet(fs, "config")
|
||||
if fs.NArg() > 0 {
|
||||
return nil, fmt.Errorf("unexpected positional args: %v", fs.Args())
|
||||
}
|
||||
@@ -173,12 +187,11 @@ func parsePromptInspectionArgs(args []string) (*promptInspectionConfig, error) {
|
||||
}
|
||||
|
||||
func resolveAppSettingsForPromptInspection(cfg *promptInspectionConfig) (engineSettings, error) {
|
||||
settings, err := appconfig.LoadConfig(cfg.configPath, cfg.configPath != "")
|
||||
settings, err := resolveAppSettingsWithConfigPresence(cfg.configPath, cfg.configExplicit, appconfig.CLIOverrides{
|
||||
PromptDir: cfg.promptDir,
|
||||
})
|
||||
if err != nil {
|
||||
return engineSettings{}, fmt.Errorf("application config error: %w", err)
|
||||
}
|
||||
if strings.TrimSpace(cfg.promptDir) != "" {
|
||||
settings.PromptDir = filepath.Clean(cfg.promptDir)
|
||||
return engineSettings{}, err
|
||||
}
|
||||
if strings.TrimSpace(settings.PromptDir) == "" {
|
||||
return engineSettings{}, errors.New(errPromptDirRequired)
|
||||
|
||||
Reference in New Issue
Block a user