adds conflicting packages prompt

This commit is contained in:
Jguer 2018-02-07 12:36:51 +00:00
parent c0901ff86b
commit 28515c8beb

View file

@ -5,6 +5,7 @@ import (
"os" "os"
"os/exec" "os/exec"
alpm "github.com/jguer/go-alpm"
rpc "github.com/mikkeloscar/aur" rpc "github.com/mikkeloscar/aur"
gopkg "github.com/mikkeloscar/gopkgbuild" gopkg "github.com/mikkeloscar/gopkgbuild"
) )
@ -37,7 +38,7 @@ func install(parser *arguments) error {
if len(aurs) != 0 { if len(aurs) != 0 {
//todo make pretty //todo make pretty
fmt.Println("Resolving Dependencies") fmt.Println(greenFg(arrow), greenFg("Resolving Dependencies"))
dt, err := getDepTree(aurs) dt, err := getDepTree(aurs)
if err != nil { if err != nil {
@ -75,12 +76,19 @@ func install(parser *arguments) error {
askCleanBuilds(dc.AurMake) askCleanBuilds(dc.AurMake)
askCleanBuilds(dc.Aur) askCleanBuilds(dc.Aur)
fmt.Println() fmt.Println()
if !continueTask("Proceed with download?", "nN") { if !continueTask("Proceed with install?", "nN") {
return fmt.Errorf("Aborting due to user") return fmt.Errorf("Aborting due to user")
} }
// if !continueTask("Proceed with download?", "nN") {
// return fmt.Errorf("Aborting due to user")
// }
err = checkForConflicts(dc.Aur, dc.AurMake, dc.Repo, dc.RepoMake)
if err != nil {
return err
}
err = dowloadPkgBuilds(dc.AurMake) err = dowloadPkgBuilds(dc.AurMake)
if err != nil { if err != nil {
@ -94,9 +102,9 @@ func install(parser *arguments) error {
askEditPkgBuilds(dc.AurMake) askEditPkgBuilds(dc.AurMake)
askEditPkgBuilds(dc.Aur) askEditPkgBuilds(dc.Aur)
if !continueTask("Proceed with install?", "nN") { // if !continueTask("Proceed with install?", "nN") {
return fmt.Errorf("Aborting due to user") // return fmt.Errorf("Aborting due to user")
} // }
err = downloadPkgBuildsSources(dc.AurMake) err = downloadPkgBuildsSources(dc.AurMake)
if err != nil { if err != nil {
@ -122,7 +130,7 @@ func install(parser *arguments) error {
} }
removeArguments := makeArguments() removeArguments := makeArguments()
removeArguments.addArg("R") removeArguments.addOP("R")
for _, pkg := range dc.RepoMake { for _, pkg := range dc.RepoMake {
removeArguments.addTarget(pkg.Name()) removeArguments.addTarget(pkg.Name())
@ -132,7 +140,10 @@ func install(parser *arguments) error {
removeArguments.addTarget(pkg.Name) removeArguments.addTarget(pkg.Name)
} }
oldValue := config.NoConfirm
config.NoConfirm = true
passToPacman(removeArguments) passToPacman(removeArguments)
config.NoConfirm = oldValue
} }
return nil return nil
@ -153,6 +164,76 @@ func askCleanBuilds(pkgs []*rpc.Pkg) {
} }
} }
func checkForConflicts(aur []*rpc.Pkg, aurMake []*rpc.Pkg, repo []*alpm.Package,
repoMake []*alpm.Package) error {
localDb, err := alpmHandle.LocalDb()
if err != nil {
return err
}
var toRemove []string
for _, pkg := range aur {
for _, cpkg := range pkg.Conflicts {
if _, err := localDb.PkgByName(cpkg); err == nil {
toRemove = append(toRemove, cpkg)
}
}
}
for _, pkg := range aurMake {
for _, cpkg := range pkg.Conflicts {
if _, err := localDb.PkgByName(cpkg); err == nil {
toRemove = append(toRemove, cpkg)
}
}
}
for _, pkg := range repo {
pkg.Conflicts().ForEach(func(conf alpm.Depend) error {
if _, err := localDb.PkgByName(conf.Name); err == nil {
toRemove = append(toRemove, conf.Name)
}
return nil
})
}
for _, pkg := range repoMake {
pkg.Conflicts().ForEach(func(conf alpm.Depend) error {
if _, err := localDb.PkgByName(conf.Name); err == nil {
toRemove = append(toRemove, conf.Name)
}
return nil
})
}
if len(toRemove) != 0 {
fmt.Println(
redFg("The following packages conflict with packages to install:"))
for _, pkg := range toRemove {
fmt.Println(yellowFg(pkg))
}
if !continueTask("Remove conflicting package(s)?", "nN") {
return fmt.Errorf("Aborting due to user")
}
removeArguments := makeArguments()
removeArguments.addArg("R", "d", "d")
for _, pkg := range toRemove {
removeArguments.addTarget(pkg)
}
oldValue := config.NoConfirm
config.NoConfirm = true
passToPacman(removeArguments)
config.NoConfirm = oldValue
}
return nil
}
func askEditPkgBuilds(pkgs []*rpc.Pkg) { func askEditPkgBuilds(pkgs []*rpc.Pkg) {
for _, pkg := range pkgs { for _, pkg := range pkgs {
dir := config.BuildDir + pkg.PackageBase + "/" dir := config.BuildDir + pkg.PackageBase + "/"