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 committed 2018-01-04 08:32:50 +00:00
1 parent 2b47a4d9f0
commit df27396fa0
7 files changed
+122 -81

No files matched your search

+2 -1
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
}
+40 -42
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 {
+10 -18
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()
+10 -8
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
+53 -6
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
+2 -1
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
+5 -5
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 {