diff --git a/cmd/database.go b/cmd/database.go index 901b75f5..3ef7e57c 100644 --- a/cmd/database.go +++ b/cmd/database.go @@ -36,6 +36,7 @@ func init() { databaseGroupCmd.AddCommand( NewDatabaseCreateCommand(), + NewDatabaseGetCommand(), NewDatabaseRemoveCommand(), ) } diff --git a/cmd/database/get.go b/cmd/database/get.go new file mode 100644 index 00000000..27cc1723 --- /dev/null +++ b/cmd/database/get.go @@ -0,0 +1,83 @@ +// Copyright © 2021 Ettore Di Giacinto +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, see . + +package cmd_database + +import ( + "fmt" + + helpers "github.com/mudler/luet/cmd/helpers" + "gopkg.in/yaml.v2" + + . "github.com/mudler/luet/pkg/config" + + "github.com/spf13/cobra" +) + +func NewDatabaseGetCommand() *cobra.Command { + var c = &cobra.Command{ + Use: "get ", + Short: "Get a package in the system DB as yaml", + Long: `Get a package in the system database in the YAML format: + + $ luet database get system/foo + +To return also files: + $ luet database get --files system/foo`, + Args: cobra.OnlyValidArgs, + PreRun: func(cmd *cobra.Command, args []string) { + LuetCfg.Viper.BindPFlag("system.database_path", cmd.Flags().Lookup("system-dbpath")) + LuetCfg.Viper.BindPFlag("system.rootfs", cmd.Flags().Lookup("system-target")) + }, + Run: func(cmd *cobra.Command, args []string) { + showFiles, _ := cmd.Flags().GetBool("files") + + systemDB := LuetCfg.GetSystemDB() + + for _, a := range args { + pack, err := helpers.ParsePackageStr(a) + if err != nil { + continue + } + + ps, err := systemDB.FindPackages(pack) + if err != nil { + continue + } + for _, p := range ps { + y, err := p.Yaml() + if err != nil { + continue + } + fmt.Println(string(y)) + if showFiles { + files, err := systemDB.GetPackageFiles(p) + if err != nil { + continue + } + b, err := yaml.Marshal(files) + if err != nil { + continue + } + fmt.Println("files:\n" + string(b)) + } + } + } + }, + } + c.Flags().Bool("files", false, "Show package files.") + + return c +}