diff --git a/src/bpm/main.go b/src/bpm/main.go index 1b6a3d1..702e950 100644 --- a/src/bpm/main.go +++ b/src/bpm/main.go @@ -43,7 +43,10 @@ var doCleanup = false var showRepoInfo = false func main() { - bpmlib.ReadConfig() + err := bpmlib.ReadConfig() + if err != nil { + log.Fatalf("Error: could not read BPM config: %s", err) + } resolveFlags() resolveCommand() } @@ -244,6 +247,12 @@ func resolveCommand() { log.Fatalf("Error: could not setup operation: %s\n", err) } + // Exit if operation contains no actions + if len(operation.Actions) == 0 { + fmt.Println("No action needs to be taken") + return + } + // Show operation summary operation.ShowOperationSummary() @@ -289,6 +298,12 @@ func resolveCommand() { log.Fatalf("Error: could not setup operation: %s\n", err) } + // Exit if operation contains no actions + if len(operation.Actions) == 0 { + fmt.Println("No action needs to be taken") + return + } + // Show operation summary operation.ShowOperationSummary() @@ -358,6 +373,12 @@ func resolveCommand() { log.Fatalf("Error: could not setup operation: %s\n", err) } + // Exit if operation contains no actions + if len(operation.Actions) == 0 { + fmt.Println("No action needs to be taken") + return + } + // Show operation summary operation.ShowOperationSummary() @@ -398,6 +419,12 @@ func resolveCommand() { log.Fatalf("Error: could not setup operation: %s\n", err) } + // Exit if operation contains no actions + if len(operation.Actions) == 0 { + fmt.Println("No action needs to be taken") + return + } + // Show operation summary operation.ShowOperationSummary() diff --git a/src/bpmlib/config.go b/src/bpmlib/config.go index 18e03c2..8c3e50a 100644 --- a/src/bpmlib/config.go +++ b/src/bpmlib/config.go @@ -2,7 +2,6 @@ package bpmlib import ( "gopkg.in/yaml.v3" - "log" "os" ) @@ -17,14 +16,16 @@ type BPMConfigStruct struct { var BPMConfig BPMConfigStruct -func ReadConfig() { - if _, err := os.Stat("/etc/bpm.conf"); os.IsNotExist(err) { - log.Fatal(err) +func ReadConfig() (err error) { + if _, err = os.Stat("/etc/bpm.conf"); os.IsNotExist(err) { + return err } + bytes, err := os.ReadFile("/etc/bpm.conf") if err != nil { - log.Fatal(err) + return err } + BPMConfig = BPMConfigStruct{ CompilationEnv: make([]string, 0), SilentCompilation: false, @@ -33,19 +34,23 @@ func ReadConfig() { } err = yaml.Unmarshal(bytes, &BPMConfig) if err != nil { - log.Fatal(err) + return err } + for i := len(BPMConfig.Repositories) - 1; i >= 0; i-- { if BPMConfig.Repositories[i].Disabled != nil && *BPMConfig.Repositories[i].Disabled { BPMConfig.Repositories = append(BPMConfig.Repositories[:i], BPMConfig.Repositories[i+1:]...) } } + for _, repo := range BPMConfig.Repositories { repo.Entries = make(map[string]*RepositoryEntry) repo.VirtualPackages = make(map[string][]string) err := repo.ReadLocalDatabase() if err != nil { - log.Fatal(err) + return err } } + + return nil } diff --git a/src/bpmlib/general.go b/src/bpmlib/general.go index 1d5ee80..c88ac32 100644 --- a/src/bpmlib/general.go +++ b/src/bpmlib/general.go @@ -179,7 +179,10 @@ func UpdatePackages(rootDir string, syncDatabase bool, installOptionalDependenci } // Reload config and local databases - ReadConfig() + err = ReadConfig() + if err != nil { + return nil, fmt.Errorf("could not read BPM config: %s", err) + } // Get installed packages and check for updates pkgs, err := GetInstalledPackages(rootDir) diff --git a/src/bpmlib/operations.go b/src/bpmlib/operations.go index 867b61c..a23acae 100644 --- a/src/bpmlib/operations.go +++ b/src/bpmlib/operations.go @@ -195,7 +195,7 @@ func (operation *BPMOperation) Cleanup(verbose bool) error { // Get all installed packages installedPackageNames, err := GetInstalledPackages(operation.RootDir) if err != nil { - log.Fatalf("Error: could not get installed packages: %s\n", err) + return fmt.Errorf("could not get installed packages: %s", err) } installedPackages := make([]*PackageInfo, len(installedPackageNames)) for i, value := range installedPackageNames { @@ -329,8 +329,8 @@ func (operation *BPMOperation) CheckForConflicts() (map[string][]string, error) func (operation *BPMOperation) ShowOperationSummary() { if len(operation.Actions) == 0 { - fmt.Println("All packages are up to date!") - os.Exit(0) + fmt.Println("No action needs to be taken") + return } for _, value := range operation.Actions { @@ -348,9 +348,6 @@ func (operation *BPMOperation) ShowOperationSummary() { installedInfo := GetPackageInfo(pkgInfo.Name, operation.RootDir) sourceInfo := "" if pkgInfo.Type == "source" { - if operation.RootDir != "/" { - log.Fatalf("cannot compile and install source packages to a different root directory") - } sourceInfo = "(From Source)" }