summaryrefslogtreecommitdiff
path: root/internal/generator/branches_json.go
blob: 687dd233e4d925624bb2e6f3adf3a6815b424b95 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package generator

import (
	"encoding/json"
	"os"
	"path/filepath"

	"mokhan.ca/xlgmokha/gitmal/internal/git"
)

type BranchJSON struct {
	Name   string     `json:"name"`
	Commit BranchHead `json:"commit"`
}

type BranchHead struct {
	SHA string `json:"sha"`
}

func GenerateBranchesJSON(branches []git.Ref, commitsFor map[git.Ref][]git.Commit, params Params) error {
	list := make([]BranchJSON, 0, len(branches))
	for _, branch := range branches {
		commits := commitsFor[branch]
		var sha string
		if len(commits) > 0 {
			sha = commits[0].Hash
		}
		list = append(list, BranchJSON{
			Name:   branch.String(),
			Commit: BranchHead{SHA: sha},
		})
	}

	outPath := filepath.Join(params.OutputDir, "branches.json")
	f, err := os.Create(outPath)
	if err != nil {
		return err
	}
	defer f.Close()
	encoder := json.NewEncoder(f)
	encoder.SetIndent("", "  ")
	return encoder.Encode(list)
}