git_helper.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package backend
  2. import (
  3. "fmt"
  4. "github.com/allanpk716/ChineseSubFinder/cmd/GetCAPTCHA/backend/config"
  5. "github.com/allanpk716/ChineseSubFinder/internal/common"
  6. "github.com/allanpk716/ChineseSubFinder/internal/pkg/my_util"
  7. "github.com/allanpk716/ChineseSubFinder/internal/pkg/something_static"
  8. "github.com/go-git/go-git/v5"
  9. "github.com/go-git/go-git/v5/plumbing/object"
  10. "github.com/go-git/go-git/v5/plumbing/transport/ssh"
  11. sshOrg "golang.org/x/crypto/ssh"
  12. "os"
  13. "time"
  14. )
  15. func GitProcess(config config.Config, enString string) error {
  16. fmt.Println("Now Time", time.Now().Format("2006-01-02 15:04:05"))
  17. nowTime := time.Now().Format("2006-01-02")
  18. // 实例化登录密钥
  19. publicKeys, err := ssh.NewPublicKeysFromFile("git", config.SSHKeyFullPath, config.SSHKeyPwd)
  20. if err != nil {
  21. return err
  22. }
  23. publicKeys.HostKeyCallback = sshOrg.InsecureIgnoreHostKey()
  24. var r *git.Repository
  25. var w *git.Worktree
  26. if my_util.IsDir(config.CloneProjectDesSaveDir) == true {
  27. // 需要 pull
  28. fmt.Println("Pull Start...")
  29. r, err = git.PlainOpen(config.CloneProjectDesSaveDir)
  30. if err != nil {
  31. return err
  32. }
  33. w, err = r.Worktree()
  34. if err != nil {
  35. return err
  36. }
  37. err = w.Pull(&git.PullOptions{Auth: publicKeys, RemoteName: "origin"})
  38. if err != nil {
  39. if err != git.NoErrAlreadyUpToDate {
  40. return err
  41. }
  42. }
  43. fmt.Println("Pull End")
  44. } else {
  45. // 需要 clone
  46. fmt.Println("PlainClone Start...")
  47. r, err = git.PlainClone(config.CloneProjectDesSaveDir, false, &git.CloneOptions{
  48. Auth: publicKeys,
  49. URL: config.GitProjectUrl,
  50. Progress: os.Stdout,
  51. })
  52. if err != nil {
  53. return err
  54. }
  55. fmt.Println("PlainClone End")
  56. }
  57. // 存储外部传入的字符串到文件
  58. bok, err := something_static.WriteFile(config.CloneProjectDesSaveDir, enString, nowTime)
  59. if err != nil {
  60. return err
  61. }
  62. if bok == false {
  63. // 说明无需继续,因为文件没有变化
  64. fmt.Println("Code not change, Skip This Time")
  65. return nil
  66. }
  67. fmt.Println("Write File Done")
  68. w, err = r.Worktree()
  69. if err != nil {
  70. return err
  71. }
  72. _, err = w.Add(common.StaticFileName00)
  73. if err != nil {
  74. return err
  75. }
  76. status, err := w.Status()
  77. fmt.Println("Status", status)
  78. commit, err := w.Commit("update", &git.CommitOptions{
  79. Author: &object.Signature{
  80. Name: "haha",
  81. Email: "[email protected]",
  82. When: time.Now(),
  83. },
  84. })
  85. if err != nil {
  86. return err
  87. }
  88. _, err = r.CommitObject(commit)
  89. if err != nil {
  90. return err
  91. }
  92. fmt.Println("Commit Done")
  93. err = r.Push(&git.PushOptions{
  94. Auth: publicKeys,
  95. })
  96. if err != nil {
  97. return err
  98. }
  99. fmt.Println("Push Done.")
  100. return nil
  101. }