diff --git a/cmd/packets/main.go b/cmd/packets/main.go index 0e2824e..839d083 100644 --- a/cmd/packets/main.go +++ b/cmd/packets/main.go @@ -9,15 +9,18 @@ import ( "fmt" "log" "os" - "packets/configs" - "packets/internal/consts" - "packets/internal/utils" - packets "packets/pkg" "path/filepath" "sync" + "packets/configs" + "packets/internal/consts" + "packets/internal/utils" + utils_lua "packets/internal/utils/lua" + packets "packets/pkg" + "github.com/pelletier/go-toml/v2" "github.com/spf13/cobra" + lua "github.com/yuin/gopher-lua" _ "modernc.org/sqlite" ) @@ -26,12 +29,11 @@ var publicKey []byte // init is doing some verifications func init() { - log.SetFlags(0) _, err := os.Stat(consts.DefaultLinux_d) if os.IsNotExist(err) { - err := os.Mkdir(consts.DefaultLinux_d, 0777) + err := os.Mkdir(consts.DefaultLinux_d, 0o777) if err != nil { if os.IsPermission(err) { log.Fatal("can't create packets root directory, please run as root") @@ -43,7 +45,6 @@ func init() { _, err = os.Stat(filepath.Join(consts.DefaultLinux_d, "index.db")) if err != nil { - if os.IsNotExist(err) { if len(os.Args) > 1 && os.Args[0] != "sync" { } else { @@ -62,6 +63,7 @@ func init() { log.Fatal(db) } defer db.Close() + db.Exec("CREATE TABLE IF NOT EXISTS packages (query_name TEXT NOT NULL,name TEXT NOT NULL UNIQUE PRIMARY KEY, version TEXT NOT NULL, dependencies TEXT NOT NULL DEFAULT '', description TEXT NOT NULL, family TEXT NOT NULL, package_d TEXT NOT NULL, filename TEXT NOT NULL, os TEXT NOT NULL, arch TEXT NOT NULL, in_cache INTEGER NOT NULL DEFAULT 1, serial INTEGER NOT NULL)") } else { log.Fatal(err) @@ -98,7 +100,6 @@ var syncCmd = &cobra.Command{ Args: cobra.MaximumNArgs(1), Short: "Syncronizes with an remote index.db, and check if the data dir is changed", Run: func(cmd *cobra.Command, args []string) { - _, err := os.Stat(consts.IndexDB) if err != nil { if !os.IsNotExist(err) { @@ -136,7 +137,7 @@ var syncCmd = &cobra.Command{ } } - if err := os.WriteFile(consts.IndexDB, DBB, 0774); err != nil { + if err := os.WriteFile(consts.IndexDB, DBB, 0o774); err != nil { log.Fatal(err) } @@ -156,7 +157,6 @@ var installCmd = &cobra.Command{ Short: "Install a package", Args: cobra.MinimumNArgs(1), Run: func(cmd *cobra.Command, args []string) { - _, err := os.Stat(consts.IndexDB) if err != nil { if !os.IsNotExist(err) { @@ -429,7 +429,57 @@ var installCmd = &cobra.Command{ continue } } + }, +} +var removeCmd = &cobra.Command{ + Use: "remove {package name}[package name...] ", + Args: cobra.MinimumNArgs(1), + Short: "Remove a package from the given names", + Run: func(cmd *cobra.Command, args []string) { + fmt.Println(":: This command will remove permanently this packages, are you sure? (y/N)") + var a string + fmt.Scanf("%s", &a) + if a != "y" && a != "Y" { + os.Exit(1) + } + + for _, pkgName := range args { + + installed, err := utils.CheckIfPackageInstalled(pkgName) + if err != nil { + log.Fatal(err) + } + if installed { + db, err := sql.Open("sqlite", consts.InstalledDB) + if err != nil { + log.Fatal(err) + } + var packageDir string + if err := db.QueryRow("SELECT package_d WHERE name = ?", pkgName).Scan(&packageDir); err != nil { + log.Fatal(err) + } + + f, err := os.Open(filepath.Join(packageDir, "config.toml")) + if err != nil { + log.Fatal(err) + } + + manifest, err := utils.ManifestFileRead(f) + if err != nil { + log.Fatal(err) + } + + L, err := utils_lua.GetSandBox(packageDir) + if err != nil { + log.Fatal(err) + } + + L.SetGlobal("build", nil) + L.SetGlobal("script", lua.LString(manifest.Hooks.Remove)) + + } + } }, }