mirror of
https://github.com/Jguer/yay.git
synced 2025-10-04 00:03:11 -04:00
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:
parent
2b47a4d9f0
commit
df27396fa0
3
clean.go
3
clean.go
@ -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
82
cmd.go
@ -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 {
|
||||
|
28
config.go
28
config.go
@ -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()
|
||||
|
18
install.go
18
install.go
@ -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
|
||||
|
59
parser.go
59
parser.go
@ -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
|
||||
|
3
query.go
3
query.go
@ -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
|
||||
|
10
upgrade.go
10
upgrade.go
@ -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 {
|
||||
|
Loading…
x
Reference in New Issue
Block a user