diff --git a/Makefile b/Makefile index c6ef16e..aae7c6f 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ endif build: mkdir -p build - cd src; $(GO) build -ldflags "-w" -o ../build/bpm gitlab.com/bubble-package-manager/bpm + cd src/bpm; $(GO) build -ldflags "-w" -o ../../build/bpm gitlab.com/bubble-package-manager/bpm install: build/bpm config/ mkdir -p $(DESTDIR)$(BINDIR) diff --git a/src/bpm/go.mod b/src/bpm/go.mod new file mode 100644 index 0000000..5525700 --- /dev/null +++ b/src/bpm/go.mod @@ -0,0 +1,14 @@ +module gitlab.com/bubble-package-manager/bpm + +go 1.23 + +toolchain go1.23.7 + +require git.enumerated.dev/bubble-package-manager/bpm/src/bpmlib v0.5.0 + +replace git.enumerated.dev/bubble-package-manager/bpm/src/bpmlib => ../bpmlib + +require ( + github.com/knqyf263/go-rpm-version v0.0.0-20240918084003-2afd7dc6a38f // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/src/go.sum b/src/bpm/go.sum similarity index 57% rename from src/go.sum rename to src/bpm/go.sum index 138d9eb..8a51310 100644 --- a/src/go.sum +++ b/src/bpm/go.sum @@ -1,9 +1,6 @@ -github.com/elliotchance/orderedmap/v2 v2.4.0 h1:6tUmMwD9F998FNpwFxA5E6NQvSpk2PVw7RKsVq3+2Cw= -github.com/elliotchance/orderedmap/v2 v2.4.0/go.mod h1:85lZyVbpGaGvHvnKa7Qhx7zncAdBIBq6u56Hb1PRU5Q= -github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= -github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/knqyf263/go-rpm-version v0.0.0-20240918084003-2afd7dc6a38f h1:xt29M2T6STgldg+WEP51gGePQCsQvklmP2eIhPIBK3g= github.com/knqyf263/go-rpm-version v0.0.0-20240918084003-2afd7dc6a38f/go.mod h1:i4sF0l1fFnY1aiw08QQSwVAFxHEm311Me3WsU/X7nL0= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/src/main.go b/src/bpm/main.go similarity index 88% rename from src/main.go rename to src/bpm/main.go index 7db4691..58de8d7 100644 --- a/src/main.go +++ b/src/bpm/main.go @@ -4,7 +4,7 @@ import ( "bufio" "flag" "fmt" - "gitlab.com/bubble-package-manager/bpm/utils" + "git.enumerated.dev/bubble-package-manager/bpm/src/bpmlib" "log" "os" "path/filepath" @@ -42,7 +42,7 @@ var doCleanup = false var showRepoInfo = false func main() { - utils.ReadConfig() + bpmlib.ReadConfig() resolveFlags() resolveCommand() } @@ -102,30 +102,30 @@ func resolveCommand() { return } for n, pkg := range packages { - var info *utils.PackageInfo + var info *bpmlib.PackageInfo isFile := false if showRepoInfo { var err error - var entry *utils.RepositoryEntry - entry, _, err = utils.GetRepositoryEntry(pkg) + var entry *bpmlib.RepositoryEntry + entry, _, err = bpmlib.GetRepositoryEntry(pkg) if err != nil { - if entry = utils.ResolveVirtualPackage(pkg); entry == nil { + if entry = bpmlib.ResolveVirtualPackage(pkg); entry == nil { log.Fatalf("Error: could not find package (%s) in any repository\n", pkg) } } info = entry.Info } else if stat, err := os.Stat(pkg); err == nil && !stat.IsDir() { - bpmpkg, err := utils.ReadPackage(pkg) + bpmpkg, err := bpmlib.ReadPackage(pkg) if err != nil { log.Fatalf("Error: could not read package: %s\n", err) } info = bpmpkg.PkgInfo isFile = true } else { - if isVirtual, p := utils.IsVirtualPackage(pkg, rootDir); isVirtual { - info = utils.GetPackageInfo(p, rootDir) + if isVirtual, p := bpmlib.IsVirtualPackage(pkg, rootDir); isVirtual { + info = bpmlib.GetPackageInfo(p, rootDir) } else { - info = utils.GetPackageInfo(pkg, rootDir) + info = bpmlib.GetPackageInfo(pkg, rootDir) } } if info == nil { @@ -141,10 +141,10 @@ func resolveCommand() { } fmt.Println("File: " + abs) } - fmt.Println(utils.CreateReadableInfo(true, true, true, info, rootDir)) + fmt.Println(bpmlib.CreateReadableInfo(true, true, true, info, rootDir)) } case list: - packages, err := utils.GetInstalledPackages(rootDir) + packages, err := bpmlib.GetInstalledPackages(rootDir) if err != nil { log.Fatalf("Error: could not get installed packages: %s", err.Error()) return @@ -161,7 +161,7 @@ func resolveCommand() { return } for n, pkg := range packages { - info := utils.GetPackageInfo(pkg, rootDir) + info := bpmlib.GetPackageInfo(pkg, rootDir) if info == nil { fmt.Printf("Package (%s) could not be found\n", pkg) continue @@ -169,7 +169,7 @@ func resolveCommand() { if n != 0 { fmt.Println() } - fmt.Println(utils.CreateReadableInfo(true, true, true, info, rootDir)) + fmt.Println(bpmlib.CreateReadableInfo(true, true, true, info, rootDir)) } } case search: @@ -178,9 +178,9 @@ func resolveCommand() { log.Fatalf("Error: no search terms given") } for i, term := range searchTerms { - nameResults := make([]*utils.PackageInfo, 0) - descResults := make([]*utils.PackageInfo, 0) - for _, repo := range utils.BPMConfig.Repositories { + nameResults := make([]*bpmlib.PackageInfo, 0) + descResults := make([]*bpmlib.PackageInfo, 0) + for _, repo := range bpmlib.BPMConfig.Repositories { for _, entry := range repo.Entries { if strings.Contains(entry.Info.Name, term) { nameResults = append(nameResults, entry.Info) @@ -212,17 +212,17 @@ func resolveCommand() { } // Check if installationReason argument is valid - ir := utils.Unknown + ir := bpmlib.Unknown if installationReason == "manual" { - ir = utils.Manual + ir = bpmlib.Manual } else if installationReason == "dependency" { - ir = utils.Dependency + ir = bpmlib.Dependency } else if installationReason != "" { log.Fatalf("Error: %s is not a valid installation reason", installationReason) } - operation := utils.BPMOperation{ - Actions: make([]utils.OperationAction, 0), + operation := bpmlib.BPMOperation{ + Actions: make([]bpmlib.OperationAction, 0), UnresolvedDepends: make([]string, 0), Changes: make(map[string]string), RootDir: rootDir, @@ -232,37 +232,37 @@ func resolveCommand() { // Search for packages for _, pkg := range pkgs { if stat, err := os.Stat(pkg); err == nil && !stat.IsDir() { - bpmpkg, err := utils.ReadPackage(pkg) + bpmpkg, err := bpmlib.ReadPackage(pkg) if err != nil { log.Fatalf("Error: could not read package: %s\n", err) } - if !reinstall && utils.IsPackageInstalled(bpmpkg.PkgInfo.Name, rootDir) && utils.GetPackageInfo(bpmpkg.PkgInfo.Name, rootDir).GetFullVersion() == bpmpkg.PkgInfo.GetFullVersion() { + if !reinstall && bpmlib.IsPackageInstalled(bpmpkg.PkgInfo.Name, rootDir) && bpmlib.GetPackageInfo(bpmpkg.PkgInfo.Name, rootDir).GetFullVersion() == bpmpkg.PkgInfo.GetFullVersion() { continue } - operation.AppendAction(&utils.InstallPackageAction{ + operation.AppendAction(&bpmlib.InstallPackageAction{ File: pkg, IsDependency: false, BpmPackage: bpmpkg, }) } else { - var entry *utils.RepositoryEntry + var entry *bpmlib.RepositoryEntry - if e, _, err := utils.GetRepositoryEntry(pkg); err == nil { + if e, _, err := bpmlib.GetRepositoryEntry(pkg); err == nil { entry = e - } else if isVirtual, p := utils.IsVirtualPackage(pkg, rootDir); isVirtual { - entry, _, err = utils.GetRepositoryEntry(p) + } else if isVirtual, p := bpmlib.IsVirtualPackage(pkg, rootDir); isVirtual { + entry, _, err = bpmlib.GetRepositoryEntry(p) if err != nil { log.Fatalf("Error: could not find package (%s) in any repository\n", p) } - } else if e := utils.ResolveVirtualPackage(pkg); e != nil { + } else if e := bpmlib.ResolveVirtualPackage(pkg); e != nil { entry = e } else { log.Fatalf("Error: could not find package (%s) in any repository\n", pkg) } - if !reinstall && utils.IsPackageInstalled(entry.Info.Name, rootDir) && utils.GetPackageInfo(entry.Info.Name, rootDir).GetFullVersion() == entry.Info.GetFullVersion() { + if !reinstall && bpmlib.IsPackageInstalled(entry.Info.Name, rootDir) && bpmlib.GetPackageInfo(entry.Info.Name, rootDir).GetFullVersion() == entry.Info.GetFullVersion() { continue } - operation.AppendAction(&utils.FetchPackageAction{ + operation.AppendAction(&bpmlib.FetchPackageAction{ IsDependency: false, RepositoryEntry: entry, }) @@ -342,7 +342,7 @@ func resolveCommand() { // Sync repositories if !nosync { - for _, repo := range utils.BPMConfig.Repositories { + for _, repo := range bpmlib.BPMConfig.Repositories { fmt.Printf("Fetching package database for repository (%s)...\n", repo.Name) err := repo.SyncLocalDatabase() if err != nil { @@ -352,42 +352,42 @@ func resolveCommand() { fmt.Println("All package databases synced successfully!") } - utils.ReadConfig() + bpmlib.ReadConfig() // Get installed packages and check for updates - pkgs, err := utils.GetInstalledPackages(rootDir) + pkgs, err := bpmlib.GetInstalledPackages(rootDir) if err != nil { log.Fatalf("Error: could not get installed packages: %s\n", err) } - operation := utils.BPMOperation{ - Actions: make([]utils.OperationAction, 0), + operation := bpmlib.BPMOperation{ + Actions: make([]bpmlib.OperationAction, 0), UnresolvedDepends: make([]string, 0), Changes: make(map[string]string), RootDir: rootDir, - ForceInstallationReason: utils.Unknown, + ForceInstallationReason: bpmlib.Unknown, } // Search for packages for _, pkg := range pkgs { - if slices.Contains(utils.BPMConfig.IgnorePackages, pkg) { + if slices.Contains(bpmlib.BPMConfig.IgnorePackages, pkg) { continue } - var entry *utils.RepositoryEntry + var entry *bpmlib.RepositoryEntry // Check if installed package can be replaced and install that instead - if e := utils.FindReplacement(pkg); e != nil { + if e := bpmlib.FindReplacement(pkg); e != nil { entry = e - } else if entry, _, err = utils.GetRepositoryEntry(pkg); err != nil { + } else if entry, _, err = bpmlib.GetRepositoryEntry(pkg); err != nil { continue } - installedInfo := utils.GetPackageInfo(pkg, rootDir) + installedInfo := bpmlib.GetPackageInfo(pkg, rootDir) if installedInfo == nil { log.Fatalf("Error: could not get package info for (%s)\n", pkg) } else { - comparison := utils.ComparePackageVersions(*entry.Info, *installedInfo) + comparison := bpmlib.ComparePackageVersions(*entry.Info, *installedInfo) if comparison > 0 || reinstall { - operation.AppendAction(&utils.FetchPackageAction{ + operation.AppendAction(&bpmlib.FetchPackageAction{ IsDependency: false, RepositoryEntry: entry, }) @@ -450,7 +450,7 @@ func resolveCommand() { os.Exit(1) } } - for _, repo := range utils.BPMConfig.Repositories { + for _, repo := range bpmlib.BPMConfig.Repositories { fmt.Printf("Fetching package database for repository (%s)...\n", repo.Name) err := repo.SyncLocalDatabase() if err != nil { @@ -468,8 +468,8 @@ func resolveCommand() { return } - operation := &utils.BPMOperation{ - Actions: make([]utils.OperationAction, 0), + operation := &bpmlib.BPMOperation{ + Actions: make([]bpmlib.OperationAction, 0), UnresolvedDepends: make([]string, 0), Changes: make(map[string]string), RootDir: rootDir, @@ -477,11 +477,11 @@ func resolveCommand() { // Search for packages for _, pkg := range packages { - bpmpkg := utils.GetPackage(pkg, rootDir) + bpmpkg := bpmlib.GetPackage(pkg, rootDir) if bpmpkg == nil { continue } - operation.AppendAction(&utils.RemovePackageAction{BpmPackage: bpmpkg}) + operation.AppendAction(&bpmlib.RemovePackageAction{BpmPackage: bpmpkg}) } // Skip needed packages if the --unused flag is on @@ -531,8 +531,8 @@ func resolveCommand() { log.Fatalf("Error: this subcommand needs to be run with superuser permissions") } - operation := &utils.BPMOperation{ - Actions: make([]utils.OperationAction, 0), + operation := &bpmlib.BPMOperation{ + Actions: make([]bpmlib.OperationAction, 0), UnresolvedDepends: make([]string, 0), Changes: make(map[string]string), RootDir: rootDir, @@ -585,7 +585,7 @@ func resolveCommand() { if os.IsNotExist(err) { log.Fatalf("Error: file (%s) does not exist!\n", absFile) } - pkgs, err := utils.GetInstalledPackages(rootDir) + pkgs, err := bpmlib.GetInstalledPackages(rootDir) if err != nil { log.Fatalf("Error: could not get installed packages: %s\n", err.Error()) } @@ -604,7 +604,7 @@ func resolveCommand() { var pkgList []string for _, pkg := range pkgs { - if slices.ContainsFunc(utils.GetPackageFiles(pkg, rootDir), func(entry *utils.PackageFileEntry) bool { + if slices.ContainsFunc(bpmlib.GetPackageFiles(pkg, rootDir), func(entry *bpmlib.PackageFileEntry) bool { return entry.Path == absFile }) { pkgList = append(pkgList, pkg) @@ -694,8 +694,8 @@ func resolveFlags() { installFlagSet.StringVar(&rootDir, "R", "/", "Set the destination root") installFlagSet.BoolVar(&verbose, "v", false, "Show additional information about what BPM is doing") installFlagSet.BoolVar(&yesAll, "y", false, "Skip confirmation prompts") - installFlagSet.StringVar(&utils.BPMConfig.BinaryOutputDir, "o", utils.BPMConfig.BinaryOutputDir, "Set the binary output directory") - installFlagSet.StringVar(&utils.BPMConfig.CompilationDir, "c", utils.BPMConfig.CompilationDir, "Set the compilation directory") + installFlagSet.StringVar(&bpmlib.BPMConfig.BinaryOutputDir, "o", bpmlib.BPMConfig.BinaryOutputDir, "Set the binary output directory") + installFlagSet.StringVar(&bpmlib.BPMConfig.CompilationDir, "c", bpmlib.BPMConfig.CompilationDir, "Set the compilation directory") installFlagSet.BoolVar(&buildSource, "b", false, "Build binary package from source package") installFlagSet.BoolVar(&skipCheck, "s", false, "Skip check function during source compilation") installFlagSet.BoolVar(&keepTempDir, "k", false, "Keep temporary directory after source compilation") diff --git a/src/utils/config.go b/src/bpmlib/config.go similarity index 98% rename from src/utils/config.go rename to src/bpmlib/config.go index e57b03f..18e03c2 100644 --- a/src/utils/config.go +++ b/src/bpmlib/config.go @@ -1,4 +1,4 @@ -package utils +package bpmlib import ( "gopkg.in/yaml.v3" diff --git a/src/utils/extract_utils.go b/src/bpmlib/extract_utils.go similarity index 97% rename from src/utils/extract_utils.go rename to src/bpmlib/extract_utils.go index 6c51928..2f0b3e8 100644 --- a/src/utils/extract_utils.go +++ b/src/bpmlib/extract_utils.go @@ -1,4 +1,4 @@ -package utils +package bpmlib import ( "archive/tar" diff --git a/src/utils/general_utils.go b/src/bpmlib/general_utils.go similarity index 98% rename from src/utils/general_utils.go rename to src/bpmlib/general_utils.go index dd1e812..411a4fe 100644 --- a/src/utils/general_utils.go +++ b/src/bpmlib/general_utils.go @@ -1,4 +1,4 @@ -package utils +package bpmlib import ( "fmt" diff --git a/src/bpmlib/go.mod b/src/bpmlib/go.mod new file mode 100644 index 0000000..d0dabd5 --- /dev/null +++ b/src/bpmlib/go.mod @@ -0,0 +1,8 @@ +module git.enumerated.dev/bubble-package-manager/bpm/src/bpmlib + +go 1.23 + +require ( + github.com/knqyf263/go-rpm-version v0.0.0-20240918084003-2afd7dc6a38f + gopkg.in/yaml.v3 v3.0.1 +) diff --git a/src/bpmlib/go.sum b/src/bpmlib/go.sum new file mode 100644 index 0000000..8a51310 --- /dev/null +++ b/src/bpmlib/go.sum @@ -0,0 +1,6 @@ +github.com/knqyf263/go-rpm-version v0.0.0-20240918084003-2afd7dc6a38f h1:xt29M2T6STgldg+WEP51gGePQCsQvklmP2eIhPIBK3g= +github.com/knqyf263/go-rpm-version v0.0.0-20240918084003-2afd7dc6a38f/go.mod h1:i4sF0l1fFnY1aiw08QQSwVAFxHEm311Me3WsU/X7nL0= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/src/utils/hooks.go b/src/bpmlib/hooks.go similarity index 99% rename from src/utils/hooks.go rename to src/bpmlib/hooks.go index 28294f8..e0503d4 100644 --- a/src/utils/hooks.go +++ b/src/bpmlib/hooks.go @@ -1,4 +1,4 @@ -package utils +package bpmlib import ( "errors" diff --git a/src/utils/operations.go b/src/bpmlib/operations.go similarity index 99% rename from src/utils/operations.go rename to src/bpmlib/operations.go index ab3adeb..72d2979 100644 --- a/src/utils/operations.go +++ b/src/bpmlib/operations.go @@ -1,4 +1,4 @@ -package utils +package bpmlib import ( "errors" diff --git a/src/utils/package_utils.go b/src/bpmlib/package_utils.go similarity index 99% rename from src/utils/package_utils.go rename to src/bpmlib/package_utils.go index 443f981..b030cbe 100644 --- a/src/utils/package_utils.go +++ b/src/bpmlib/package_utils.go @@ -1,4 +1,4 @@ -package utils +package bpmlib import ( "archive/tar" diff --git a/src/utils/repo_utils.go b/src/bpmlib/repo_utils.go similarity index 99% rename from src/utils/repo_utils.go rename to src/bpmlib/repo_utils.go index 0cf8c1f..ffe64b2 100644 --- a/src/utils/repo_utils.go +++ b/src/bpmlib/repo_utils.go @@ -1,4 +1,4 @@ -package utils +package bpmlib import ( "errors" diff --git a/src/go.mod b/src/go.mod deleted file mode 100644 index eb5bc0a..0000000 --- a/src/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module gitlab.com/bubble-package-manager/bpm - -go 1.22 - -require ( - github.com/elliotchance/orderedmap/v2 v2.4.0 // indirect - github.com/knqyf263/go-rpm-version v0.0.0-20240918084003-2afd7dc6a38f // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect -)