summaryrefslogtreecommitdiff
path: root/cmd/gitmal
diff options
context:
space:
mode:
authormo khan <mo@mokhan.ca>2026-01-30 23:42:28 -0700
committermo khan <mo@mokhan.ca>2026-01-30 23:42:28 -0700
commit1bbe5e40640b39b7a08e4b9bcf08f7fdbdbb2f0a (patch)
tree2e30ddd0cb8ad61059a6d8acd8307fa4f28d9050 /cmd/gitmal
parentbbcd6c6d62f3befb58feddfa16513a5cd4c00473 (diff)
refactor: return err instead of panic and use errgroup
Diffstat (limited to 'cmd/gitmal')
-rw-r--r--cmd/gitmal/main.go59
1 files changed, 33 insertions, 26 deletions
diff --git a/cmd/gitmal/main.go b/cmd/gitmal/main.go
index 1581819..2207b95 100644
--- a/cmd/gitmal/main.go
+++ b/cmd/gitmal/main.go
@@ -1,6 +1,7 @@
package main
import (
+ "errors"
"fmt"
"os"
"path/filepath"
@@ -15,6 +16,13 @@ import (
var flagOutput string
func main() {
+ if err := run(); err != nil {
+ fmt.Fprintln(os.Stderr, "error:", err)
+ os.Exit(1)
+ }
+}
+
+func run() error {
flag.StringVar(&flagOutput, "output", "output", "Output directory")
flag.Usage = usage
flag.Parse()
@@ -25,17 +33,17 @@ func main() {
input = args[0]
}
if len(args) > 1 {
- panic("Multiple repos not supported yet")
+ return errors.New("multiple repos not supported yet")
}
outputDir, err := filepath.Abs(flagOutput)
if err != nil {
- panic(err)
+ return err
}
absInput, err := filepath.Abs(input)
if err != nil {
- panic(err)
+ return err
}
input = absInput
@@ -44,12 +52,12 @@ func main() {
branches, err := git.Branches(input)
if err != nil {
- panic(err)
+ return err
}
tags, err := git.Tags(input)
if err != nil {
- panic(err)
+ return err
}
var defaultBranch string
@@ -58,13 +66,11 @@ func main() {
} else if generator.ContainsBranch(branches, "main") {
defaultBranch = "main"
} else {
- generator.Echo("No default branch found (expected 'main' or 'master').")
- os.Exit(1)
+ return errors.New("no default branch found (expected 'main' or 'master')")
}
if yes, a, b := generator.HasConflictingBranchNames(branches); yes {
- generator.Echo(fmt.Sprintf("Conflicting branchs %q and %q, both want to use %q dir name.", a, b, a.DirName()))
- os.Exit(1)
+ return fmt.Errorf("conflicting branches %q and %q, both want to use %q dir name", a, b, a.DirName())
}
params := generator.Params{
@@ -80,7 +86,7 @@ func main() {
for _, branch := range branches {
commitsFor[branch], err = git.Commits(branch, params.RepoDir)
if err != nil {
- panic(err)
+ return err
}
for _, commit := range commitsFor[branch] {
@@ -95,7 +101,7 @@ func main() {
for _, tag := range tags {
commitsForTag, err := git.Commits(git.NewRef(tag.Name), params.RepoDir)
if err != nil {
- panic(err)
+ return err
}
for _, commit := range commitsForTag {
if alreadyExisting, ok := commits[commit.Hash]; ok && !alreadyExisting.Branch.IsEmpty() {
@@ -108,15 +114,15 @@ func main() {
generator.Echo(fmt.Sprintf("> %s: %d branches, %d tags, %d commits", params.Name, len(branches), len(tags), len(commits)))
if err := generator.GenerateCSS(params); err != nil {
- panic(err)
+ return err
}
if err := generator.GenerateBranches(branches, defaultBranch, params); err != nil {
- panic(err)
+ return err
}
if err := generator.GenerateBranchesJSON(branches, commitsFor, params); err != nil {
- panic(err)
+ return err
}
var defaultBranchFiles []git.Blob
@@ -127,7 +133,7 @@ func main() {
files, err := git.Files(params.Ref, params.RepoDir)
if err != nil {
- panic(err)
+ return err
}
if branch.String() == defaultBranch {
@@ -135,23 +141,23 @@ func main() {
}
if err := generator.GenerateBlobs(files, params); err != nil {
- panic(err)
+ return err
}
if err := generator.GenerateLists(files, params); err != nil {
- panic(err)
+ return err
}
if err := generator.GenerateLogForBranch(commitsFor[branch], params); err != nil {
- panic(err)
+ return err
}
if err := generator.GenerateCommitsJSON(commitsFor[branch], params); err != nil {
- panic(err)
+ return err
}
if err := generator.GenerateCommitsAtom(commitsFor[branch], params); err != nil {
- panic(err)
+ return err
}
}
@@ -159,28 +165,29 @@ func main() {
generator.Echo("> generating commits...")
if err := generator.GenerateCommits(commits, params); err != nil {
- panic(err)
+ return err
}
if err := generator.GenerateTags(tags, params); err != nil {
- panic(err)
+ return err
}
if err := generator.GenerateTagsAtom(tags, params); err != nil {
- panic(err)
+ return err
}
if err := generator.GenerateReleasesAtom(tags, params); err != nil {
- panic(err)
+ return err
}
if len(defaultBranchFiles) == 0 {
- panic("No files found for default branch")
+ return errors.New("no files found for default branch")
}
if err := generator.GenerateIndex(defaultBranchFiles, params); err != nil {
- panic(err)
+ return err
}
+ return nil
}
func usage() {