exec.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package main
  2. import (
  3. "bytes"
  4. "fmt"
  5. "os"
  6. "os/exec"
  7. "strings"
  8. "time"
  9. )
  10. func show(cmd *exec.Cmd) error {
  11. cmd.Stdin, cmd.Stdout, cmd.Stderr = os.Stdin, os.Stdout, os.Stderr
  12. err := cmd.Run()
  13. if err != nil {
  14. return fmt.Errorf("")
  15. }
  16. return nil
  17. }
  18. func capture(cmd *exec.Cmd) (string, string, error) {
  19. var outbuf, errbuf bytes.Buffer
  20. cmd.Stdout = &outbuf
  21. cmd.Stderr = &errbuf
  22. err := cmd.Run()
  23. stdout := outbuf.String()
  24. stderr := errbuf.String()
  25. return stdout, stderr, err
  26. }
  27. func sudoLoopBackground() {
  28. updateSudo()
  29. go sudoLoop()
  30. }
  31. func sudoLoop() {
  32. for {
  33. updateSudo()
  34. time.Sleep(298 * time.Second)
  35. }
  36. }
  37. func updateSudo() {
  38. for {
  39. err := show(exec.Command("sudo", "-v"))
  40. if err != nil {
  41. fmt.Println(err)
  42. } else {
  43. break
  44. }
  45. }
  46. }
  47. func passToPacman(args *arguments) *exec.Cmd {
  48. argArr := make([]string, 0)
  49. if args.needRoot() {
  50. argArr = append(argArr, "sudo")
  51. }
  52. argArr = append(argArr, config.PacmanBin)
  53. argArr = append(argArr, cmdArgs.formatGlobals()...)
  54. argArr = append(argArr, args.formatArgs()...)
  55. if config.NoConfirm {
  56. argArr = append(argArr, "--noconfirm")
  57. }
  58. argArr = append(argArr, "--")
  59. argArr = append(argArr, args.targets...)
  60. return exec.Command(argArr[0], argArr[1:]...)
  61. }
  62. func passToMakepkg(dir string, args ...string) *exec.Cmd {
  63. if config.NoConfirm {
  64. args = append(args)
  65. }
  66. mflags := strings.Fields(config.MFlags)
  67. args = append(args, mflags...)
  68. cmd := exec.Command(config.MakepkgBin, args...)
  69. cmd.Dir = dir
  70. return cmd
  71. }
  72. func passToGit(dir string, _args ...string) *exec.Cmd {
  73. gitflags := strings.Fields(config.GitFlags)
  74. args := []string{"-C", dir}
  75. args = append(args, gitflags...)
  76. args = append(args, _args...)
  77. cmd := exec.Command(config.GitBin, args...)
  78. cmd.Stdin, cmd.Stdout, cmd.Stderr = os.Stdin, os.Stdout, os.Stderr
  79. return cmd
  80. }