diff --git a/changelog.md b/changelog.md index b7242bf..a5ec126 100644 --- a/changelog.md +++ b/changelog.md @@ -2,6 +2,18 @@ All notable changes to this project will be documented in this file. +## [unreleased] + +### 🚀 Features + +- *(cli)* Add concurrent execution of search and update to improve performance +- *(cli)* Add aliases to commands +- *(config)* Add creation of default config if no config exists + +### 🐛 Bug Fixes + +- *(packagemanager)* Reimplement getPackagemanager to enable installing buildtools on linux + ## [0.4.0] - 2025-01-20 ### 🚀 Features @@ -16,6 +28,7 @@ All notable changes to this project will be documented in this file. ### 📚 Documentation +- Update changelog.md - Update changelog.md ## [0.3.1] - 2025-01-19 diff --git a/cmd/cmd.go b/cmd/cmd.go index 3218b50..1c2e2c9 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -43,8 +43,21 @@ func init() { updateCmd.Flags().StringP("manager", "m", "os", "The package manager you want to update packages with. (Options: os|homebrew|pipx|flatpak)") - packageCmd.AddCommand(addCmd, deleteCmd, showCmd, enableCmd) - RootCmd.AddCommand(packageCmd, searchCmd, installCmd, removeCmd, updateCmd, updateAllCmd) + packageCmd.AddCommand( + addCmd, + deleteCmd, + showCmd, + enableCmd, + ) + RootCmd.AddCommand( + packageCmd, + searchCmd, + installCmd, + removeCmd, + updateCmd, + updateAllCmd, + historyCmd, + ) } func initConfig() { diff --git a/cmd/history_cmd.go b/cmd/history_cmd.go new file mode 100644 index 0000000..f6b198c --- /dev/null +++ b/cmd/history_cmd.go @@ -0,0 +1,28 @@ +package cmd + +import ( + "fmt" + "log" + "os" + "path/filepath" + + "github.com/spf13/cobra" +) + +var historyCmd = &cobra.Command{ + Use: "history", + Short: "Zeigt die Befehlshistorie an", + Run: func(cmd *cobra.Command, args []string) { + dirname, err := os.UserConfigDir() + if err != nil { + log.Printf("error getting user config dir: %v\n", err) + } + historyFile := filepath.Join(dirname, "sst", "sst_history") + content, err := os.ReadFile(historyFile) + if err != nil { + fmt.Println("error reading history: ", err) + return + } + fmt.Println(string(content)) + }, +} diff --git a/cmd/install_cmd.go b/cmd/install_cmd.go index b12d83f..7e4c7a7 100644 --- a/cmd/install_cmd.go +++ b/cmd/install_cmd.go @@ -51,5 +51,8 @@ var installCmd = &cobra.Command{ if err := manager.Install([]string{packageName}); err != nil { log.Printf("error: %v\n", err) } + if err := utils.LogToHistory("installed", packageName, manager.Name()); err != nil { + fmt.Println("error logging action:", err) + } }, } diff --git a/cmd/package_commands.go b/cmd/package_commands.go index d3b50f5..74aec53 100644 --- a/cmd/package_commands.go +++ b/cmd/package_commands.go @@ -4,6 +4,7 @@ import ( "fmt" "os" "sort" + "system_setup_tool/utils" "github.com/spf13/cobra" "github.com/spf13/viper" @@ -58,6 +59,9 @@ var addCmd = &cobra.Command{ } fmt.Printf("Package %s has been added to the configuration for %s\n", name, manager) + if err := utils.LogToHistory("added", name, manager); err != nil { + fmt.Println("error logging action:", err) + } }, } @@ -120,6 +124,9 @@ var deleteCmd = &cobra.Command{ } fmt.Printf("Package %s was not found in the configuration for %s\n", name, manager) + if err := utils.LogToHistory("removed", name, manager); err != nil { + fmt.Println("error logging action:", err) + } } }, } @@ -187,5 +194,8 @@ var enableCmd = &cobra.Command{ } fmt.Printf("Package manager %s has been %s\n", manager, map[bool]string{true: "enabled", false: "disabled"}[enable]) + if err := utils.LogToHistory("enabled", "", manager); err != nil { + fmt.Println("error logging action:", err) + } }, } diff --git a/cmd/remove_cmd.go b/cmd/remove_cmd.go index 30b80f2..36c4bff 100644 --- a/cmd/remove_cmd.go +++ b/cmd/remove_cmd.go @@ -50,5 +50,8 @@ var removeCmd = &cobra.Command{ if err := manager.RemovePackage(packageName); err != nil { log.Printf("error: %v\n", err) } + if err := utils.LogToHistory("removed", packageName, manager.Name()); err != nil { + fmt.Println("error logging action:", err) + } }, } diff --git a/cmd/search_cmd.go b/cmd/search_cmd.go index 7d1dff3..3b9c28e 100644 --- a/cmd/search_cmd.go +++ b/cmd/search_cmd.go @@ -8,6 +8,7 @@ import ( "sync" pm "system_setup_tool/packagemanager" + "system_setup_tool/utils" "github.com/spf13/cobra" ) @@ -108,5 +109,8 @@ func searchConcurrently(managers []pm.PackageManager, packageName string) { fmt.Printf("Results from %s:\n", result.manager.Name()) displayResults(result.results, result.manager.Name()) fmt.Println() + if err := utils.LogToHistory("searched", packageName, result.manager.Name()); err != nil { + fmt.Println("error logging action:", err) + } } } diff --git a/cmd/update_command.go b/cmd/update_command.go index 79e2d09..6f5ca15 100644 --- a/cmd/update_command.go +++ b/cmd/update_command.go @@ -53,10 +53,18 @@ var updateCmd = &cobra.Command{ if packageName != "" { if err := manager.UpdatePackage(packageName); err != nil { log.Printf("error: %v\n", err) + } else { + if err := utils.LogToHistory("updated", packageName, manager.Name()); err != nil { + fmt.Println("error logging action:", err) + } } } else { if err := manager.UpdateAllPackages(); err != nil { log.Printf("error: %v\n", err) + } else { + if err := utils.LogToHistory("updated", "all", "all"); err != nil { + fmt.Println("error logging action:", err) + } } } }, diff --git a/utils/utils.go b/utils/utils.go index 9024846..a3679f8 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -2,6 +2,9 @@ package utils import ( "fmt" + "os" + "path/filepath" + "time" "github.com/charmbracelet/huh" ) @@ -11,7 +14,7 @@ func GetSudoPassword() (string, error) { form := huh.NewForm( huh.NewGroup( huh.NewInput(). - Title("Bitte geben Sie Ihr sudo-Passwort ein"). + Title("Enter your password"). EchoMode(huh.EchoModePassword). Value(&password), ), @@ -19,7 +22,7 @@ func GetSudoPassword() (string, error) { err := form.Run() if err != nil { - return "", fmt.Errorf("fehler bei der Passwortabfrage: %v", err) + return "", fmt.Errorf("error at password-dialog: %v", err) } return password, nil } @@ -30,3 +33,24 @@ func max(a, b int) int { } return b } + +func LogToHistory(action, pkg, manager string) error { + dirname, err := os.UserConfigDir() + if err != nil { + return fmt.Errorf("cant obtain config dir: %v", err) + } + historyFile := filepath.Join(dirname, "sst", "sst_history") + f, err := os.OpenFile(historyFile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + if err != nil { + return err + } + defer f.Close() + + timestamp := time.Now().Format("2006-01-02 15:04:05") + logEntry := fmt.Sprintf("%s: action: [%s] - package: [%s] - packagemanager: [%s]\n", timestamp, action, pkg, manager) + + if _, err := f.WriteString(logEntry); err != nil { + return err + } + return nil +}