get latest commit infos

Tue, 16 Dec 2025 21:16:32 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Tue, 16 Dec 2025 21:16:32 +0100
changeset 4
e24fc79b7980
parent 3
9273d04a4d89
child 5
08333803df48

get latest commit infos

.hgignore file | annotate | diff | comparison | revisions
src/main.go file | annotate | diff | comparison | revisions
--- a/.hgignore	Tue Dec 16 20:12:54 2025 +0100
+++ b/.hgignore	Tue Dec 16 21:16:32 2025 +0100
@@ -1,3 +1,3 @@
 ^.idea/
 ^tmp/
-
+^out/
--- a/src/main.go	Tue Dec 16 20:12:54 2025 +0100
+++ b/src/main.go	Tue Dec 16 21:16:32 2025 +0100
@@ -9,6 +9,7 @@
 	"os"
 	"os/exec"
 	"path"
+	"strconv"
 	"strings"
 	"text/template"
 )
@@ -27,37 +28,55 @@
 	User string `xml:"user"`
 }
 
+type Build struct {
+	Name        string `xml:"name,attr"`
+	IsPlatform  string `xml:"isplatform,attr"`
+	NotPlatform string `xml:"not,attr"`
+	NotList     []string
+	Test        []string `xml:"test"`
+	Var         []struct {
+		Name  string `xml:"name,attr"`
+		Value string `xml:",chardata"`
+	}
+	Configure string `xml:"configure"`
+	Compile   string `xml:"compile"`
+	Check     string `xml:"check"`
+}
+
 type Repository struct {
-	Path      string `xml:"path"`
-	BuildEnvs string `xml:"buildenvs"`
-	Build     []struct {
-		Name        string `xml:"name,attr"`
-		IsPlatform  string `xml:"isplatform,attr"`
-		NotPlatform string `xml:"not,attr"`
-		NotList     []string
-		Test        []string `xml:"test"`
-		Var         []struct {
-			Name  string `xml:"name,attr"`
-			Value string `xml:",chardata"`
-		}
-		Configure string `xml:"configure"`
-		Compile   string `xml:"compile"`
-		Check     string `xml:"check"`
-	} `xml:"build"`
+	Path      string  `xml:"path"`
+	BuildEnvs string  `xml:"buildenvs"`
+	Build     []Build `xml:"build"`
 }
 
 type Result struct {
-	Build     string `json:"build"`
+	Build     *Build
+	Id        string `json:"build"`
 	Name      string `json:"name"`
 	Configure string `json:"configure"`
 	Compile   string `json:"compile"`
 	Check     string `json:"check"`
 }
 
-type Results struct {
+type BuildEnvResult struct {
+	Env     *BuildEnv
 	Results []Result
 }
 
+type Commit struct {
+	Rev       string
+	NodeShort string
+	Node      string
+	Desc      string
+	Author    string
+	Date      string
+}
+
+type CommitResult struct {
+	Commit  *Commit
+	Results []BuildEnvResult
+}
+
 func main() {
 	data, err := os.ReadFile("testconfig.xml")
 	if err != nil {
@@ -111,7 +130,9 @@
 			log.Fatal(err)
 		}
 
-		exec_buildenvs(config, &repo, tmp)
+		results := exec_buildenvs(config, &repo, tmp)
+
+		err = save_result(&repo, results, tmp)
 	}
 }
 
@@ -215,12 +236,25 @@
 	return true
 }
 
-func exec_buildenvs(config *Config, repo *Repository, tmp_dir string) int {
+func get_build(builds []Build, id string) *Build {
+	i, err := strconv.Atoi(id)
+	if err != nil {
+		return nil
+	}
+	if i < 0 || i >= len(builds) {
+		return nil
+	}
+	return &builds[i]
+}
+
+func exec_buildenvs(config *Config, repo *Repository, tmp_dir string) []BuildEnvResult {
+	var buildResults []BuildEnvResult
+
 	if len(repo.BuildEnvs) == 0 {
 		log.Print("repo %s has no buildenvs", repo.Path)
-		return 0
+		return buildResults
 	}
-	success := 0
+
 	buildenvs := strings.Split(repo.BuildEnvs, ",")
 	for _, buildenv := range buildenvs {
 		env, ok := config.BuildEnvMap[buildenv]
@@ -285,10 +319,79 @@
 			continue
 		}
 
-		log.Print(results)
+		// store the actual Build pointer in the result
+		for i := range results {
+			results[i].Build = get_build(repo.Build, results[i].Id)
+		}
+		log.Print("buildenv finished ", env.Name)
+
+		envResult := BuildEnvResult{Env: &env, Results: results}
+		buildResults = append(buildResults, envResult)
+	}
+
+	return buildResults
+}
+
+func get_commit_info(tmp_dir string) *Commit {
+	var outb, errb bytes.Buffer
 
-		success++
+	commit := &Commit{}
+
+	cmd := exec.Command("hg", "log", "-r", ".", "-T", "{rev}\\t{node|short}\\t{node}\\t{date|isodate}")
+	cmd.Dir = path.Join(tmp_dir, "build/src")
+	cmd.Stdout = &outb
+	cmd.Stderr = &errb
+	if err := cmd.Run(); err != nil {
+		log.Print(outb.String())
+		log.Print(errb.String())
+		return nil
+	}
+
+	info := strings.Split(outb.String(), "\t")
+	if len(info) != 4 {
+		log.Print(outb.String())
+		log.Print(errb.String())
+		return nil
 	}
 
-	return success
+	commit.Rev = info[0]
+	commit.NodeShort = info[1]
+	commit.Node = info[2]
+	commit.Date = info[3]
+
+	outb.Reset()
+	errb.Reset()
+
+	cmd = exec.Command("hg", "log", "-r", ".", "-T", "{author}")
+	cmd.Dir = path.Join(tmp_dir, "build/src")
+	cmd.Stdout = &outb
+	cmd.Stderr = &errb
+	if err := cmd.Run(); err != nil {
+		log.Print(outb.String())
+		log.Print(errb.String())
+		return nil
+	}
+	commit.Author = outb.String()
+
+	cmd = exec.Command("hg", "log", "-r", ".", "-T", "{desc}")
+	cmd.Dir = path.Join(tmp_dir, "build/src")
+	cmd.Stdout = &outb
+	cmd.Stderr = &errb
+	if err := cmd.Run(); err != nil {
+		log.Print(outb.String())
+		log.Print(errb.String())
+		return nil
+	}
+	commit.Desc = outb.String()
+
+	return commit
 }
+
+func save_result(repo *Repository, result []BuildEnvResult, tmp_dir string) error {
+	//out_dir := "out/"
+
+	// get commit infos
+	get_commit_info(tmp_dir)
+
+	return nil
+}

mercurial