123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- // Copyright 2025 BackendServerTemplate Authors. All rights reserved.
- // Use of this source code is governed by a MIT-style
- // license that can be found in the LICENSE file.
- package git
- import (
- "fmt"
- "github.com/SongZihuan/BackendServerTemplate/tool/generate/basefile"
- "github.com/SongZihuan/BackendServerTemplate/tool/utils/fileutils"
- "github.com/SongZihuan/BackendServerTemplate/tool/utils/gitutils"
- "github.com/SongZihuan/BackendServerTemplate/tool/utils/modutils"
- "strings"
- "sync"
- )
- var once sync.Once
- var lastCommit string = ""
- var lastTag string = ""
- var lastTagCommit string = ""
- var secondToLastTag string = ""
- var secondToLastTagCommit string = ""
- var firstCommit string = ""
- func InitGitData() (err error) {
- once.Do(func() {
- err = initGitData()
- })
- return err
- }
- func initGitData() (err error) {
- if !gitutils.HasGit() {
- return nil
- }
- defer func() {
- if err != nil {
- lastCommit = ""
- lastTag = ""
- lastTagCommit = ""
- secondToLastTag = ""
- secondToLastTagCommit = ""
- firstCommit = ""
- }
- }()
- lastCommit, err = gitutils.GetLastCommit()
- if err != nil {
- return err
- }
- firstCommit, err = gitutils.GetFirstCommit()
- if err != nil {
- return err
- }
- tagList, err := gitutils.GetTagListWithFilter(func(s string) bool {
- return strings.HasPrefix(s, "v")
- })
- if err == nil {
- return err
- }
- if len(tagList) > 0 {
- lastTag = tagList[0]
- lastTagCommit, err = gitutils.GetTagCommit(lastTag)
- if err != nil {
- return err
- }
- }
- if len(tagList) > 1 {
- secondToLastTag = tagList[1]
- secondToLastTagCommit, err = gitutils.GetTagCommit(secondToLastTag)
- if err != nil {
- return err
- }
- } else {
- secondToLastTag = ""
- secondToLastTagCommit = ""
- }
- return nil
- }
- func Version() string {
- _ = InitGitData()
- return lastTag
- }
- func WriteGitData() (err error) {
- _ = InitGitData()
- err = fileutils.Write(basefile.FileCommitDateTxt, lastCommit)
- if err != nil {
- return err
- }
- err = fileutils.Write(basefile.FileTagDataTxt, lastTag)
- if err != nil {
- return err
- }
- err = fileutils.Write(basefile.FileTagCommitData, lastTagCommit)
- if err != nil {
- return err
- }
- return nil
- }
- func GetGitHubCompareMD() string {
- _ = InitGitData()
- compare, url := GetGitHubCompareURL()
- if compare == "" || url == "" {
- return ""
- }
- return fmt.Sprintf("**Git Changelog:[%s](%s)", compare, url)
- }
- func GetGitHubCompareURL() (string, string) {
- _ = InitGitData()
- if !modutils.IsGitHub || lastTag == "" || firstCommit == lastTagCommit {
- return "", ""
- }
- if secondToLastTag != "" {
- compare := fmt.Sprintf("%s...%s", secondToLastTag, lastTag)
- return compare, fmt.Sprintf("https://%s/compare/%s", modutils.ModPath, compare)
- }
- return lastTag, fmt.Sprintf("https://%s/compare/%s...%s", modutils.ModPath, firstCommit, lastTag)
- }
|