Teach passToPacman how to use argParsers

passToPacman now takes and argParser as a paramater. And is implemented
for the simple cases in cmd.go. Although passToPacman is now left non
working in places which still try to usr the old call format and will
need to be reimplemented.
This commit is contained in:
morganamilo 2018-01-03 18:42:40 +00:00
parent 2b47a4d9f0
commit df27396fa0
No known key found for this signature in database
GPG Key ID: 6FE9E7996B0B082E
7 changed files with 122 additions and 81 deletions

View File

@ -54,6 +54,7 @@ func cleanRemove(pkgName []string) (err error) {
return nil
}
err = passToPacman("-Rsnc", pkgName, []string{"--noconfirm"})
//TODO
//err = passToPacman("-Rsnc", pkgName, []string{"--noconfirm"})
return err
}

82
cmd.go
View File

@ -225,21 +225,21 @@ func handleCmd(parser *argParser) (changedConfig bool, err error) {
switch parser.op {
case "V", "version":
handleVersion()
handleVersion(parser)
case "D", "database":
//passToPacman()
passToPacman(parser)
case "F", "files":
//passToPacman()
passToPacman(parser)
case "Q", "query":
//passToPacman()
passToPacman(parser)
case "R", "remove":
//
passToPacman(parser)
case "S", "sync":
err = handleSync(parser)
case "T", "deptest":
//passToPacman()
passToPacman(parser)
case "U", "upgrade":
//passToPacman()
passToPacman(parser)
case "Y", "--yay":
err = handleYay(parser)
default:
@ -310,7 +310,7 @@ func handleConfig(option string) (changedConfig bool, err error) {
return
}
func handleVersion() {
func handleVersion(parser *argParser) {
fmt.Printf("yay v%s\n", version)
}
@ -338,8 +338,9 @@ func handleYay(parser *argParser) (err error) {
} else if parser.existsArg("stats") {
err = localStatistics()
} else if parser.existsArg("cleandeps") {
_,_,targets := parser.formatArgs()
err = cleanDependencies(targets)
//TODO
//_,_,targets := parser.formatArgs()
//err = cleanDependencies(targets)
} else {
err = handleYogurt(parser)
}
@ -348,41 +349,37 @@ func handleYay(parser *argParser) (err error) {
}
func handleYogurt(parser *argParser) (err error) {
_, options, targets := parser.formatArgs()
config.SearchMode = NumberMenu
err = numberMenu(targets, options)
// TODO
// _, options, targets := parser.formatArgs()
//
// config.SearchMode = NumberMenu
// err = numberMenu(targets, options)
//
return
}
func handleSync(parser *argParser) (err error) {
op, options, targets := parser.formatArgs()
fmt.Println("op", op)
fmt.Println("options", options)
fmt.Println("targets", targets)
if parser.existsArg("y") {
err = passToPacman("-Sy", nil, nil)
if err != nil {
return
}
}
if parser.existsArg("s") {
if parser.existsArg("i") {
config.SearchMode = Detailed
} else {
config.SortMode = Minimal
}
err = syncSearch(targets)
}
if len(targets) > 0 {
err = install(targets, options)
}
//TODO
// if parser.existsArg("y") || parser.existsArg("refresh") {
// err = passToPacman(parser)
// if err != nil {
// return
// }
// }
//
// if parser.existsArg("s") {
// if parser.existsArg("i") {
// config.SearchMode = Detailed
// } else {
// config.SortMode = Minimal
// }
//
// err = syncSearch(targets)
// }
//
// if len(targets) > 0 {
// err = install(targets, options)
// }
return
}
@ -451,7 +448,8 @@ func numberMenu(pkgS []string, flags []string) (err error) {
}
if len(repoI) != 0 {
err = passToPacman("-S", repoI, flags)
//TODO
//err = passToPacman("-S", repoI, flags)
}
if len(aurI) != 0 {

View File

@ -6,7 +6,6 @@ import (
"os"
"os/exec"
"os/user"
"strings"
alpm "github.com/jguer/go-alpm"
)
@ -198,25 +197,18 @@ func continueTask(s string, def string) (cont bool) {
}
// PassToPacman outsorces execution to pacman binary without modifications.
func passToPacman(op string, pkgs []string, flags []string) error {
func passToPacman(parser *argParser) error {
var cmd *exec.Cmd
var args []string
args = append(args, op)
if len(pkgs) != 0 {
args = append(args, pkgs...)
}
if len(flags) != 0 {
args = append(args, flags...)
}
if strings.Contains(op, "-Q") || op == "Si" {
cmd = exec.Command(config.PacmanBin, args...)
} else {
args = append([]string{config.PacmanBin}, args...)
cmd = exec.Command("sudo", args...)
args := make([]string, 0)
if parser.needRoot() {
args = append(args, "sudo")
}
args = append(args, "pacman")
args = append(args, parser.formatArgs()...)
cmd = exec.Command(args[0], args[1:]...)
cmd.Stdin, cmd.Stdout, cmd.Stderr = os.Stdin, os.Stdout, os.Stderr
err := cmd.Run()

View File

@ -14,10 +14,11 @@ func install(pkgs []string, flags []string) error {
aurs, repos, _ := packageSlices(pkgs)
if len(repos) != 0 {
err := passToPacman("-S", repos, flags)
if err != nil {
fmt.Println("Error installing repo packages.")
}
//TODO
// err := passToPacman("-S", repos, flags)
// if err != nil {
// fmt.Println("Error installing repo packages.")
// }
}
if len(aurs) != 0 {
@ -138,10 +139,11 @@ func PkgInstall(a *rpc.Pkg, flags []string) (finalmdeps []string, err error) {
}
// Repo dependencies
if len(repoDeps) != 0 {
errR := passToPacman("-S", repoDeps, depArgs)
if errR != nil {
return finalmdeps, errR
}
// TODO
// errR := passToPacman("-S", repoDeps, depArgs)
// if errR != nil {
// return finalmdeps, errR
// }
}
// Handle AUR dependencies

View File

@ -28,6 +28,52 @@ func (praser *argParser) delArg(option string) {
delete(praser.doubles, option)
}
func (parser *argParser) needRoot() bool {
if parser.existsArg("h") || parser.existsArg("help") {
return false
}
if parser.existsArg("p") || parser.existsArg("print") {
return false
}
switch parser.op {
case "V", "version":
return false
case "D", "database":
return true
case "F", "files":
if parser.existsArg("y") || parser.existsArg("refresh") {
return true
}
return false
case "Q", "query":
return false
case "R", "remove":
return true
case "S", "sync":
if parser.existsArg("s") || parser.existsArg("search") {
return false
}
if parser.existsArg("l") || parser.existsArg("list") {
return false
}
return true
case "T", "deptest":
return false
case "U", "upgrade":
return true
//yay specific
case "Y", "yay":
return false
case "G", "getpkgbuild":
return false
default:
return false
}
}
func (praser *argParser) addOP(op string) (err error) {
if praser.op != "" {
err = fmt.Errorf("only one operation may be used at a time")
@ -82,24 +128,25 @@ func (parser *argParser) existsDouble(option string) bool {
return ok
}
func (parser *argParser) formatArgs() (op string, options []string, targets []string) {
op = formatArg(parser.op)
func (parser *argParser) formatArgs() (args []string) {
op := formatArg(parser.op)
args = append(args, op)
for option, arg := range parser.options {
option = formatArg(option)
options = append(options, option)
args = append(args, option)
if arg != "" {
options = append(options, arg)
args = append(args, arg)
}
if parser.existsDouble(option) {
options = append(options, option)
args = append(args, option)
}
}
for target := range parser.targets {
targets = append(targets, target)
args = append(args, target)
}
return

View File

@ -169,7 +169,8 @@ func syncInfo(pkgS []string, flags []string) (err error) {
}
if len(repoS) != 0 {
err = passToPacman("-Si", repoS, flags)
//TODO
//err = passToPacman("-Si", repoS, flags)
}
return

View File

@ -332,11 +332,11 @@ func upgradePkgs(flags []string) error {
}
repoNames = append(repoNames, k.Name)
}
err := passToPacman("-S", repoNames, append(flags, "--noconfirm"))
if err != nil {
fmt.Println("Error upgrading repo packages.")
}
// TODO
// err := passToPacman("-S", repoNames, append(flags, "--noconfirm"))
// if err != nil {
// fmt.Println("Error upgrading repo packages.")
// }
}
if len(aurUp) != 0 {