Browse Source

Only minor changes

Alexander F. Rødseth 6 years ago
parent
commit
29f3e011ec
5 changed files with 205 additions and 255 deletions
  1. 68 67
      callbacks.go
  2. 10 14
      clean.go
  3. 59 68
      cmd.go
  4. 1 1
      config.go
  5. 67 105
      main.go

+ 68 - 67
callbacks.go

@@ -10,78 +10,79 @@ import (
 )
 
 func questionCallback(question alpm.QuestionAny) {
-	qi, err := question.QuestionInstallIgnorepkg()
-	if err == nil {
+	if qi, err := question.QuestionInstallIgnorepkg(); err == nil {
 		qi.SetInstall(true)
 	}
 
 	qp, err := question.QuestionSelectProvider()
-	if err == nil {
-		size := 0
-
-		qp.Providers(alpmHandle).ForEach(func(pkg alpm.Package) error {
-			size++
-			return nil
-		})
-
-		fmt.Print(bold(cyan(":: ")))
-		str := bold(fmt.Sprintf(bold("There are %d providers available for %s:"), size, qp.Dep()))
-
-		size = 1
-		var db string
-
-		qp.Providers(alpmHandle).ForEach(func(pkg alpm.Package) error {
-			thisDb := pkg.DB().Name()
-
-			if db != thisDb {
-				db = thisDb
-				str += bold(cyan("\n:: ")) + bold("Repository "+db+"\n    ")
-			}
-			str += fmt.Sprintf("%d) %s ", size, pkg.Name())
-			size++
-			return nil
-		})
-
-		fmt.Println(str)
-
-		for {
-			fmt.Print("\nEnter a number (default=1): ")
-
-			if config.NoConfirm {
-				fmt.Println()
-				break
-			}
-
-			reader := bufio.NewReader(os.Stdin)
-			numberBuf, overflow, err := reader.ReadLine()
-
-			if err != nil {
-				fmt.Println(err)
-				break
-			}
-
-			if overflow {
-				fmt.Println("Input too long")
-				continue
-			}
-
-			if string(numberBuf) == "" {
-				break
-			}
-
-			num, err := strconv.Atoi(string(numberBuf))
-			if err != nil {
-				fmt.Printf("%s invalid number: %s\n", red("error:"), string(numberBuf))
-				continue
-			}
-
-			if num < 1 || num > size {
-				fmt.Printf("%s invalid value: %d is not between %d and %d\n", red("error:"), num, 1, size)
-				continue
-			}
-
-			qp.SetUseIndex(num - 1)
+	if err != nil {
+		return
+	}
+
+	size := 0
+
+	qp.Providers(alpmHandle).ForEach(func(pkg alpm.Package) error {
+		size++
+		return nil
+	})
+
+	fmt.Print(bold(cyan(":: ")))
+	str := bold(fmt.Sprintf(bold("There are %d providers available for %s:"), size, qp.Dep()))
+
+	size = 1
+	var db string
+
+	qp.Providers(alpmHandle).ForEach(func(pkg alpm.Package) error {
+		thisDb := pkg.DB().Name()
+
+		if db != thisDb {
+			db = thisDb
+			str += bold(cyan("\n:: ")) + bold("Repository "+db+"\n    ")
+		}
+		str += fmt.Sprintf("%d) %s ", size, pkg.Name())
+		size++
+		return nil
+	})
+
+	fmt.Println(str)
+
+	for {
+		fmt.Print("\nEnter a number (default=1): ")
+
+		if config.NoConfirm {
+			fmt.Println()
 			break
 		}
+
+		reader := bufio.NewReader(os.Stdin)
+		numberBuf, overflow, err := reader.ReadLine()
+
+		if err != nil {
+			fmt.Println(err)
+			break
+		}
+
+		if overflow {
+			fmt.Println("Input too long")
+			continue
+		}
+
+		if string(numberBuf) == "" {
+			break
+		}
+
+		num, err := strconv.Atoi(string(numberBuf))
+		if err != nil {
+			fmt.Printf("%s invalid number: %s\n", red("error:"), string(numberBuf))
+			continue
+		}
+
+		if num < 1 || num > size {
+			fmt.Printf("%s invalid value: %d is not between %d and %d\n", red("error:"), num, 1, size)
+			continue
+		}
+
+		qp.SetUseIndex(num - 1)
+		break
 	}
 }

+ 10 - 14
clean.go

@@ -14,8 +14,7 @@ func removeVCSPackage(pkgs []string) {
 	updated := false
 
 	for _, pkgName := range pkgs {
-		_, ok := savedInfo[pkgName]
-		if ok {
+		if _, ok := savedInfo[pkgName]; ok {
 			delete(savedInfo, pkgName)
 			updated = true
 		}
@@ -34,10 +33,10 @@ func cleanDependencies(removeOptional bool) error {
 	}
 
 	if len(hanging) != 0 {
-		err = cleanRemove(hanging)
+		return cleanRemove(hanging)
 	}
 
-	return err
+	return nil
 }
 
 // CleanRemove sends a full removal command to pacman with the pkgName slice
@@ -49,8 +48,8 @@ func cleanRemove(pkgNames []string) (err error) {
 	arguments := makeArguments()
 	arguments.addArg("R")
 	arguments.addTarget(pkgNames...)
-	err = show(passToPacman(arguments))
-	return err
+
+	return show(passToPacman(arguments))
 }
 
 func syncClean(parser *arguments) error {
@@ -69,8 +68,7 @@ func syncClean(parser *arguments) error {
 	}
 
 	if mode == ModeRepo || mode == ModeAny {
-		err = show(passToPacman(parser))
-		if err != nil {
+		if err = show(passToPacman(parser)); err != nil {
 			return err
 		}
 	}
@@ -86,8 +84,7 @@ func syncClean(parser *arguments) error {
 		question = "Do you want to remove all other AUR packages from cache?"
 	}
 
-	fmt.Println()
-	fmt.Printf("Build directory: %s\n", config.BuildDir)
+	fmt.Printf("\nBuild directory: %s\n", config.BuildDir)
 
 	if continueTask(question, true) {
 		err = cleanAUR(keepInstalled, keepCurrent, removeAll)
@@ -98,10 +95,10 @@ func syncClean(parser *arguments) error {
 	}
 
 	if continueTask("Do you want to remove ALL untracked AUR files?", true) {
-		err = cleanUntracked()
+		return cleanUntracked()
 	}
 
-	return err
+	return nil
 }
 
 func cleanAUR(keepInstalled, keepCurrent, removeAll bool) error {
@@ -192,8 +189,7 @@ func cleanUntracked() error {
 		dir := filepath.Join(config.BuildDir, file.Name())
 
 		if shouldUseGit(dir) {
-			err = show(passToGit(dir, "clean", "-fx"))
-			if err != nil {
+			if err = show(passToGit(dir, "clean", "-fx")); err != nil {
 				return err
 			}
 		}

+ 59 - 68
cmd.go

@@ -171,15 +171,10 @@ func handleCmd() (err error) {
 }
 
 func handleQuery() error {
-	var err error
-
 	if cmdArgs.existsArg("u", "upgrades") {
-		err = printUpdateList(cmdArgs)
-	} else {
-		err = show(passToPacman(cmdArgs))
+		return printUpdateList(cmdArgs)
 	}
-
-	return err
+	return show(passToPacman(cmdArgs))
 }
 
 func handleHelp() error {
@@ -187,7 +182,6 @@ func handleHelp() error {
 		usage()
 		return nil
 	}
-
 	return show(passToPacman(cmdArgs))
 }
 
@@ -289,8 +283,7 @@ func handleConfig(option, value string) bool {
 	case "gpg":
 		config.GpgBin = value
 	case "requestsplitn":
-		n, err := strconv.Atoi(value)
-		if err == nil && n > 0 {
+		if n, err := strconv.Atoi(value); err == nil && n > 0 {
 			config.RequestSplitN = n
 		}
 	case "sudoloop":
@@ -340,9 +333,10 @@ func handleConfig(option, value string) bool {
 	case "askremovemake":
 		config.RemoveMake = "ask"
 	default:
+		// the option was not handled by the switch
 		return false
 	}
-
+	// the option was successfully handled by the switch
 	return true
 }
 
@@ -373,35 +367,33 @@ func handlePrint() (err error) {
 	default:
 		err = nil
 	}
-
 	return err
 }
 
-func handleYay() (err error) {
+func handleYay() error {
 	//_, options, targets := cmdArgs.formatArgs()
 	if cmdArgs.existsArg("gendb") {
-		err = createDevelDB()
-	} else if cmdArgs.existsDouble("c") {
-		err = cleanDependencies(true)
-	} else if cmdArgs.existsArg("c", "clean") {
-		err = cleanDependencies(false)
-	} else if len(cmdArgs.targets) > 0 {
-		err = handleYogurt()
+		return createDevelDB()
 	}
-
-	return
+	if cmdArgs.existsDouble("c") {
+		return cleanDependencies(true)
+	}
+	if cmdArgs.existsArg("c", "clean") {
+		return cleanDependencies(false)
+	}
+	if len(cmdArgs.targets) > 0 {
+		return handleYogurt()
+	}
+	return nil
 }
 
-func handleGetpkgbuild() (err error) {
-	err = getPkgbuilds(cmdArgs.targets)
-	return
+func handleGetpkgbuild() error {
+	return getPkgbuilds(cmdArgs.targets)
 }
 
-func handleYogurt() (err error) {
+func handleYogurt() error {
 	config.SearchMode = NumberMenu
-	err = numberMenu(cmdArgs.targets)
-
-	return
+	return numberMenu(cmdArgs.targets)
 }
 
 func handleSync() (err error) {
@@ -413,44 +405,50 @@ func handleSync() (err error) {
 		} else {
 			config.SearchMode = Detailed
 		}
-
-		err = syncSearch(targets)
-	} else if cmdArgs.existsArg("p", "print", "print-format") {
-		err = show(passToPacman(cmdArgs))
-	} else if cmdArgs.existsArg("c", "clean") {
-		err = syncClean(cmdArgs)
-	} else if cmdArgs.existsArg("l", "list") {
-		err = show(passToPacman(cmdArgs))
-	} else if cmdArgs.existsArg("g", "groups") {
-		err = show(passToPacman(cmdArgs))
-	} else if cmdArgs.existsArg("i", "info") {
-		err = syncInfo(targets)
-	} else if cmdArgs.existsArg("u", "sysupgrade") {
-		err = install(cmdArgs)
-	} else if len(cmdArgs.targets) > 0 {
-		err = install(cmdArgs)
-	} else if cmdArgs.existsArg("y", "refresh") {
-		err = show(passToPacman(cmdArgs))
+		return syncSearch(targets)
 	}
-
-	return
+	if cmdArgs.existsArg("p", "print", "print-format") {
+		return show(passToPacman(cmdArgs))
+	}
+	if cmdArgs.existsArg("c", "clean") {
+		return syncClean(cmdArgs)
+	}
+	if cmdArgs.existsArg("l", "list") {
+		return show(passToPacman(cmdArgs))
+	}
+	if cmdArgs.existsArg("g", "groups") {
+		return show(passToPacman(cmdArgs))
+	}
+	if cmdArgs.existsArg("i", "info") {
+		return syncInfo(targets)
+	}
+	if cmdArgs.existsArg("u", "sysupgrade") {
+		return install(cmdArgs)
+	}
+	if len(cmdArgs.targets) > 0 {
+		return install(cmdArgs)
+	}
+	if cmdArgs.existsArg("y", "refresh") {
+		return show(passToPacman(cmdArgs))
+	}
+	return nil
 }
 
-func handleRemove() (err error) {
+func handleRemove() error {
 	removeVCSPackage(cmdArgs.targets)
-	err = show(passToPacman(cmdArgs))
-	return
+	return show(passToPacman(cmdArgs))
 }
 
 // NumberMenu presents a CLI for selecting packages to install.
 func numberMenu(pkgS []string) (err error) {
+	var (
+		aurErr, repoErr error
+		aq              aurQuery
+		pq              repoQuery
+		lenaq, lenpq    int
+	)
+
 	pkgS = removeInvalidTargets(pkgS)
-	var aurErr error
-	var repoErr error
-	var aq aurQuery
-	var pq repoQuery
-	var lenaq int
-	var lenpq int
 
 	if mode == ModeAUR || mode == ModeAny {
 		aq, aurErr = narrowSearch(pkgS, true)
@@ -492,12 +490,11 @@ func numberMenu(pkgS []string) (err error) {
 	fmt.Print(bold(green(arrow + " ")))
 
 	reader := bufio.NewReader(os.Stdin)
-	numberBuf, overflow, err := reader.ReadLine()
 
+	numberBuf, overflow, err := reader.ReadLine()
 	if err != nil {
 		return err
 	}
-
 	if overflow {
 		return fmt.Errorf("Input too long")
 	}
@@ -513,10 +510,7 @@ func numberMenu(pkgS []string) (err error) {
 			target = i + 1
 		}
 
-		if isInclude && include.get(target) {
-			arguments.addTarget(pkg.DB().Name() + "/" + pkg.Name())
-		}
-		if !isInclude && !exclude.get(target) {
+		if (isInclude && include.get(target)) || (!isInclude && !exclude.get(target)) {
 			arguments.addTarget(pkg.DB().Name() + "/" + pkg.Name())
 		}
 	}
@@ -527,10 +521,7 @@ func numberMenu(pkgS []string) (err error) {
 			target = i + 1 + len(pq)
 		}
 
-		if isInclude && include.get(target) {
-			arguments.addTarget("aur/" + pkg.Name)
-		}
-		if !isInclude && !exclude.get(target) {
+		if (isInclude && include.get(target)) || (!isInclude && !exclude.get(target)) {
 			arguments.addTarget("aur/" + pkg.Name)
 		}
 	}

+ 1 - 1
config.go

@@ -118,7 +118,7 @@ var alpmConf alpm.PacmanConfig
 var alpmHandle *alpm.Handle
 
 // Mode is used to restrict yay to AUR or repo only modes
-var mode targetMode = ModeAny
+var mode = ModeAny
 
 func readAlpmConfig(pacmanconf string) (conf alpm.PacmanConfig, err error) {
 	file, err := os.Open(pacmanconf)

+ 67 - 105
main.go

@@ -45,43 +45,43 @@ func setPaths() error {
 	return nil
 }
 
-func initConfig() (err error) {
+func initConfig() error {
 	defaultSettings(&config)
 
-	if _, err = os.Stat(configFile); os.IsNotExist(err) {
+	if _, err := os.Stat(configFile); os.IsNotExist(err) {
 		err = os.MkdirAll(filepath.Dir(configFile), 0755)
 		if err != nil {
 			err = fmt.Errorf("Unable to create config directory:\n%s\n"+
 				"The error was:\n%s", filepath.Dir(configFile), err)
-			return
+			return err
 		}
 		// Save the default config if nothing is found
 		config.saveConfig()
-	} else {
-		cfile, errf := os.OpenFile(configFile, os.O_RDWR|os.O_CREATE, 0644)
-		if errf != nil {
-			fmt.Printf("Error reading config: %s\n", err)
-		} else {
-			defer cfile.Close()
-			decoder := json.NewDecoder(cfile)
-			err = decoder.Decode(&config)
-			if err != nil {
-				fmt.Println("Loading default Settings.\nError reading config:",
-					err)
-				defaultSettings(&config)
-			}
-			if _, err = os.Stat(config.BuildDir); os.IsNotExist(err) {
-				err = os.MkdirAll(config.BuildDir, 0755)
-				if err != nil {
-					err = fmt.Errorf("Unable to create BuildDir directory:\n%s\n"+
-						"The error was:\n%s", config.BuildDir, err)
-					return
-				}
-			}
+		return err
+	}
+
+	cfile, err := os.OpenFile(configFile, os.O_RDWR|os.O_CREATE, 0644)
+	if err != nil {
+		fmt.Printf("Error reading config: %s\n", err)
+		return err
+	}
+	defer cfile.Close()
+
+	decoder := json.NewDecoder(cfile)
+	if err := decoder.Decode(&config); err != nil {
+		fmt.Println("Loading default Settings.\nError reading config:", err)
+		defaultSettings(&config)
+		return err
+	}
+
+	if _, err := os.Stat(config.BuildDir); os.IsNotExist(err) {
+		if err = os.MkdirAll(config.BuildDir, 0755); err != nil {
+			return fmt.Errorf("Unable to create BuildDir directory:\n%s\n"+
+				"The error was:\n%s", config.BuildDir, err)
 		}
 	}
 
-	return
+	return nil
 }
 
 func initVCS() (err error) {
@@ -92,22 +92,20 @@ func initVCS() (err error) {
 				"The error was:\n%s", filepath.Dir(configFile), err)
 			return
 		}
-	} else {
-		vfile, err := os.OpenFile(vcsFile, os.O_RDONLY|os.O_CREATE, 0644)
-		if err == nil {
-			defer vfile.Close()
-			decoder := json.NewDecoder(vfile)
-			_ = decoder.Decode(&savedInfo)
-		}
+		return
 	}
-
-	return
+	vfile, err := os.OpenFile(vcsFile, os.O_RDONLY|os.O_CREATE, 0644)
+	if err == nil {
+		defer vfile.Close()
+		decoder := json.NewDecoder(vfile)
+		_ = decoder.Decode(&savedInfo)
+	}
+	return err
 }
 
 func initAlpm() (err error) {
 	var value string
 	var exists bool
-	//var double bool
 
 	alpmConf, err = readAlpmConfig(config.PacmanConf)
 	if err != nil {
@@ -171,93 +169,57 @@ func initAlpm() (err error) {
 	return
 }
 
-func initAlpmHandle() (err error) {
+func initAlpmHandle() error {
 	if alpmHandle != nil {
-		err = alpmHandle.Release()
-		if err != nil {
+		if err := alpmHandle.Release(); err != nil {
 			return err
 		}
 	}
-
-	alpmHandle, err = alpmConf.CreateHandle()
-	if err != nil {
-		err = fmt.Errorf("Unable to CreateHandle: %s", err)
-		return
+	var err error
+	if alpmHandle, err = alpmConf.CreateHandle(); err != nil {
+		return fmt.Errorf("Unable to CreateHandle: %s", err)
 	}
 
 	alpmHandle.SetQuestionCallback(questionCallback)
-	return
+	return nil
 }
 
-func main() {
-	var status int
-	var err error
-
-	if 0 == os.Geteuid() {
-		fmt.Println("Please avoid running yay as root/sudo.")
-	}
-
-	err = cmdArgs.parseCommandLine()
-	if err != nil {
-		fmt.Println(err)
-		status = 1
-		goto cleanup
-	}
-
-	err = setPaths()
-	if err != nil {
-		fmt.Println(err)
-		status = 1
-		goto cleanup
-	}
-
-	err = initConfig()
-	if err != nil {
-		fmt.Println(err)
-		status = 1
-		goto cleanup
+func cleanup() {
+	if alpmHandle != nil {
+		temp := alpmHandle
+		// set alpmHandle to nil to avoid entering this
+		// branch of code again, at cleanup time.
+		alpmHandle = nil
+		must(temp.Release())
 	}
+}
 
-	cmdArgs.extractYayOptions()
-
-	err = initVCS()
+// must outputs the error if there is one,
+// then calls cleanup() and ends the program with exit code 1.
+// If err == nil, no action is taken.
+func must(err error) {
 	if err != nil {
-		fmt.Println(err)
-		status = 1
-		goto cleanup
-
+		fmt.Fprintln(os.Stderr, err)
+		cleanup()
+		os.Exit(1)
 	}
+}
 
-	err = initAlpm()
-	if err != nil {
-		fmt.Println(err)
-		status = 1
-		goto cleanup
+func main() {
+	if os.Geteuid() == 0 {
+		fmt.Println("Please avoid running yay as root/sudo.")
 	}
 
-	err = handleCmd()
-	if err != nil {
-		if err.Error() != "" {
-			fmt.Println(err)
-		}
-
-		status = 1
-		goto cleanup
-	}
+	// Ensure release of alpmHandle
+	defer cleanup()
 
-cleanup:
-	//cleanup
-	//from here on out don't exit if an error occurs
-	//if we fail to save the configuration
-	//at least continue on and try clean up other parts
+	must(cmdArgs.parseCommandLine())
+	must(setPaths())
+	must(initConfig())
 
-	if alpmHandle != nil {
-		err = alpmHandle.Release()
-		if err != nil {
-			fmt.Println(err)
-			status = 1
-		}
-	}
+	cmdArgs.extractYayOptions()
 
-	os.Exit(status)
+	must(initVCS())
+	must(initAlpm())
+	must(handleCmd())
 }