feat(remove.go): removes bin wrappers

This commit is contained in:
Paul Fey 2025-02-27 21:02:31 +01:00
parent 2d5a992404
commit 2b13ec2d84

View file

@ -1,6 +1,7 @@
package main package main
import ( import (
"encoding/json"
"errors" "errors"
"net" "net"
"os" "os"
@ -27,10 +28,24 @@ func remove(conn net.Conn, instance string, program string, keep_data bool) erro
if err != nil { if err != nil {
return err return err
} }
if exists, err := path_exists(package_path); !exists || err != nil { info_path, err := filepath.Abs(filepath.Join(package_path, "boundaries.json"))
if err != nil {
return err
}
if exists, err := path_exists(info_path); !exists || err != nil {
return errors.New("package not found") return errors.New("package not found")
} }
infofile_content, err := os.ReadFile(info_path)
if err != nil {
return err
}
var info map[string]interface{}
err = json.Unmarshal(infofile_content, &info)
if err != nil {
return err
}
err = os.RemoveAll(package_path) err = os.RemoveAll(package_path)
if err != nil { if err != nil {
return err return err
@ -51,5 +66,39 @@ func remove(conn net.Conn, instance string, program string, keep_data bool) erro
} }
} }
bin_files, has := info["bin"]
if has {
switch bin_files.(type) {
case string:
err = remove_bin(instance, bin_files.(string))
if err != nil {
return err
}
case map[string]interface{}:
for _, path := range bin_files.(map[string]interface{}) {
err = remove_bin(instance, path.(string))
if err != nil {
return err
}
}
default:
return errors.New("unknown type for bin")
}
}
return nil
}
func remove_bin(instance string, path string) error {
bin_path, err := filepath.Abs(filepath.Join(instance, "exec", "bin", path))
if err != nil {
return err
}
if exists, err := path_exists(bin_path); exists && err == nil {
err = os.Remove(bin_path)
if err != nil {
return err
}
}
return nil return nil
} }