From 2b13ec2d84dae847787ee0b3f45ac247e983f14e Mon Sep 17 00:00:00 2001 From: pauljako Date: Thu, 27 Feb 2025 21:02:31 +0100 Subject: [PATCH] feat(remove.go): removes bin wrappers --- remove.go | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/remove.go b/remove.go index ce2160f..415c7bf 100644 --- a/remove.go +++ b/remove.go @@ -1,6 +1,7 @@ package main import ( + "encoding/json" "errors" "net" "os" @@ -27,10 +28,24 @@ func remove(conn net.Conn, instance string, program string, keep_data bool) erro if err != nil { 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") } + 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) if err != nil { 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 }