Add list command to manage installed packages, and search to see all packages avaiable

This commit is contained in:
2025-09-28 17:55:36 -03:00
parent 17e1b4b3ab
commit 96db4572b4

View File

@@ -488,10 +488,91 @@ var removeCmd = &cobra.Command{
}, },
} }
var listCmd = &cobra.Command{
Use: "list",
Args: cobra.NoArgs,
Short: "List all installed packages",
Run: func(cmd *cobra.Command, args []string) {
db, err := sql.Open("sqlite", consts.InstalledDB)
if err != nil {
log.Fatal(err)
}
defer db.Close()
var count int
if err := db.QueryRow("SELECT COUNT(*) FROM packages").Scan(&count); err != nil {
log.Fatal(err)
}
rows, err := db.Query("SELECT query_name, name, version, description, package_d, os, arch FROM packages")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
fmt.Printf(":: Listing all %d packages installed:\n\n", count)
for rows.Next() {
var queryName, name, version, description, packageDir, os, arch string
if err := rows.Scan(&queryName, &name, &version, &description, &packageDir, &os, &arch); err != nil {
log.Fatal(err)
}
fmt.Printf(" Package %s \n ├──Query name: %s\n ├──Version: %s \n ├──Package dir: %s\n ├──OS: %s\n ├──Arch: %s\n └──Description: %s\n", name, queryName, version, packageDir, os, arch, description)
}
},
}
var searchCmd = &cobra.Command{
Use: "search [query]",
Args: cobra.MaximumNArgs(1),
Short: "Search for all packages",
Run: func(cmd *cobra.Command, args []string) {
db, err := sql.Open("sqlite", consts.IndexDB)
if err != nil {
log.Fatal(err)
}
defer db.Close()
var count int
if err := db.QueryRow("SELECT COUNT(*) FROM packages").Scan(&count); err != nil {
log.Fatal(err)
}
var rows *sql.Rows
if len(args) > 0 {
rows, err = db.Query("SELECT query_name, name, version, description, os, arch FROM packages WHERE name LIKE ? OR description LIKE ? OR query_name LIKE ?", args[0], args[0], args[0])
if err != nil {
log.Fatal(err)
}
defer rows.Close()
} else {
rows, err = db.Query("SELECT query_name, name, version, description, os, arch FROM packages")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
}
fmt.Printf(":: Listing all %d packages:\n\n", count)
for rows.Next() {
var queryName, name, version, description, os, arch string
if err := rows.Scan(&queryName, &name, &version, &description, &os, &arch); err != nil {
log.Fatal(err)
}
fmt.Printf(" Package %s \n ├──Query name: %s\n ├──Version: %s \n ├──OS: %s\n ├──Arch: %s\n └──Description: %s\n", name, queryName, version, os, arch, description)
}
},
}
func main() { func main() {
rootCmd.AddCommand(installCmd) rootCmd.AddCommand(installCmd)
rootCmd.AddCommand(removeCmd) rootCmd.AddCommand(removeCmd)
rootCmd.AddCommand(syncCmd) rootCmd.AddCommand(syncCmd)
rootCmd.AddCommand(listCmd)
rootCmd.AddCommand(searchCmd)
rootCmd.Execute() rootCmd.Execute()
} }