This commit is contained in:
Thomas G. Lopes
2026-03-04 15:26:32 +00:00
parent 59dbfd8162
commit a788760593
3 changed files with 51 additions and 16 deletions
+46 -16
View File
@@ -20,9 +20,12 @@ const (
)
type packageConfig struct {
targets map[string]string
targets map[string]string
disabled map[string]bool
}
var errTargetDisabled = errors.New("target disabled for this platform")
func main() {
if len(os.Args) < 2 {
usage()
@@ -179,8 +182,11 @@ func resolvePathSpec(pathSpec, repoAbs string) (string, string, error) {
if err != nil {
continue
}
targetRoot, err := selectTarget(cfg.targets)
targetRoot, err := selectTarget(cfg)
if err != nil {
if errors.Is(err, errTargetDisabled) {
continue
}
continue
}
absTarget, err := filepath.Abs(expandHome(targetRoot))
@@ -240,8 +246,11 @@ func applyCmd(args []string) error {
return fmt.Errorf("%s: %w", entry.Name(), err)
}
targetRoot, err := selectTarget(cfg.targets)
targetRoot, err := selectTarget(cfg)
if err != nil {
if errors.Is(err, errTargetDisabled) {
continue
}
return fmt.Errorf("%s: %w", entry.Name(), err)
}
@@ -427,7 +436,7 @@ func unlinkCmd(args []string) error {
return err
}
targetRoot, err := selectTarget(cfg.targets)
targetRoot, err := selectTarget(cfg)
if err != nil {
return err
}
@@ -487,7 +496,7 @@ func removeCmd(args []string) error {
return err
}
targetRoot, err := selectTarget(cfg.targets)
targetRoot, err := selectTarget(cfg)
if err != nil {
return err
}
@@ -620,19 +629,31 @@ func loadConfig(path string) (*packageConfig, error) {
}
targets := make(map[string]string)
disabled := make(map[string]bool)
targetTbl.ForEach(func(k, v lua.LValue) {
ks, ok1 := k.(lua.LString)
vs, ok2 := v.(lua.LString)
if ok1 && ok2 {
targets[string(ks)] = expandHome(string(vs))
ks, ok := k.(lua.LString)
if !ok {
return
}
if v == lua.LNil || v == lua.LFalse {
disabled[string(ks)] = true
return
}
vs, ok := v.(lua.LString)
if !ok {
return
}
targets[string(ks)] = expandHome(string(vs))
})
if len(targets) == 0 {
if len(targets) == 0 && len(disabled) == 0 {
return nil, errors.New("config.target is empty")
}
return &packageConfig{targets: targets}, nil
return &packageConfig{targets: targets, disabled: disabled}, nil
}
func statusCmd() error {
@@ -658,8 +679,11 @@ func statusCmd() error {
return fmt.Errorf("%s: %w", entry.Name(), err)
}
targetRoot, err := selectTarget(cfg.targets)
targetRoot, err := selectTarget(cfg)
if err != nil {
if errors.Is(err, errTargetDisabled) {
continue
}
return fmt.Errorf("%s: %w", entry.Name(), err)
}
@@ -682,15 +706,18 @@ func statusCmd() error {
return nil
}
func selectTarget(targets map[string]string) (string, error) {
func selectTarget(cfg *packageConfig) (string, error) {
osKey := runtime.GOOS
if osKey == "darwin" {
osKey = "macos"
}
if target, ok := targets[osKey]; ok {
if cfg.disabled[osKey] {
return "", errTargetDisabled
}
if target, ok := cfg.targets[osKey]; ok {
return expandHome(target), nil
}
if target, ok := targets["default"]; ok {
if target, ok := cfg.targets["default"]; ok {
return expandHome(target), nil
}
return "", fmt.Errorf("missing target for %s and default", osKey)
@@ -877,8 +904,11 @@ func findPackageByTarget(repo, targetRoot string) (string, error) {
if err != nil {
continue
}
target, err := selectTarget(cfg.targets)
target, err := selectTarget(cfg)
if err != nil {
if errors.Is(err, errTargetDisabled) {
continue
}
continue
}
absPkgTarget, err := filepath.Abs(expandHome(target))