Tue, 16 Dec 2025 21:16:32 +0100
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 +}