Browse Source

Add SudoBin and SudoFlags

Pierre-Alain TORET 6 năm trước cách đây
mục cha
commit
6dd65a2df2
5 tập tin đã thay đổi với 36 bổ sung2 xóa
  1. 2 0
      cmd.go
  2. 6 0
      config.go
  3. 13 0
      doc/yay.8
  4. 7 2
      exec.go
  5. 8 0
      parser.go

+ 2 - 0
cmd.go

@@ -111,6 +111,8 @@ Permanent configuration options:
     --batchinstall        Build multiple AUR packages then install them together
     --nobatchinstall      Build and install each AUR package one by one
 
+    --sudo                <file>  sudo command to use
+    --sudoflags           <flags> Pass arguments to sudo
     --sudoloop            Loop sudo calls in the background to avoid timeout
     --nosudoloop          Do not loop sudo calls in the background
 

+ 6 - 0
config.go

@@ -61,6 +61,8 @@ type Configuration struct {
 	SearchBy           string `json:"searchby"`
 	GitFlags           string `json:"gitflags"`
 	RemoveMake         string `json:"removemake"`
+	SudoBin            string `json:"sudobin"`
+	SudoFlags          string `json:"sudoflags"`
 	RequestSplitN      int    `json:"requestsplitn"`
 	SearchMode         int    `json:"-"`
 	SortMode           int    `json:"sortmode"`
@@ -166,6 +168,8 @@ func defaultSettings() *Configuration {
 		TarBin:             "bsdtar",
 		GitBin:             "git",
 		GpgBin:             "gpg",
+		SudoBin:            "sudo",
+		SudoFlags:          "",
 		TimeUpdate:         false,
 		RequestSplitN:      150,
 		ReDownload:         "no",
@@ -211,6 +215,8 @@ func (config *Configuration) expandEnv() {
 	config.TarBin = os.ExpandEnv(config.TarBin)
 	config.GitBin = os.ExpandEnv(config.GitBin)
 	config.GpgBin = os.ExpandEnv(config.GpgBin)
+	config.SudoBin = os.ExpandEnv(config.SudoBin)
+	config.SudoFlags = os.ExpandEnv(config.SudoFlags)
 	config.ReDownload = os.ExpandEnv(config.ReDownload)
 	config.ReBuild = os.ExpandEnv(config.ReBuild)
 	config.AnswerClean = os.ExpandEnv(config.AnswerClean)

+ 13 - 0
doc/yay.8

@@ -503,6 +503,19 @@ passed to gpg. Multiple arguments may be passed by supplying a space
 separated list that is quoted by the shell.
 
 .TP
+.B \-\-sudo <command>
+The command to use for \fBsudo\fR calls. This can be a command in
+\fBPATH\fR or an absolute path to the file.
+The sudoloop is not guarantee to work with a custom \fBsudo\fR command.
+
+.TP
+.B \-\-sudoflags <flags>
+Passes arguments to sudo. These flags get passed to every instance where
+sudo is called by Yay. Arguments are split on whitespace before being
+passed to sudo. Multiple arguments may be passed by supplying a space
+separated list that is quoted by the shell.
+
+.TP
 .B \-\-sudoloop
 Loop sudo calls in the background to prevent sudo from timing out during long
 builds.

+ 7 - 2
exec.go

@@ -45,7 +45,9 @@ func sudoLoop() {
 
 func updateSudo() {
 	for {
-		err := show(exec.Command("sudo", "-v"))
+		mSudoFlags := strings.Fields(config.SudoFlags)
+		mSudoFlags = append([]string{"-v"}, mSudoFlags...)
+		err := show(exec.Command(config.SudoBin, mSudoFlags...))
 		if err != nil {
 			fmt.Fprintln(os.Stderr, err)
 		} else {
@@ -76,8 +78,11 @@ func waitLock() {
 func passToPacman(args *arguments) *exec.Cmd {
 	argArr := make([]string, 0)
 
+	mSudoFlags := strings.Fields(config.SudoFlags)
+
 	if args.needRoot() {
-		argArr = append(argArr, "sudo")
+		argArr = append(argArr, config.SudoBin)
+		argArr = append(argArr, mSudoFlags...)
 	}
 
 	argArr = append(argArr, config.PacmanBin)

+ 8 - 0
parser.go

@@ -421,6 +421,8 @@ func isArg(arg string) bool {
 	case "tar":
 	case "git":
 	case "gpg":
+	case "sudo":
+	case "sudoflags":
 	case "requestsplitn":
 	case "sudoloop":
 	case "nosudoloop":
@@ -558,6 +560,10 @@ func handleConfig(option, value string) bool {
 		config.GitBin = value
 	case "gpg":
 		config.GpgBin = value
+	case "sudo":
+		config.SudoBin = value
+	case "sudoflags":
+		config.SudoFlags = value
 	case "requestsplitn":
 		n, err := strconv.Atoi(value)
 		if err == nil && n > 0 {
@@ -692,6 +698,8 @@ func hasParam(arg string) bool {
 	case "tar":
 	case "git":
 	case "gpg":
+	case "sudo":
+	case "sudoflags":
 	case "requestsplitn":
 	case "answerclean":
 	case "answerdiff":