Reorganize codebase #10
@ -2,6 +2,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
|
"errors"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.enumerated.dev/bubble-package-manager/bpm/src/bpmlib"
|
"git.enumerated.dev/bubble-package-manager/bpm/src/bpmlib"
|
||||||
@ -237,7 +238,9 @@ func resolveCommand() {
|
|||||||
|
|
||||||
// Create installation operation
|
// Create installation operation
|
||||||
operation, err := bpmlib.InstallPackages(rootDir, ir, reinstallMethod, !noOptional, force, verbose, subcommandArgs...)
|
operation, err := bpmlib.InstallPackages(rootDir, ir, reinstallMethod, !noOptional, force, verbose, subcommandArgs...)
|
||||||
if err != nil {
|
if errors.As(err, &bpmlib.PackageNotFoundErr{}) || errors.As(err, &bpmlib.DependencyNotFoundErr{}) || errors.As(err, &bpmlib.PackageConflictErr{}) {
|
||||||
|
log.Fatalf("Error: %s", err)
|
||||||
|
} else if err != nil {
|
||||||
log.Fatalf("Error: could not setup operation: %s\n", err)
|
log.Fatalf("Error: could not setup operation: %s\n", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -280,8 +283,10 @@ func resolveCommand() {
|
|||||||
|
|
||||||
// Create update operation
|
// Create update operation
|
||||||
operation, err := bpmlib.UpdatePackages(rootDir, !nosync, !noOptional, force, verbose)
|
operation, err := bpmlib.UpdatePackages(rootDir, !nosync, !noOptional, force, verbose)
|
||||||
if err != nil {
|
if errors.As(err, &bpmlib.PackageNotFoundErr{}) || errors.As(err, &bpmlib.DependencyNotFoundErr{}) || errors.As(err, &bpmlib.PackageConflictErr{}) {
|
||||||
log.Fatalf("Error: could not setuo operation: %s\n", err)
|
log.Fatalf("Error: %s", err)
|
||||||
|
} else if err != nil {
|
||||||
|
log.Fatalf("Error: could not setup operation: %s\n", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Show operation summary
|
// Show operation summary
|
||||||
@ -347,7 +352,9 @@ func resolveCommand() {
|
|||||||
|
|
||||||
// Create remove operation
|
// Create remove operation
|
||||||
operation, err := bpmlib.RemovePackages(rootDir, removeUnused, doCleanup, verbose, subcommandArgs...)
|
operation, err := bpmlib.RemovePackages(rootDir, removeUnused, doCleanup, verbose, subcommandArgs...)
|
||||||
if err != nil {
|
if errors.As(err, &bpmlib.PackageNotFoundErr{}) || errors.As(err, &bpmlib.DependencyNotFoundErr{}) || errors.As(err, &bpmlib.PackageConflictErr{}) {
|
||||||
|
log.Fatalf("Error: %s", err)
|
||||||
|
} else if err != nil {
|
||||||
log.Fatalf("Error: could not setup operation: %s\n", err)
|
log.Fatalf("Error: could not setup operation: %s\n", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -385,7 +392,9 @@ func resolveCommand() {
|
|||||||
|
|
||||||
// Create cleanup operation
|
// Create cleanup operation
|
||||||
operation, err := bpmlib.CleanupPackages(rootDir, verbose)
|
operation, err := bpmlib.CleanupPackages(rootDir, verbose)
|
||||||
if err != nil {
|
if errors.As(err, &bpmlib.PackageNotFoundErr{}) || errors.As(err, &bpmlib.DependencyNotFoundErr{}) || errors.As(err, &bpmlib.PackageConflictErr{}) {
|
||||||
|
log.Fatalf("Error: %s", err)
|
||||||
|
} else if err != nil {
|
||||||
log.Fatalf("Error: could not setup operation: %s\n", err)
|
log.Fatalf("Error: could not setup operation: %s\n", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
31
src/bpmlib/errors.go
Normal file
31
src/bpmlib/errors.go
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
package bpmlib
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type PackageNotFoundErr struct {
|
||||||
|
packages []string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e PackageNotFoundErr) Error() string {
|
||||||
|
return "The following packages were not found in any repositories: " + strings.Join(e.packages, ", ")
|
||||||
|
}
|
||||||
|
|
||||||
|
type DependencyNotFoundErr struct {
|
||||||
|
dependencies []string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e DependencyNotFoundErr) Error() string {
|
||||||
|
return "The following dependencies were not found in any repositories: " + strings.Join(e.dependencies, ", ")
|
||||||
|
}
|
||||||
|
|
||||||
|
type PackageConflictErr struct {
|
||||||
|
pkg string
|
||||||
|
conflicts []string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e PackageConflictErr) Error() string {
|
||||||
|
return fmt.Sprintf("Package (%s) is in conflict with the following packages: %s", e.pkg, strings.Join(e.conflicts, ", "))
|
||||||
|
}
|
@ -1,11 +1,11 @@
|
|||||||
package bpmlib
|
package bpmlib
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"slices"
|
"slices"
|
||||||
"strings"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type ReinstallMethod uint8
|
type ReinstallMethod uint8
|
||||||
@ -28,6 +28,7 @@ func InstallPackages(rootDir string, installationReason InstallationReason, rein
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Resolve packages
|
// Resolve packages
|
||||||
|
pkgsNotFound := make([]string, 0)
|
||||||
for _, pkg := range packages {
|
for _, pkg := range packages {
|
||||||
if stat, err := os.Stat(pkg); err == nil && !stat.IsDir() {
|
if stat, err := os.Stat(pkg); err == nil && !stat.IsDir() {
|
||||||
bpmpkg, err := ReadPackage(pkg)
|
bpmpkg, err := ReadPackage(pkg)
|
||||||
@ -50,12 +51,14 @@ func InstallPackages(rootDir string, installationReason InstallationReason, rein
|
|||||||
} else if isVirtual, p := IsVirtualPackage(pkg, rootDir); isVirtual {
|
} else if isVirtual, p := IsVirtualPackage(pkg, rootDir); isVirtual {
|
||||||
entry, _, err = GetRepositoryEntry(p)
|
entry, _, err = GetRepositoryEntry(p)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("could not find package (%s) in any repositor", p)
|
pkgsNotFound = append(pkgsNotFound, pkg)
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
} else if e := ResolveVirtualPackage(pkg); e != nil {
|
} else if e := ResolveVirtualPackage(pkg); e != nil {
|
||||||
entry = e
|
entry = e
|
||||||
} else {
|
} else {
|
||||||
return nil, fmt.Errorf("could not find package (%s) in any repository", pkg)
|
pkgsNotFound = append(pkgsNotFound, pkg)
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
if reinstallMethod == ReinstallMethodNone && IsPackageInstalled(entry.Info.Name, rootDir) && GetPackageInfo(entry.Info.Name, rootDir).GetFullVersion() == entry.Info.GetFullVersion() {
|
if reinstallMethod == ReinstallMethodNone && IsPackageInstalled(entry.Info.Name, rootDir) && GetPackageInfo(entry.Info.Name, rootDir).GetFullVersion() == entry.Info.GetFullVersion() {
|
||||||
continue
|
continue
|
||||||
@ -67,6 +70,11 @@ func InstallPackages(rootDir string, installationReason InstallationReason, rein
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Return error if not all packages are found
|
||||||
|
if len(pkgsNotFound) != 0 {
|
||||||
|
return nil, PackageNotFoundErr{pkgsNotFound}
|
||||||
|
}
|
||||||
|
|
||||||
// Resolve dependencies
|
// Resolve dependencies
|
||||||
err = operation.ResolveDependencies(reinstallMethod == ReinstallMethodAll, installOptionalDependencies, verbose)
|
err = operation.ResolveDependencies(reinstallMethod == ReinstallMethodAll, installOptionalDependencies, verbose)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -74,9 +82,9 @@ func InstallPackages(rootDir string, installationReason InstallationReason, rein
|
|||||||
}
|
}
|
||||||
if len(operation.UnresolvedDepends) != 0 {
|
if len(operation.UnresolvedDepends) != 0 {
|
||||||
if !forceInstallation {
|
if !forceInstallation {
|
||||||
return nil, fmt.Errorf("dependencies (%s) could not be found in any repositories", strings.Join(operation.UnresolvedDepends, ", "))
|
return nil, DependencyNotFoundErr{operation.UnresolvedDepends}
|
||||||
} else if verbose {
|
} else if verbose {
|
||||||
log.Println("Warning: The following dependencies could not be found in any repositories: " + strings.Join(operation.UnresolvedDepends, ", "))
|
log.Printf("Warning: %s", DependencyNotFoundErr{operation.UnresolvedDepends})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,15 +97,14 @@ func InstallPackages(rootDir string, installationReason InstallationReason, rein
|
|||||||
return nil, fmt.Errorf("could not complete package conflict check: %s", err)
|
return nil, fmt.Errorf("could not complete package conflict check: %s", err)
|
||||||
}
|
}
|
||||||
if len(conflicts) > 0 {
|
if len(conflicts) > 0 {
|
||||||
if verbose {
|
err = nil
|
||||||
for pkg, conflict := range conflicts {
|
for pkg, conflict := range conflicts {
|
||||||
fmt.Printf("%s is in conflict with packages (%s)\n", pkg, strings.Join(conflict, ", "))
|
err = errors.Join(err, PackageConflictErr{pkg, conflict})
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if !forceInstallation {
|
if !forceInstallation {
|
||||||
return nil, fmt.Errorf("conflicting packages found")
|
return nil, err
|
||||||
} else {
|
} else {
|
||||||
log.Println("Warning: conflicting packages found")
|
log.Printf("Warning: %s", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -222,9 +229,9 @@ func UpdatePackages(rootDir string, syncDatabase bool, installOptionalDependenci
|
|||||||
}
|
}
|
||||||
if len(operation.UnresolvedDepends) != 0 {
|
if len(operation.UnresolvedDepends) != 0 {
|
||||||
if !forceInstallation {
|
if !forceInstallation {
|
||||||
return nil, fmt.Errorf("dependencies (%s) could not be found in any repositories", strings.Join(operation.UnresolvedDepends, ", "))
|
return nil, DependencyNotFoundErr{operation.UnresolvedDepends}
|
||||||
} else if verbose {
|
} else if verbose {
|
||||||
log.Printf("Warning: dependencies (%s) could not be found in any repositories\n", strings.Join(operation.UnresolvedDepends, ", "))
|
log.Printf("Warning: %s", DependencyNotFoundErr{operation.UnresolvedDepends})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user