feat: added special case for --profile=all

This commit is contained in:
David Allen 2025-09-03 17:40:07 -06:00
parent 870107d680
commit 2eee847205
Signed by: towk
GPG key ID: 0430CDBE22619155
2 changed files with 56 additions and 0 deletions

View file

@ -8,6 +8,7 @@ import (
"net/http" "net/http"
"os" "os"
"path/filepath" "path/filepath"
"slices"
"strings" "strings"
"git.towk2.me/towk/makeshift/internal/archive" "git.towk2.me/towk/makeshift/internal/archive"
@ -315,6 +316,25 @@ func (s *Service) GetStatus(w http.ResponseWriter, r *http.Request) {
} }
func (s *Service) loadProfiles(profileIDs []string, store storage.KVStore, errs []error) []error { func (s *Service) loadProfiles(profileIDs []string, store storage.KVStore, errs []error) []error {
// check for special case profile ID (e.g. '*' or 'all')
useAll := slices.ContainsFunc(profileIDs, func(profileID string) bool {
return profileID == "*" || profileID == "all"
})
if useAll {
var (
dirpath = s.PathForProfiles()
profiles []*makeshift.Profile
err error
)
profiles, err = LoadProfilesFromDir(dirpath)
if err != nil {
errs = append(errs, err)
return errs
}
store.Set("profiles", profiles)
return nil
}
// load data from profiles into the data store // load data from profiles into the data store
var profiles = make(makeshift.ProfileMap, len(profileIDs)) var profiles = make(makeshift.ProfileMap, len(profileIDs))
for i, profileID := range profileIDs { for i, profileID := range profileIDs {

View file

@ -136,6 +136,42 @@ func LoadProfileFromFile(path string) (*makeshift.Profile, error) {
return loadFromJSONFile[makeshift.Profile](path) return loadFromJSONFile[makeshift.Profile](path)
} }
func LoadProfilesFromDir(dirpath string) ([]*makeshift.Profile, error) {
var (
profiles []*makeshift.Profile
err error
)
// walk profiles directory to load all profiles
err = filepath.Walk(dirpath, func(path string, info fs.FileInfo, err error) error {
if err != nil {
return err
}
// skip directories
if info.IsDir() {
return nil
}
// read file contents
var profile *makeshift.Profile
profile, err = LoadProfileFromFile(path)
if err != nil {
return err
}
profiles = append(profiles, profile)
fmt.Println(path, info.Size())
return nil
})
if err != nil {
return nil, fmt.Errorf("failed to walk directory '%s': %v", dirpath, err)
}
return profiles, nil
}
// LoadPluginFromFile loads a single plugin given a single file path // LoadPluginFromFile loads a single plugin given a single file path
func LoadPluginFromFile(path string) (makeshift.Plugin, error) { func LoadPluginFromFile(path string) (makeshift.Plugin, error) {
var ( var (