Reorder functions to follow public-first convention
This commit is contained in:
+55
-52
@@ -19,6 +19,59 @@ type Handle struct {
|
|||||||
syncDBs []dyalpm.Database
|
syncDBs []dyalpm.Database
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (h *Handle) LocalPackages() (map[string]dyalpm.Package, error) {
|
||||||
|
start := time.Now()
|
||||||
|
log.Debug("LocalPackages: starting...")
|
||||||
|
|
||||||
|
localPkgs := make(map[string]dyalpm.Package)
|
||||||
|
|
||||||
|
err := h.localDB.PkgCache().ForEach(func(pkg dyalpm.Package) error {
|
||||||
|
localPkgs[pkg.Name()] = pkg
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to iterate local package cache: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Debug("LocalPackages: done (%.2fs)", time.Since(start).Seconds())
|
||||||
|
return localPkgs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *Handle) Release() error {
|
||||||
|
if h.handle != nil {
|
||||||
|
h.handle.Release()
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *Handle) SyncPackages(pkgNames []string) (map[string]dyalpm.Package, error) {
|
||||||
|
start := time.Now()
|
||||||
|
log.Debug("SyncPackages: starting...")
|
||||||
|
|
||||||
|
syncPkgs := make(map[string]dyalpm.Package)
|
||||||
|
pkgSet := make(map[string]bool)
|
||||||
|
for _, name := range pkgNames {
|
||||||
|
pkgSet[name] = true
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, db := range h.syncDBs {
|
||||||
|
err := db.PkgCache().ForEach(func(pkg dyalpm.Package) error {
|
||||||
|
if pkgSet[pkg.Name()] {
|
||||||
|
if _, exists := syncPkgs[pkg.Name()]; !exists {
|
||||||
|
syncPkgs[pkg.Name()] = pkg
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to iterate sync database %s: %w", db.Name(), err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Debug("SyncPackages: done (%.2fs)", time.Since(start).Seconds())
|
||||||
|
return syncPkgs, nil
|
||||||
|
}
|
||||||
|
|
||||||
func New() (*Handle, error) {
|
func New() (*Handle, error) {
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
log.Debug("alpm.New: starting...")
|
log.Debug("alpm.New: starting...")
|
||||||
@@ -56,12 +109,8 @@ func New() (*Handle, error) {
|
|||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *Handle) Release() error {
|
// -----------------------------------------
|
||||||
if h.handle != nil {
|
// private
|
||||||
h.handle.Release()
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func registerSyncDBs(handle dyalpm.Handle) ([]dyalpm.Database, error) {
|
func registerSyncDBs(handle dyalpm.Handle) ([]dyalpm.Database, error) {
|
||||||
log.Debug("registerSyncDBs: starting...")
|
log.Debug("registerSyncDBs: starting...")
|
||||||
@@ -89,49 +138,3 @@ func registerSyncDBs(handle dyalpm.Handle) ([]dyalpm.Database, error) {
|
|||||||
log.Debug("registerSyncDBs: done (%d dbs)", len(dbs))
|
log.Debug("registerSyncDBs: done (%d dbs)", len(dbs))
|
||||||
return dbs, nil
|
return dbs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *Handle) LocalPackages() (map[string]dyalpm.Package, error) {
|
|
||||||
start := time.Now()
|
|
||||||
log.Debug("LocalPackages: starting...")
|
|
||||||
|
|
||||||
localPkgs := make(map[string]dyalpm.Package)
|
|
||||||
|
|
||||||
err := h.localDB.PkgCache().ForEach(func(pkg dyalpm.Package) error {
|
|
||||||
localPkgs[pkg.Name()] = pkg
|
|
||||||
return nil
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("failed to iterate local package cache: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Debug("LocalPackages: done (%.2fs)", time.Since(start).Seconds())
|
|
||||||
return localPkgs, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (h *Handle) SyncPackages(pkgNames []string) (map[string]dyalpm.Package, error) {
|
|
||||||
start := time.Now()
|
|
||||||
log.Debug("SyncPackages: starting...")
|
|
||||||
|
|
||||||
syncPkgs := make(map[string]dyalpm.Package)
|
|
||||||
pkgSet := make(map[string]bool)
|
|
||||||
for _, name := range pkgNames {
|
|
||||||
pkgSet[name] = true
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, db := range h.syncDBs {
|
|
||||||
err := db.PkgCache().ForEach(func(pkg dyalpm.Package) error {
|
|
||||||
if pkgSet[pkg.Name()] {
|
|
||||||
if _, exists := syncPkgs[pkg.Name()]; !exists {
|
|
||||||
syncPkgs[pkg.Name()] = pkg
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("failed to iterate sync database %s: %w", db.Name(), err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Debug("SyncPackages: done (%.2fs)", time.Since(start).Seconds())
|
|
||||||
return syncPkgs, nil
|
|
||||||
}
|
|
||||||
|
|||||||
+26
-26
@@ -22,32 +22,6 @@ type Fetcher struct {
|
|||||||
aurClient *aur.Client
|
aurClient *aur.Client
|
||||||
}
|
}
|
||||||
|
|
||||||
func New() (*Fetcher, error) {
|
|
||||||
start := time.Now()
|
|
||||||
log.Debug("fetch.Fetcher New: starting...")
|
|
||||||
|
|
||||||
alpmHandle, err := alpm.New()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
aurClient := aur.New()
|
|
||||||
|
|
||||||
log.Debug("fetch.Fetcher New: done (%.2fs)", time.Since(start).Seconds())
|
|
||||||
return &Fetcher{
|
|
||||||
alpmHandle: alpmHandle,
|
|
||||||
aurClient: aurClient,
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *Fetcher) Close() error {
|
|
||||||
return f.alpmHandle.Release()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *Fetcher) GetAURPackage(name string) (aur.Package, bool) {
|
|
||||||
return f.aurClient.Get(name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *Fetcher) BuildLocalPkgMap() (map[string]interface{}, error) {
|
func (f *Fetcher) BuildLocalPkgMap() (map[string]interface{}, error) {
|
||||||
localPkgs, err := f.alpmHandle.LocalPackages()
|
localPkgs, err := f.alpmHandle.LocalPackages()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -60,6 +34,14 @@ func (f *Fetcher) BuildLocalPkgMap() (map[string]interface{}, error) {
|
|||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (f *Fetcher) Close() error {
|
||||||
|
return f.alpmHandle.Release()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *Fetcher) GetAURPackage(name string) (aur.Package, bool) {
|
||||||
|
return f.aurClient.Get(name)
|
||||||
|
}
|
||||||
|
|
||||||
func (f *Fetcher) Resolve(packages []string) (map[string]*PackageInfo, error) {
|
func (f *Fetcher) Resolve(packages []string) (map[string]*PackageInfo, error) {
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
log.Debug("fetch.Resolve: starting...")
|
log.Debug("fetch.Resolve: starting...")
|
||||||
@@ -130,3 +112,21 @@ func (f *Fetcher) Resolve(packages []string) (map[string]*PackageInfo, error) {
|
|||||||
log.Debug("fetch.Resolve: done (%.2fs)", time.Since(start).Seconds())
|
log.Debug("fetch.Resolve: done (%.2fs)", time.Since(start).Seconds())
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func New() (*Fetcher, error) {
|
||||||
|
start := time.Now()
|
||||||
|
log.Debug("fetch.Fetcher New: starting...")
|
||||||
|
|
||||||
|
alpmHandle, err := alpm.New()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
aurClient := aur.New()
|
||||||
|
|
||||||
|
log.Debug("fetch.Fetcher New: done (%.2fs)", time.Since(start).Seconds())
|
||||||
|
return &Fetcher{
|
||||||
|
alpmHandle: alpmHandle,
|
||||||
|
aurClient: aurClient,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|||||||
+16
-21
@@ -10,12 +10,21 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
// -----------------------------------------
|
|
||||||
|
|
||||||
var logFile *os.File
|
var logFile *os.File
|
||||||
var Verbose bool
|
var Verbose bool
|
||||||
|
|
||||||
// -----------------------------------------
|
func Close() error {
|
||||||
|
if logFile == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return logFile.Close()
|
||||||
|
}
|
||||||
|
|
||||||
|
func Command(name string, args ...string) *exec.Cmd {
|
||||||
|
cmdStr := name + " " + strings.Join(args, " ")
|
||||||
|
fmt.Fprintf(logFile, "[cmd] %s\n", cmdStr)
|
||||||
|
return exec.Command(name, args...)
|
||||||
|
}
|
||||||
|
|
||||||
func Debug(format string, args ...interface{}) {
|
func Debug(format string, args ...interface{}) {
|
||||||
if !Verbose {
|
if !Verbose {
|
||||||
@@ -24,7 +33,9 @@ func Debug(format string, args ...interface{}) {
|
|||||||
fmt.Fprintf(os.Stderr, "[debug] "+format+"\n", args...)
|
fmt.Fprintf(os.Stderr, "[debug] "+format+"\n", args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------
|
func GetLogWriter() io.Writer {
|
||||||
|
return logFile
|
||||||
|
}
|
||||||
|
|
||||||
func OpenLog() error {
|
func OpenLog() error {
|
||||||
logPath := filepath.Join("/var/log", "declpac.log")
|
logPath := filepath.Join("/var/log", "declpac.log")
|
||||||
@@ -37,28 +48,12 @@ func OpenLog() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetLogWriter() io.Writer {
|
|
||||||
return logFile
|
|
||||||
}
|
|
||||||
|
|
||||||
func Write(msg []byte) {
|
func Write(msg []byte) {
|
||||||
logFile.Write(msg)
|
logFile.Write(msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
func Command(name string, args ...string) *exec.Cmd {
|
|
||||||
cmdStr := name + " " + strings.Join(args, " ")
|
|
||||||
fmt.Fprintf(logFile, "[cmd] %s\n", cmdStr)
|
|
||||||
return exec.Command(name, args...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Close() error {
|
|
||||||
if logFile == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return logFile.Close()
|
|
||||||
}
|
|
||||||
|
|
||||||
// -----------------------------------------
|
// -----------------------------------------
|
||||||
|
// private
|
||||||
|
|
||||||
func writeTimestamp() {
|
func writeTimestamp() {
|
||||||
ts := time.Now().Format("2006-01-02 15:04:05")
|
ts := time.Now().Format("2006-01-02 15:04:05")
|
||||||
|
|||||||
+21
-18
@@ -117,6 +117,9 @@ func Sync(packages []string, noCheck bool, prune bool) (*output.Result, error) {
|
|||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------
|
||||||
|
// private
|
||||||
|
|
||||||
func categorizePackages(f *fetch.Fetcher, packages []string) (pacmanPkgs, aurPkgs []string, err error) {
|
func categorizePackages(f *fetch.Fetcher, packages []string) (pacmanPkgs, aurPkgs []string, err error) {
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
log.Debug("categorizePackages: starting...")
|
log.Debug("categorizePackages: starting...")
|
||||||
@@ -143,24 +146,6 @@ func categorizePackages(f *fetch.Fetcher, packages []string) (pacmanPkgs, aurPkg
|
|||||||
return pacmanPkgs, aurPkgs, nil
|
return pacmanPkgs, aurPkgs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func markAllAsDeps() error {
|
|
||||||
start := time.Now()
|
|
||||||
log.Debug("markAllAsDeps: starting...")
|
|
||||||
|
|
||||||
packages, err := read.List()
|
|
||||||
if err != nil || len(packages) == 0 {
|
|
||||||
return fmt.Errorf("failed to list packages: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := sync.MarkAs(packages, "deps", log.GetLogWriter()); err != nil {
|
|
||||||
log.Write([]byte(fmt.Sprintf("error: %v\n", err)))
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Debug("markAllAsDeps: done (%.2fs)", time.Since(start).Seconds())
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func cleanupOrphans() (int, error) {
|
func cleanupOrphans() (int, error) {
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
log.Debug("cleanupOrphans: starting...")
|
log.Debug("cleanupOrphans: starting...")
|
||||||
@@ -180,3 +165,21 @@ func cleanupOrphans() (int, error) {
|
|||||||
log.Debug("cleanupOrphans: done (%.2fs)", time.Since(start).Seconds())
|
log.Debug("cleanupOrphans: done (%.2fs)", time.Since(start).Seconds())
|
||||||
return removed, nil
|
return removed, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func markAllAsDeps() error {
|
||||||
|
start := time.Now()
|
||||||
|
log.Debug("markAllAsDeps: starting...")
|
||||||
|
|
||||||
|
packages, err := read.List()
|
||||||
|
if err != nil || len(packages) == 0 {
|
||||||
|
return fmt.Errorf("failed to list packages: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := sync.MarkAs(packages, "deps", log.GetLogWriter()); err != nil {
|
||||||
|
log.Write([]byte(fmt.Sprintf("error: %v\n", err)))
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Debug("markAllAsDeps: done (%.2fs)", time.Since(start).Seconds())
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|||||||
+64
-65
@@ -16,71 +16,6 @@ import (
|
|||||||
|
|
||||||
var LockFile = "/var/lib/pacman/db.lock"
|
var LockFile = "/var/lib/pacman/db.lock"
|
||||||
|
|
||||||
func List() ([]string, error) {
|
|
||||||
start := time.Now()
|
|
||||||
log.Debug("List: starting...")
|
|
||||||
|
|
||||||
cmd := exec.Command("pacman", "-Qq")
|
|
||||||
output, err := cmd.Output()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
list := strings.Split(strings.TrimSpace(string(output)), "\n")
|
|
||||||
if list[0] == "" {
|
|
||||||
list = nil
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Debug("List: done (%.2fs)", time.Since(start).Seconds())
|
|
||||||
return list, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func ExplicitList() ([]string, error) {
|
|
||||||
start := time.Now()
|
|
||||||
log.Debug("ExplicitList: starting...")
|
|
||||||
|
|
||||||
cmd := exec.Command("pacman", "-Qqe")
|
|
||||||
output, err := cmd.Output()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
list := strings.Split(strings.TrimSpace(string(output)), "\n")
|
|
||||||
if len(list) > 0 && list[0] == "" {
|
|
||||||
list = nil
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Debug("ExplicitList: done (%.2fs)", time.Since(start).Seconds())
|
|
||||||
return list, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func ListOrphans() ([]string, error) {
|
|
||||||
start := time.Now()
|
|
||||||
log.Debug("ListOrphans: starting...")
|
|
||||||
|
|
||||||
cmd := exec.Command("pacman", "-Qdtq")
|
|
||||||
var stderr bytes.Buffer
|
|
||||||
cmd.Stderr = &stderr
|
|
||||||
|
|
||||||
output, err := cmd.Output()
|
|
||||||
if err != nil {
|
|
||||||
// pacman -Qdtq exits 1 when there are no orphans, this isnt an error
|
|
||||||
var exitErr *exec.ExitError
|
|
||||||
if errors.As(err, &exitErr) && exitErr.ExitCode() == 1 && stderr.Len() == 0 {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
orphans := strings.Split(strings.TrimSpace(string(output)), "\n")
|
|
||||||
if len(orphans) > 0 && orphans[0] == "" {
|
|
||||||
orphans = orphans[1:]
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Debug("ListOrphans: done (%.2fs)", time.Since(start).Seconds())
|
|
||||||
return orphans, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func DBFreshness() (bool, error) {
|
func DBFreshness() (bool, error) {
|
||||||
info, err := os.Stat(LockFile)
|
info, err := os.Stat(LockFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -148,3 +83,67 @@ func DryRun(packages []string) (*output.Result, error) {
|
|||||||
ToRemove: toRemove,
|
ToRemove: toRemove,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ExplicitList() ([]string, error) {
|
||||||
|
start := time.Now()
|
||||||
|
log.Debug("ExplicitList: starting...")
|
||||||
|
|
||||||
|
cmd := exec.Command("pacman", "-Qqe")
|
||||||
|
output, err := cmd.Output()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
list := strings.Split(strings.TrimSpace(string(output)), "\n")
|
||||||
|
if len(list) > 0 && list[0] == "" {
|
||||||
|
list = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Debug("ExplicitList: done (%.2fs)", time.Since(start).Seconds())
|
||||||
|
return list, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func List() ([]string, error) {
|
||||||
|
start := time.Now()
|
||||||
|
log.Debug("List: starting...")
|
||||||
|
|
||||||
|
cmd := exec.Command("pacman", "-Qq")
|
||||||
|
output, err := cmd.Output()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
list := strings.Split(strings.TrimSpace(string(output)), "\n")
|
||||||
|
if list[0] == "" {
|
||||||
|
list = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Debug("List: done (%.2fs)", time.Since(start).Seconds())
|
||||||
|
return list, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func ListOrphans() ([]string, error) {
|
||||||
|
start := time.Now()
|
||||||
|
log.Debug("ListOrphans: starting...")
|
||||||
|
|
||||||
|
cmd := exec.Command("pacman", "-Qdtq")
|
||||||
|
var stderr bytes.Buffer
|
||||||
|
cmd.Stderr = &stderr
|
||||||
|
|
||||||
|
output, err := cmd.Output()
|
||||||
|
if err != nil {
|
||||||
|
var exitErr *exec.ExitError
|
||||||
|
if errors.As(err, &exitErr) && exitErr.ExitCode() == 1 && stderr.Len() == 0 {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
orphans := strings.Split(strings.TrimSpace(string(output)), "\n")
|
||||||
|
if len(orphans) > 0 && orphans[0] == "" {
|
||||||
|
orphans = orphans[1:]
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Debug("ListOrphans: done (%.2fs)", time.Since(start).Seconds())
|
||||||
|
return orphans, nil
|
||||||
|
}
|
||||||
|
|||||||
+98
-95
@@ -15,101 +15,6 @@ type Result struct {
|
|||||||
Removed int
|
Removed int
|
||||||
}
|
}
|
||||||
|
|
||||||
func SyncPackages(packages []string, logWriter io.Writer) error {
|
|
||||||
start := time.Now()
|
|
||||||
log.Debug("SyncPackages: starting...")
|
|
||||||
|
|
||||||
if logWriter == nil {
|
|
||||||
logWriter = os.Stderr
|
|
||||||
}
|
|
||||||
|
|
||||||
args := append([]string{"-S", "--needed", "--noconfirm"}, packages...)
|
|
||||||
cmd := log.Command("pacman", args...)
|
|
||||||
cmd.Stdout = logWriter
|
|
||||||
cmd.Stderr = logWriter
|
|
||||||
err := cmd.Run()
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("pacman sync failed: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Debug("SyncPackages: done (%.2fs)", time.Since(start).Seconds())
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func RefreshDB(logWriter io.Writer) error {
|
|
||||||
start := time.Now()
|
|
||||||
log.Debug("RefreshDB: starting...")
|
|
||||||
|
|
||||||
if logWriter == nil {
|
|
||||||
logWriter = os.Stderr
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd := log.Command("pacman", "-Syy")
|
|
||||||
cmd.Stdout = logWriter
|
|
||||||
cmd.Stderr = logWriter
|
|
||||||
if err := cmd.Run(); err != nil {
|
|
||||||
return fmt.Errorf("failed to refresh pacman database: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Debug("RefreshDB: done (%.2fs)", time.Since(start).Seconds())
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func MarkAs(packages []string, flag string, logWriter io.Writer) error {
|
|
||||||
if len(packages) == 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
start := time.Now()
|
|
||||||
flagName := map[string]string{"deps": "asdeps", "explicit": "asexplicit"}[flag]
|
|
||||||
log.Debug("MarkAs(%s): starting...", flag)
|
|
||||||
|
|
||||||
if logWriter == nil {
|
|
||||||
logWriter = os.Stderr
|
|
||||||
}
|
|
||||||
|
|
||||||
args := append([]string{"-D", "--" + flagName}, packages...)
|
|
||||||
cmd := log.Command("pacman", args...)
|
|
||||||
cmd.Stdout = logWriter
|
|
||||||
cmd.Stderr = logWriter
|
|
||||||
err := cmd.Run()
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("mark as %s failed: %w", flag, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Debug("MarkAs(%s): done (%.2fs)", flag, time.Since(start).Seconds())
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func RemoveOrphans(orphans []string, logWriter io.Writer) (int, error) {
|
|
||||||
start := time.Now()
|
|
||||||
log.Debug("RemoveOrphans: starting...")
|
|
||||||
|
|
||||||
if logWriter == nil {
|
|
||||||
logWriter = os.Stderr
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(orphans) == 0 {
|
|
||||||
log.Debug("RemoveOrphans: done (no orphans) (%.2fs)", time.Since(start).Seconds())
|
|
||||||
return 0, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
args := make([]string, 0, 3+len(orphans))
|
|
||||||
args = append(args, "pacman", "-Rns", "--noconfirm")
|
|
||||||
args = append(args, orphans...)
|
|
||||||
removeCmd := log.Command(args[0], args[1:]...)
|
|
||||||
removeCmd.Stdout = logWriter
|
|
||||||
removeCmd.Stderr = logWriter
|
|
||||||
err := removeCmd.Run()
|
|
||||||
if err != nil {
|
|
||||||
return 0, fmt.Errorf("remove orphans failed: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
count := len(orphans)
|
|
||||||
|
|
||||||
log.Debug("RemoveOrphans: done (%d) (%.2fs)", count, time.Since(start).Seconds())
|
|
||||||
return count, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func InstallAUR(pkgName string, packageBase string, logWriter io.Writer) error {
|
func InstallAUR(pkgName string, packageBase string, logWriter io.Writer) error {
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
log.Debug("InstallAUR: starting...")
|
log.Debug("InstallAUR: starting...")
|
||||||
@@ -166,6 +71,104 @@ func InstallAUR(pkgName string, packageBase string, logWriter io.Writer) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MarkAs(packages []string, flag string, logWriter io.Writer) error {
|
||||||
|
if len(packages) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
start := time.Now()
|
||||||
|
flagName := map[string]string{"deps": "asdeps", "explicit": "asexplicit"}[flag]
|
||||||
|
log.Debug("MarkAs(%s): starting...", flag)
|
||||||
|
|
||||||
|
if logWriter == nil {
|
||||||
|
logWriter = os.Stderr
|
||||||
|
}
|
||||||
|
|
||||||
|
args := append([]string{"-D", "--" + flagName}, packages...)
|
||||||
|
cmd := log.Command("pacman", args...)
|
||||||
|
cmd.Stdout = logWriter
|
||||||
|
cmd.Stderr = logWriter
|
||||||
|
err := cmd.Run()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("mark as %s failed: %w", flag, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Debug("MarkAs(%s): done (%.2fs)", flag, time.Since(start).Seconds())
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func RefreshDB(logWriter io.Writer) error {
|
||||||
|
start := time.Now()
|
||||||
|
log.Debug("RefreshDB: starting...")
|
||||||
|
|
||||||
|
if logWriter == nil {
|
||||||
|
logWriter = os.Stderr
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd := log.Command("pacman", "-Syy")
|
||||||
|
cmd.Stdout = logWriter
|
||||||
|
cmd.Stderr = logWriter
|
||||||
|
if err := cmd.Run(); err != nil {
|
||||||
|
return fmt.Errorf("failed to refresh pacman database: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Debug("RefreshDB: done (%.2fs)", time.Since(start).Seconds())
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func RemoveOrphans(orphans []string, logWriter io.Writer) (int, error) {
|
||||||
|
start := time.Now()
|
||||||
|
log.Debug("RemoveOrphans: starting...")
|
||||||
|
|
||||||
|
if logWriter == nil {
|
||||||
|
logWriter = os.Stderr
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(orphans) == 0 {
|
||||||
|
log.Debug("RemoveOrphans: done (no orphans) (%.2fs)", time.Since(start).Seconds())
|
||||||
|
return 0, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
args := make([]string, 0, 3+len(orphans))
|
||||||
|
args = append(args, "pacman", "-Rns", "--noconfirm")
|
||||||
|
args = append(args, orphans...)
|
||||||
|
removeCmd := log.Command(args[0], args[1:]...)
|
||||||
|
removeCmd.Stdout = logWriter
|
||||||
|
removeCmd.Stderr = logWriter
|
||||||
|
err := removeCmd.Run()
|
||||||
|
if err != nil {
|
||||||
|
return 0, fmt.Errorf("remove orphans failed: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
count := len(orphans)
|
||||||
|
|
||||||
|
log.Debug("RemoveOrphans: done (%d) (%.2fs)", count, time.Since(start).Seconds())
|
||||||
|
return count, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func SyncPackages(packages []string, logWriter io.Writer) error {
|
||||||
|
start := time.Now()
|
||||||
|
log.Debug("SyncPackages: starting...")
|
||||||
|
|
||||||
|
if logWriter == nil {
|
||||||
|
logWriter = os.Stderr
|
||||||
|
}
|
||||||
|
|
||||||
|
args := append([]string{"-S", "--needed", "--noconfirm"}, packages...)
|
||||||
|
cmd := log.Command("pacman", args...)
|
||||||
|
cmd.Stdout = logWriter
|
||||||
|
cmd.Stderr = logWriter
|
||||||
|
err := cmd.Run()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("pacman sync failed: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Debug("SyncPackages: done (%.2fs)", time.Since(start).Seconds())
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------
|
||||||
|
// private
|
||||||
|
|
||||||
func findPKGFile(pkgName string, dir string) (string, error) {
|
func findPKGFile(pkgName string, dir string) (string, error) {
|
||||||
entries, err := os.ReadDir(dir)
|
entries, err := os.ReadDir(dir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user