Fix AUR package detection for installed packages
This commit is contained in:
+28
-31
@@ -188,6 +188,9 @@ func (f *Fetcher) Resolve(packages []string) (map[string]*PackageInfo, error) {
|
|||||||
fmt.Fprintf(os.Stderr, "[debug] Resolve: starting...\n")
|
fmt.Fprintf(os.Stderr, "[debug] Resolve: starting...\n")
|
||||||
|
|
||||||
result := make(map[string]*PackageInfo)
|
result := make(map[string]*PackageInfo)
|
||||||
|
for _, pkg := range packages {
|
||||||
|
result[pkg] = &PackageInfo{Name: pkg, Exists: true}
|
||||||
|
}
|
||||||
|
|
||||||
localPkgs, err := f.buildLocalPkgMap()
|
localPkgs, err := f.buildLocalPkgMap()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -215,44 +218,38 @@ func (f *Fetcher) Resolve(packages []string) (map[string]*PackageInfo, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
fmt.Fprintf(os.Stderr, "[debug] Resolve: sync db checked (%.2fs)\n", time.Since(start).Seconds())
|
|
||||||
|
|
||||||
var notInSync []string
|
f.ensureAURCache(packages)
|
||||||
for _, pkg := range notInLocal {
|
|
||||||
if syncPkg, ok := syncPkgs[pkg]; ok {
|
for _, pkg := range packages {
|
||||||
result[pkg] = &PackageInfo{
|
info := result[pkg]
|
||||||
Name: pkg,
|
if info == nil {
|
||||||
Exists: true,
|
continue
|
||||||
InAUR: false,
|
|
||||||
Installed: false,
|
|
||||||
syncPkg: syncPkg,
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
notInSync = append(notInSync, pkg)
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if len(notInSync) > 0 {
|
if info.Installed {
|
||||||
f.ensureAURCache(notInSync)
|
|
||||||
fmt.Fprintf(os.Stderr, "[debug] Resolve: AUR cache ensured (%.2fs)\n", time.Since(start).Seconds())
|
|
||||||
|
|
||||||
var unfound []string
|
|
||||||
for _, pkg := range notInSync {
|
|
||||||
if aurInfo, ok := f.aurCache[pkg]; ok {
|
if aurInfo, ok := f.aurCache[pkg]; ok {
|
||||||
result[pkg] = &PackageInfo{
|
info.InAUR = true
|
||||||
Name: pkg,
|
info.AURInfo = &aurInfo
|
||||||
Exists: true,
|
|
||||||
InAUR: true,
|
|
||||||
Installed: false,
|
|
||||||
AURInfo: &aurInfo,
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
unfound = append(unfound, pkg)
|
|
||||||
}
|
}
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
if len(unfound) > 0 {
|
|
||||||
return nil, fmt.Errorf("package(s) not found: %s", strings.Join(unfound, ", "))
|
if syncPkg, ok := syncPkgs[pkg]; ok {
|
||||||
|
info.InAUR = false
|
||||||
|
info.Installed = false
|
||||||
|
info.syncPkg = syncPkg
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if aurInfo, ok := f.aurCache[pkg]; ok {
|
||||||
|
info.InAUR = true
|
||||||
|
info.Installed = false
|
||||||
|
info.AURInfo = &aurInfo
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, fmt.Errorf("package not found: %s", pkg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -200,7 +200,7 @@ func SyncPackages(packages []string) (int, error) {
|
|||||||
start := time.Now()
|
start := time.Now()
|
||||||
fmt.Fprintf(os.Stderr, "[debug] SyncPackages: starting...\n")
|
fmt.Fprintf(os.Stderr, "[debug] SyncPackages: starting...\n")
|
||||||
|
|
||||||
args := append([]string{"-Syu"}, packages...)
|
args := append([]string{"-S", "--needed"}, packages...)
|
||||||
cmd := exec.Command("pacman", args...)
|
cmd := exec.Command("pacman", args...)
|
||||||
output, err := cmd.CombinedOutput()
|
output, err := cmd.CombinedOutput()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -271,12 +271,10 @@ func DryRun(packages []string) (*output.Result, error) {
|
|||||||
if info == nil || !info.Exists {
|
if info == nil || !info.Exists {
|
||||||
return nil, fmt.Errorf("package not found: %s", pkg)
|
return nil, fmt.Errorf("package not found: %s", pkg)
|
||||||
}
|
}
|
||||||
if _, installed := localPkgs[pkg]; !installed {
|
if info.InAUR {
|
||||||
if info.InAUR {
|
aurPkgs = append(aurPkgs, pkg)
|
||||||
aurPkgs = append(aurPkgs, pkg)
|
} else if _, installed := localPkgs[pkg]; !installed {
|
||||||
} else {
|
toInstall = append(toInstall, pkg)
|
||||||
toInstall = append(toInstall, pkg)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fmt.Fprintf(os.Stderr, "[debug] DryRun: packages categorized (%.2fs)\n", time.Since(start).Seconds())
|
fmt.Fprintf(os.Stderr, "[debug] DryRun: packages categorized (%.2fs)\n", time.Since(start).Seconds())
|
||||||
|
|||||||
Reference in New Issue
Block a user