Sfoglia il codice sorgente

Refactor code. Implemented yay -Ssq.

Jguer 8 anni fa
parent
commit
7e2625d362
9 ha cambiato i file con 132 aggiunte e 151 eliminazioni
  1. 12 61
      actions.go
  2. 2 1
      aur/aur.go
  3. 9 3
      aur/query.go
  4. 13 12
      aur/result.go
  5. 2 50
      aur/utils.go
  6. 13 7
      cmd/yay/yay.go
  7. 11 13
      pacman/pacman.go
  8. 11 4
      pacman/pacman_test.go
  9. 59 0
      util/util.go

+ 12 - 61
actions.go

@@ -11,35 +11,9 @@ import (
 
 	"github.com/jguer/yay/aur"
 	pac "github.com/jguer/yay/pacman"
+	"github.com/jguer/yay/util"
 )
 
-// SearchMode is search without numbers.
-const SearchMode int = -1
-
-// SortMode NumberMenu and Search
-var SortMode = DownTop
-
-// NoConfirm ignores prompts.
-var NoConfirm = false
-
-// BaseDir is the default building directory for yay
-var BaseDir = "/tmp/yaytmp/"
-
-// Determines NumberMenu and Search Order
-const (
-	DownTop = iota
-	TopDown
-)
-
-// Config copies settings over to AUR and Pacman packages
-func Config() {
-	aur.SortMode = SortMode
-	pac.SortMode = SortMode
-	aur.NoConfirm = NoConfirm
-	pac.NoConfirm = NoConfirm
-	aur.BaseDir = BaseDir
-}
-
 // NumberMenu presents a CLI for selecting packages to install.
 func NumberMenu(pkgName string, flags []string) (err error) {
 	var num int
@@ -58,11 +32,11 @@ func NumberMenu(pkgName string, flags []string) (err error) {
 		return fmt.Errorf("no packages match search")
 	}
 
-	if aur.SortMode == aur.DownTop {
+	if util.SortMode == util.BottomUp {
 		a.PrintSearch(nR)
-		r.PrintSearch(0)
+		r.PrintSearch()
 	} else {
-		r.PrintSearch(0)
+		r.PrintSearch()
 		a.PrintSearch(nR)
 	}
 
@@ -87,13 +61,13 @@ func NumberMenu(pkgName string, flags []string) (err error) {
 		if num > nA+nR-1 || num < 0 {
 			continue
 		} else if num > nR-1 {
-			if aur.SortMode == aur.DownTop {
+			if util.SortMode == util.BottomUp {
 				aurInstall = append(aurInstall, a[nA+nR-num-1].Name)
 			} else {
 				aurInstall = append(aurInstall, a[num-nR].Name)
 			}
 		} else {
-			if aur.SortMode == aur.DownTop {
+			if util.SortMode == util.BottomUp {
 				repoInstall = append(repoInstall, r[nR-num-1].Name)
 			} else {
 				repoInstall = append(repoInstall, r[num].Name)
@@ -184,12 +158,12 @@ func Search(pkg string) (err error) {
 		return err
 	}
 
-	if SortMode == aur.DownTop {
-		a.PrintSearch(SearchMode)
-		r.PrintSearch(SearchMode)
+	if util.SortMode == util.BottomUp {
+		a.PrintSearch(0)
+		r.PrintSearch()
 	} else {
-		r.PrintSearch(SearchMode)
-		a.PrintSearch(SearchMode)
+		r.PrintSearch()
+		a.PrintSearch(0)
 	}
 
 	return nil
@@ -326,7 +300,7 @@ func CleanDependencies(pkgs []string) error {
 	}
 
 	if len(hanging) != 0 {
-		if !continueTask("Confirm Removal?", "nN") {
+		if !util.ContinueTask("Confirm Removal?", "nN") {
 			return nil
 		}
 		err = pac.CleanRemove(hanging)
@@ -334,26 +308,3 @@ func CleanDependencies(pkgs []string) error {
 
 	return err
 }
-
-func continueTask(s string, def string) (cont bool) {
-	if NoConfirm {
-		return true
-	}
-	var postFix string
-
-	if def == "nN" {
-		postFix = "(Y/n)"
-	} else {
-		postFix = "(y/N)"
-	}
-
-	var response string
-	fmt.Printf("\x1b[1;32m==> %s\x1b[1;37m %s\x1b[0m\n", s, postFix)
-
-	fmt.Scanln(&response)
-	if response == string(def[0]) || response == string(def[1]) {
-		return false
-	}
-
-	return true
-}

+ 2 - 1
aur/aur.go

@@ -4,6 +4,7 @@ import (
 	"fmt"
 
 	"github.com/jguer/yay/pacman"
+	"github.com/jguer/yay/util"
 )
 
 // Install sends system commands to make and install a package from pkgName
@@ -61,7 +62,7 @@ func Upgrade(flags []string) error {
 	}
 
 	// Install updated packages
-	if !continueTask("Proceed with upgrade?", "nN") {
+	if !util.ContinueTask("Proceed with upgrade?", "nN") {
 		return nil
 	}
 

+ 9 - 3
aur/query.go

@@ -5,6 +5,7 @@ import (
 	"sort"
 
 	"github.com/jguer/yay/pacman"
+	"github.com/jguer/yay/util"
 )
 
 // Query is a collection of Results
@@ -15,7 +16,7 @@ func (q Query) Len() int {
 }
 
 func (q Query) Less(i, j int) bool {
-	if SortMode == DownTop {
+	if util.SortMode == util.BottomUp {
 		return q[i].NumVotes < q[j].NumVotes
 	}
 	return q[i].NumVotes > q[j].NumVotes
@@ -29,12 +30,15 @@ func (q Query) Swap(i, j int) {
 func (q Query) PrintSearch(start int) {
 	for i, res := range q {
 		var toprint string
-		if start != SearchMode {
-			if SortMode == DownTop {
+		if util.SearchVerbosity == util.NumberMenu {
+			if util.SortMode == util.BottomUp {
 				toprint += fmt.Sprintf("%d ", len(q)+start-i-1)
 			} else {
 				toprint += fmt.Sprintf("%d ", start+i)
 			}
+		} else if util.SearchVerbosity == util.Minimal {
+			fmt.Println(res.Name)
+			continue
 		}
 		toprint += fmt.Sprintf("\x1b[1m%s/\x1b[33m%s \x1b[36m%s \x1b[0m(%d) ", "aur", res.Name, res.Version, res.NumVotes)
 		if res.Maintainer == "" {
@@ -51,6 +55,8 @@ func (q Query) PrintSearch(start int) {
 		toprint += "\n" + res.Description
 		fmt.Println(toprint)
 	}
+
+	return
 }
 
 // Info returns an AUR search with package details

+ 13 - 12
aur/result.go

@@ -6,6 +6,7 @@ import (
 	"os/exec"
 
 	"github.com/jguer/yay/pacman"
+	"github.com/jguer/yay/util"
 )
 
 // Result describes an AUR package.
@@ -95,22 +96,22 @@ func (a *Result) Install(flags []string) (finalmdeps []string, err error) {
 	if a.Maintainer == "" {
 		fmt.Println("\x1b[1;31;40m==> Warning:\x1b[0;;40m This package is orphaned.\x1b[0m")
 	}
-	dir := BaseDir + a.PackageBase + "/"
+	dir := util.BaseDir + a.PackageBase + "/"
 
 	if _, err = os.Stat(dir); os.IsNotExist(err) {
 		if err = a.setupWorkspace(); err != nil {
 			return
 		}
 	} else {
-		if !continueTask("Directory exists. Clean Build?", "yY") {
-			os.RemoveAll(BaseDir + a.PackageBase)
+		if !util.ContinueTask("Directory exists. Clean Build?", "yY") {
+			os.RemoveAll(util.BaseDir + a.PackageBase)
 			if err = a.setupWorkspace(); err != nil {
 				return
 			}
 		}
 	}
 
-	if !continueTask("Edit PKGBUILD?", "yY") {
+	if !util.ContinueTask("Edit PKGBUILD?", "yY") {
 		editcmd := exec.Command(Editor, dir+"PKGBUILD")
 		editcmd.Stdin, editcmd.Stdout, editcmd.Stderr = os.Stdin, os.Stdout, os.Stderr
 		editcmd.Run()
@@ -127,7 +128,7 @@ func (a *Result) Install(flags []string) (finalmdeps []string, err error) {
 	finalmdeps = append(finalmdeps, makeDeps[1]...)
 
 	if len(aurDeps) != 0 || len(repoDeps) != 0 {
-		if !continueTask("Continue?", "nN") {
+		if !util.ContinueTask("Continue?", "nN") {
 			return finalmdeps, fmt.Errorf("user did not like the dependencies")
 		}
 	}
@@ -135,7 +136,7 @@ func (a *Result) Install(flags []string) (finalmdeps []string, err error) {
 	aurQ, n, err := MultiInfo(aurDeps)
 	if n != len(aurDeps) {
 		aurQ.MissingPackage(aurDeps)
-		if !continueTask("Continue?", "nN") {
+		if !util.ContinueTask("Continue?", "nN") {
 			return finalmdeps, fmt.Errorf("unable to install dependencies")
 		}
 	}
@@ -169,7 +170,7 @@ func (a *Result) Install(flags []string) (finalmdeps []string, err error) {
 	var args []string
 	args = append(args, "-sri")
 	args = append(args, flags...)
-	makepkgcmd = exec.Command(MakepkgBin, args...)
+	makepkgcmd = exec.Command(util.MakepkgBin, args...)
 	makepkgcmd.Stdin, makepkgcmd.Stdout, makepkgcmd.Stderr = os.Stdin, os.Stdout, os.Stderr
 	err = makepkgcmd.Run()
 	return
@@ -238,7 +239,7 @@ func RemoveMakeDeps(depS []string) (err error) {
 	hanging := pacman.SliceHangingPackages(depS)
 
 	if len(hanging) != 0 {
-		if !continueTask("Confirm Removal?", "nN") {
+		if !util.ContinueTask("Confirm Removal?", "nN") {
 			return nil
 		}
 		err = pacman.CleanRemove(hanging)
@@ -249,21 +250,21 @@ func RemoveMakeDeps(depS []string) (err error) {
 
 func (a *Result) setupWorkspace() (err error) {
 	// No need to use filepath.separators because it won't run on inferior platforms
-	err = os.MkdirAll(BaseDir+"builds", 0755)
+	err = os.MkdirAll(util.BaseDir+"builds", 0755)
 	if err != nil {
 		fmt.Println(err)
 		return
 	}
 
-	tarLocation := BaseDir + a.PackageBase + ".tar.gz"
-	defer os.Remove(BaseDir + a.PackageBase + ".tar.gz")
+	tarLocation := util.BaseDir + a.PackageBase + ".tar.gz"
+	defer os.Remove(util.BaseDir + a.PackageBase + ".tar.gz")
 
 	err = downloadFile(tarLocation, BaseURL+a.URLPath)
 	if err != nil {
 		return
 	}
 
-	err = exec.Command(TarBin, "-xf", tarLocation, "-C", BaseDir).Run()
+	err = exec.Command(util.TarBin, "-xf", tarLocation, "-C", util.BaseDir).Run()
 	if err != nil {
 		return
 	}

+ 2 - 50
aur/utils.go

@@ -2,41 +2,16 @@ package aur
 
 import (
 	"encoding/json"
-	"fmt"
 	"io"
 	"net/http"
 	"os"
 )
 
-// Editor gives the default system editor, uses vi in last case
-var Editor = "vi"
-
-// TarBin describes the default installation point of tar command.
-const TarBin string = "/usr/bin/tar"
-
 // BaseURL givers the AUR default address.
 const BaseURL string = "https://aur.archlinux.org"
 
-// MakepkgBin describes the default installation point of makepkg command.
-const MakepkgBin string = "/usr/bin/makepkg"
-
-// SearchMode is search without numbers.
-const SearchMode int = -1
-
-// NoConfirm ignores prompts.
-var NoConfirm = false
-
-// SortMode determines top down package or down top package display
-var SortMode = DownTop
-
-// BaseDir is the default building directory for yay
-var BaseDir = "/tmp/yaytmp/"
-
-// Describes Sorting method for numberdisplay
-const (
-	DownTop = iota
-	TopDown
-)
+// Editor gives the default system editor, uses vi in last case
+var Editor = "vi"
 
 func init() {
 	if os.Getenv("EDITOR") != "" {
@@ -74,26 +49,3 @@ func downloadFile(filepath string, url string) (err error) {
 	_, err = io.Copy(out, resp.Body)
 	return err
 }
-
-func continueTask(s string, def string) (cont bool) {
-	if NoConfirm {
-		return true
-	}
-	var postFix string
-
-	if def == "nN" {
-		postFix = "(Y/n)"
-	} else {
-		postFix = "(y/N)"
-	}
-
-	var response string
-	fmt.Printf("\x1b[1;32m==> %s\x1b[1;37m %s\x1b[0m\n", s, postFix)
-
-	fmt.Scanln(&response)
-	if response == string(def[0]) || response == string(def[1]) {
-		return false
-	}
-
-	return true
-}

+ 13 - 7
cmd/yay/yay.go

@@ -5,6 +5,7 @@ import (
 	"os"
 
 	"github.com/jguer/yay"
+	"github.com/jguer/yay/util"
 )
 
 func usage() {
@@ -22,6 +23,7 @@ func usage() {
 
     New operations:
     yay -Qstats   displays system information
+    yay -Cd       remove unneeded dependencies
 
     New options:
     --topdown     shows repository's packages first and then aur's
@@ -47,11 +49,11 @@ func parser() (op string, options []string, packages []string, err error) {
 			if arg == "--help" {
 				op = arg
 			} else if arg == "--topdown" {
-				yay.SortMode = yay.TopDown
-			} else if arg == "--downtop" {
-				yay.SortMode = yay.DownTop
+				util.SortMode = util.TopDown
+			} else if arg == "--bottomup" {
+				util.SortMode = util.BottomUp
 			} else if arg == "--noconfirm" {
-				yay.NoConfirm = true
+				util.NoConfirm = true
 				options = append(options, arg)
 			} else {
 				options = append(options, arg)
@@ -77,14 +79,17 @@ func main() {
 		os.Exit(1)
 	}
 
-	yay.Config()
-
 	switch op {
 	case "-Cd":
 		err = yay.CleanDependencies(pkgs)
 	case "-Qstats":
 		err = yay.LocalStatistics(version)
-	case "-Ss":
+	case "-Ss", "-Ssq":
+		if op == "-Ss" {
+			util.SearchVerbosity = util.Detailed
+		} else {
+			util.SearchVerbosity = util.Minimal
+		}
 		for _, pkg := range pkgs {
 			err = yay.Search(pkg)
 		}
@@ -95,6 +100,7 @@ func main() {
 	case "-Si":
 		err = yay.SingleSearch(pkgs, options)
 	case "yogurt":
+		util.SearchVerbosity = util.NumberMenu
 		for _, pkg := range pkgs {
 			err = yay.NumberMenu(pkg, options)
 			break

+ 11 - 13
pacman/pacman.go

@@ -7,6 +7,7 @@ import (
 	"strings"
 
 	"github.com/jguer/go-alpm"
+	"github.com/jguer/yay/util"
 )
 
 // RepoSearch describes a Repository search.
@@ -25,12 +26,6 @@ type Result struct {
 // PacmanConf describes the default pacman config file
 const PacmanConf string = "/etc/pacman.conf"
 
-// NoConfirm ignores prompts.
-var NoConfirm = false
-
-// SortMode NumberMenu and Search
-var SortMode = DownTop
-
 // Determines NumberMenu and Search Order
 const (
 	DownTop = iota
@@ -90,7 +85,7 @@ func Search(pkgName string) (s RepoSearch, n int, err error) {
 	var installed bool
 	dbS := dbList.Slice()
 	var f int
-	if SortMode == DownTop {
+	if util.SortMode == DownTop {
 		f = len(dbS) - 1
 	} else {
 		f = 0
@@ -100,7 +95,7 @@ func Search(pkgName string) (s RepoSearch, n int, err error) {
 		pkgS := dbS[f].PkgCache().Slice()
 
 		var i int
-		if SortMode == DownTop {
+		if util.SortMode == DownTop {
 			i = len(pkgS) - 1
 		} else {
 			i = 0
@@ -125,7 +120,7 @@ func Search(pkgName string) (s RepoSearch, n int, err error) {
 				n++
 			}
 
-			if SortMode == DownTop {
+			if util.SortMode == DownTop {
 				if i > 0 {
 					i--
 				} else {
@@ -140,7 +135,7 @@ func Search(pkgName string) (s RepoSearch, n int, err error) {
 			}
 		}
 
-		if SortMode == DownTop {
+		if util.SortMode == DownTop {
 			if f > 0 {
 				f--
 			} else {
@@ -159,15 +154,18 @@ func Search(pkgName string) (s RepoSearch, n int, err error) {
 }
 
 //PrintSearch receives a RepoSearch type and outputs pretty text.
-func (s RepoSearch) PrintSearch(mode int) {
+func (s RepoSearch) PrintSearch() {
 	for i, res := range s {
 		var toprint string
-		if mode != -1 {
-			if mode == 0 {
+		if util.SearchVerbosity == util.NumberMenu {
+			if util.SortMode == util.BottomUp {
 				toprint += fmt.Sprintf("%d ", len(s)-i-1)
 			} else {
 				toprint += fmt.Sprintf("%d ", i)
 			}
+		} else if util.SearchVerbosity == util.Minimal {
+			fmt.Println(res.Name)
+			continue
 		}
 		toprint += fmt.Sprintf("\x1b[1m%s/\x1b[33m%s \x1b[36m%s \x1b[0m",
 			res.Repository, res.Name, res.Version)

+ 11 - 4
pacman/pacman_test.go

@@ -1,6 +1,7 @@
 package pacman
 
 import "testing"
+import "github.com/jguer/yay/util"
 
 func benchmarkSearch(search string, b *testing.B) {
 	for n := 0; n < b.N; n++ {
@@ -8,7 +9,13 @@ func benchmarkSearch(search string, b *testing.B) {
 	}
 }
 
-func BenchmarkSearchSimpleTopDown(b *testing.B)  { SortMode = TopDown; benchmarkSearch("chromium", b) }
-func BenchmarkSearchComplexTopDown(b *testing.B) { SortMode = TopDown; benchmarkSearch("linux", b) }
-func BenchmarkSearchSimpleDownTop(b *testing.B)  { SortMode = DownTop; benchmarkSearch("chromium", b) }
-func BenchmarkSearchComplexDownTop(b *testing.B) { SortMode = DownTop; benchmarkSearch("linux", b) }
+func BenchmarkSearchSimpleTopDown(b *testing.B) {
+	util.SortMode = TopDown
+	benchmarkSearch("chromium", b)
+}
+func BenchmarkSearchComplexTopDown(b *testing.B) { util.SortMode = TopDown; benchmarkSearch("linux", b) }
+func BenchmarkSearchSimpleDownTop(b *testing.B) {
+	util.SortMode = DownTop
+	benchmarkSearch("chromium", b)
+}
+func BenchmarkSearchComplexDownTop(b *testing.B) { util.SortMode = DownTop; benchmarkSearch("linux", b) }

+ 59 - 0
util/util.go

@@ -0,0 +1,59 @@
+package util
+
+import "fmt"
+
+// TarBin describes the default installation point of tar command.
+const TarBin string = "/usr/bin/tar"
+
+// MakepkgBin describes the default installation point of makepkg command.
+const MakepkgBin string = "/usr/bin/makepkg"
+
+// SearchVerbosity determines print method used in PrintSearch
+var SearchVerbosity = NumberMenu
+
+// Verbosity settings for search
+const (
+	NumberMenu = iota
+	Detailed
+	Minimal
+)
+
+// NoConfirm ignores prompts.
+var NoConfirm = false
+
+// SortMode determines top down package or down top package display
+var SortMode = BottomUp
+
+// BaseDir is the default building directory for yay
+var BaseDir = "/tmp/yaytmp/"
+
+// Describes Sorting method for numberdisplay
+const (
+	BottomUp = iota
+	TopDown
+)
+
+// ContinueTask prompts if user wants to continue task.
+//If NoConfirm is set the action will continue without user input.
+func ContinueTask(s string, def string) (cont bool) {
+	if NoConfirm {
+		return true
+	}
+	var postFix string
+
+	if def == "nN" {
+		postFix = "(Y/n)"
+	} else {
+		postFix = "(y/N)"
+	}
+
+	var response string
+	fmt.Printf("\x1b[1;32m==> %s\x1b[1;37m %s\x1b[0m\n", s, postFix)
+
+	fmt.Scanln(&response)
+	if response == string(def[0]) || response == string(def[1]) {
+		return false
+	}
+
+	return true
+}