Minor Update 1

Some minor changes and bug fixes I've happened upon through my own testing.

changes to main.go:
```
- change the CLI syntax for searching to be `allpac search {package name}` instead of `allpac search -package {package name}`
- ensure when pacman doesn't find anything, it doesn't return an error. (pacman just exits with error code 1 when it doesn't find anything. Which is super silly but whatever)
```

changes to search.go:
```
- add some changes to ensure if pacman is "erroring" it's a real error. Not just pacman returning Exit code 1 because it didn't get a result.
```
This commit is contained in:
VetheonGames 2024-01-04 20:12:26 -07:00
parent 50af1b9613
commit 67ce4f7038
3 changed files with 31 additions and 16 deletions

2
.gitignore vendored
View File

@ -35,3 +35,5 @@ go.work
# Built Visual Studio Code Extensions # Built Visual Studio Code Extensions
*.vsix *.vsix
cmd/allpac
cmd/allpac.txt

View File

@ -8,9 +8,17 @@ import (
"os" "os"
"strings" "strings"
"pixelridgesoftworks.com/AllPac/pkg/packagemanager" "pixelridgesoftworks.com/AllPac/pkg/packagemanager"
"pixelridgesoftworks.com/AllPac/pkg/logger"
"path/filepath"
) )
func main() { func main() {
// Initialize the logger
logFilePath := filepath.Join(os.Getenv("HOME"), ".allpac", "logs", "allpac.log")
if err := logger.Init(logFilePath); err != nil {
// If logger initialization fails, you can choose to exit the program or use the default logger
logger.Errorf("Failed to initialize logger: %v", err)
}
// Define flags for different commands // Define flags for different commands
updateCmd := flag.NewFlagSet("update", flag.ExitOnError) updateCmd := flag.NewFlagSet("update", flag.ExitOnError)
installCmd := flag.NewFlagSet("install", flag.ExitOnError) installCmd := flag.NewFlagSet("install", flag.ExitOnError)
@ -32,7 +40,7 @@ func main() {
case "uninstall": case "uninstall":
handleUninstall(uninstallCmd) handleUninstall(uninstallCmd)
case "search": case "search":
handleSearch(searchCmd) handleSearch(searchCmd, os.Args[2:])
case "rebuild": case "rebuild":
handleRebuild(aurRebuildCmd) handleRebuild(aurRebuildCmd)
case "clean-aur": case "clean-aur":
@ -155,24 +163,23 @@ func handleUninstall(cmd *flag.FlagSet) {
} }
// handleSearch handles the search command for packages across different package managers // handleSearch handles the search command for packages across different package managers
func handleSearch(cmd *flag.FlagSet) { func handleSearch(cmd *flag.FlagSet, args []string) {
// Define a flag for the package name
packageName := cmd.String("package", "", "Name of the package to search")
// Parse the command line arguments
cmd.Parse(os.Args[2:])
// Check if the package name was provided // Check if the package name was provided
if *packageName == "" { if len(args) < 1 {
fmt.Println("You must specify a package name.") fmt.Println("You must specify a package name.")
cmd.Usage() cmd.Usage()
return return
} }
// The package name is the first argument
packageName := args[0]
// Search in Pacman // Search in Pacman
pacmanResults, err := packagemanager.SearchPacman(*packageName) pacmanResults, err := packagemanager.SearchPacman(packageName)
if err != nil { if err != nil {
fmt.Printf("Error searching in Pacman: %v\n", err) logger.Errorf("Error searching in Pacman: %v", err)
} else if len(pacmanResults) == 0 {
fmt.Println("Pacman: No results found")
} else { } else {
fmt.Println("Pacman Results:") fmt.Println("Pacman Results:")
for _, result := range pacmanResults { for _, result := range pacmanResults {
@ -181,7 +188,7 @@ func handleSearch(cmd *flag.FlagSet) {
} }
// Search in Snap // Search in Snap
snapResults, err := packagemanager.SearchSnap(*packageName) snapResults, err := packagemanager.SearchSnap(packageName)
if err != nil { if err != nil {
fmt.Printf("Error searching in Snap: %v\n", err) fmt.Printf("Error searching in Snap: %v\n", err)
} else { } else {
@ -192,7 +199,7 @@ func handleSearch(cmd *flag.FlagSet) {
} }
// Search in Flatpak // Search in Flatpak
flatpakResults, err := packagemanager.SearchFlatpak(*packageName) flatpakResults, err := packagemanager.SearchFlatpak(packageName)
if err != nil { if err != nil {
fmt.Printf("Error searching in Flatpak: %v\n", err) fmt.Printf("Error searching in Flatpak: %v\n", err)
} else { } else {
@ -203,7 +210,7 @@ func handleSearch(cmd *flag.FlagSet) {
} }
// Search in AUR // Search in AUR
aurResults, err := packagemanager.SearchAUR(*packageName) aurResults, err := packagemanager.SearchAUR(packageName)
if err != nil { if err != nil {
fmt.Printf("Error searching in AUR: %v\n", err) fmt.Printf("Error searching in AUR: %v\n", err)
} else { } else {

View File

@ -104,10 +104,16 @@ type AURPackage struct {
func SearchPacman(packageName string) ([]string, error) { func SearchPacman(packageName string) ([]string, error) {
cmd := exec.Command("pacman", "-Ss", packageName) cmd := exec.Command("pacman", "-Ss", packageName)
output, err := cmd.CombinedOutput() output, err := cmd.CombinedOutput()
if err != nil {
logger.Errorf("error searching Pacman: %v", err) // Check if the error is due to no results found
if err != nil && len(output) == 0 {
return nil, nil // No results is not an error in this context
} else if err != nil {
// Other errors are still treated as errors
logger.Errorf("Error searching Pacman: %v", err)
return nil, fmt.Errorf("error searching Pacman: %v", err) return nil, fmt.Errorf("error searching Pacman: %v", err)
} }
return parsePacmanOutput(string(output)), nil return parsePacmanOutput(string(output)), nil
} }