Commit 5b50e23

Eric Bower  ·  2023-08-09 23:46:05 -0400 EDT
parent ea6d2bf
progress
3 files changed,  +65, -52
+9, -1
......@@ -12,8 +12,16 @@
1212 <div>
1313 <a href="{{.URL}}">{{.SummaryStr}}</a>
1414 </div>
15- <div>
15+ <div class="flex gap">
1616 {{.ShortID}}
17+
18+ {{range .Refs}}
19+ {{if .URL}}
20+ <a href="{{.URL}}">({{.Refspec}})</a>
21+ {{else}}
22+ ({{.Refspec}})
23+ {{end}}
24+ {{end}}
1725 </div>
1826 </div>
1927
+2, -1
......@@ -6,6 +6,7 @@
66 {{template "header" .}}
77
88 <h2 class="text-md font-bold">refs</h2>
9+
910 <ul>
1011 {{range .Refs}}
1112 {{if .URL}}
......@@ -14,5 +15,5 @@
1415 <li>{{.Refspec}}</li>
1516 {{end}}
1617 {{end}}
17- </ol>
18+ </ul>
1819 {{end}}
+54, -50
......@@ -34,8 +34,6 @@ type Config struct {
3434 RepoPath string
3535
3636 // optional params
37- // generate logs and trees based on the git references provided
38- Refs []string
3937 // generate logs anad tree based on the git revisions provided
4038 Revs []string
4139 // description of repo used in the header of site
......@@ -73,12 +71,18 @@ type RevData struct {
7371 LogURL template.URL
7472 }
7573
74+type TagData struct {
75+ Name string
76+ URL template.URL
77+}
78+
7679 type CommitData struct {
7780 SummaryStr string
7881 URL template.URL
7982 WhenStr string
8083 AuthorStr string
8184 ShortID string
85+ Refs []*RefInfo
8286 *git.Commit
8387 }
8488
......@@ -113,6 +117,7 @@ type DiffRenderFile struct {
113117 }
114118
115119 type RefInfo struct {
120+ ID string
116121 Refspec string
117122 URL template.URL
118123 }
......@@ -408,6 +413,7 @@ func (c *Config) writeLogDiffs(repo *git.Repository, pageData *PageData, logs []
408413 commitID := commit.ID.String()
409414
410415 if c.Cache[commitID] {
416+ c.Logger.Infof("(%s) commit file already generated, skipping", getShortID(commitID))
411417 continue
412418 } else {
413419 c.Cache[commitID] = true
......@@ -469,9 +475,9 @@ func (c *Config) writeLogDiffs(repo *git.Repository, pageData *PageData, logs []
469475 commitData := &CommitPageData{
470476 PageData: pageData,
471477 Commit: commit,
472- CommitID: commit.ID.String()[:7],
478+ CommitID: getShortID(commitID),
473479 Diff: rnd,
474- Parent: parentID[:7],
480+ Parent: getShortID(parentID),
475481 CommitURL: c.getCommitURL(commitID),
476482 ParentURL: c.getCommitURL(parentID),
477483 }
......@@ -537,31 +543,19 @@ func (c *Config) writeRepo() *BranchOutput {
537543
538544 var first *RevData
539545 revs := []*RevData{}
540- for _, refStr := range c.Refs {
541- for _, ref := range refs {
542- refName := git.RefShortName(ref.Refspec)
543- if refName != refStr {
544- continue
545- }
546-
547- data := &RevData{
548- ID: ref.ID,
549- RevName: refName,
550- TreeURL: c.getTreeUrl(refName),
551- LogURL: c.getLogsUrl(refName),
552- }
553- if first == nil {
554- first = data
555- }
556- revs = append(revs, data)
557- }
558- }
559-
560546 for _, revStr := range c.Revs {
561547 fullRevID, err := repo.RevParse(revStr)
562548 bail(err)
563549
564550 revName := getShortID(fullRevID)
551+ // if it's a reference then label it as such
552+ for _, ref := range refs {
553+ if revStr == git.RefShortName(ref.Refspec) || revStr == ref.Refspec {
554+ revName = revStr
555+ break
556+ }
557+ }
558+
565559 data := &RevData{
566560 ID: fullRevID,
567561 RevName: revName,
......@@ -582,33 +576,24 @@ func (c *Config) writeRepo() *BranchOutput {
582576 mainOutput := &BranchOutput{}
583577 claimed := false
584578 for _, revData := range revs {
585- refInfoMap[revData.ID] = &RefInfo{
579+ refInfoMap[revData.RevName] = &RefInfo{
580+ ID: revData.ID,
586581 Refspec: revData.RevName,
587582 URL: revData.TreeURL,
588583 }
589-
590- data := &PageData{
591- Repo: c,
592- RevData: revData,
593- SiteURLs: c.getURLs(),
594- }
595-
596- branchOutput := c.writeBranch(repo, data)
597- if !claimed {
598- mainOutput = branchOutput
599- claimed = true
600- }
601584 }
602585
603586 // loop through ALL refs that don't have URLs
604587 // and add them to the map
605588 for _, ref := range refs {
606- if refInfoMap[ref.ID] != nil {
589+ refspec := git.RefShortName(ref.Refspec)
590+ if refInfoMap[refspec] != nil {
607591 continue
608592 }
609593
610- refInfoMap[ref.ID] = &RefInfo{
611- Refspec: strings.TrimPrefix(ref.Refspec, "refs/"),
594+ refInfoMap[refspec] = &RefInfo{
595+ ID: ref.ID,
596+ Refspec: refspec,
612597 }
613598 }
614599
......@@ -628,6 +613,20 @@ func (c *Config) writeRepo() *BranchOutput {
628613 return urlI > urlJ
629614 })
630615
616+ for _, revData := range revs {
617+ data := &PageData{
618+ Repo: c,
619+ RevData: revData,
620+ SiteURLs: c.getURLs(),
621+ }
622+
623+ branchOutput := c.writeBranch(repo, data, refInfoList)
624+ if !claimed {
625+ mainOutput = branchOutput
626+ claimed = true
627+ }
628+ }
629+
631630 // use the first revision in our list to generate
632631 // the root summary, logs, and tree the user can click
633632 revData := &RevData{
......@@ -646,7 +645,7 @@ func (c *Config) writeRepo() *BranchOutput {
646645 return mainOutput
647646 }
648647
649-func (c *Config) writeBranch(repo *git.Repository, pageData *PageData) *BranchOutput {
648+func (c *Config) writeBranch(repo *git.Repository, pageData *PageData, refs []*RefInfo) *BranchOutput {
650649 fmt.Printf("compiling (%s) branch (%s)\n", c.RepoName, pageData.RevData.RevName)
651650
652651 output := &BranchOutput{}
......@@ -664,13 +663,21 @@ func (c *Config) writeBranch(repo *git.Repository, pageData *PageData) *BranchOu
664663 output.LastCommit = commit
665664 }
666665
666+ tags := []*RefInfo{}
667+ for _, ref := range refs {
668+ if commit.ID.String() == ref.ID {
669+ tags = append(tags, ref)
670+ }
671+ }
672+
667673 logs = append(logs, &CommitData{
668674 URL: c.getCommitURL(commit.ID.String()),
669- ShortID: commit.ID.String()[:7],
675+ ShortID: getShortID(commit.ID.String()),
670676 SummaryStr: commit.Summary(),
671677 AuthorStr: commit.Author.Name,
672678 WhenStr: timediff.TimeDiff(commit.Author.When),
673679 Commit: commit,
680+ Refs: tags,
674681 })
675682 }
676683
......@@ -729,8 +736,7 @@ func (c *Config) writeBranch(repo *git.Repository, pageData *PageData) *BranchOu
729736 func main() {
730737 var outdir = flag.String("out", "./public", "output directory")
731738 var rpath = flag.String("repo", ".", "path to git repo")
732- var refsFlag = flag.String("refs", "", "list of refs to generate logs and tree (e.g. main,v1)")
733- var revsFlag = flag.String("revs", "HEAD", "list of revs to generate logs and tree (e.g. c69f86f,7415be1")
739+ var revsFlag = flag.String("revs", "HEAD", "list of revs to generate logs and tree (e.g. main,v1,c69f86f,HEAD")
734740 var themeFlag = flag.String("theme", "dracula", "theme to use for site")
735741
736742 flag.Parse()
......@@ -740,16 +746,15 @@ func main() {
740746 repoPath, err := filepath.Abs(*rpath)
741747 bail(err)
742748
743- refs := strings.Split(*refsFlag, ",")
744- if len(refs) == 1 && refs[0] == "" {
745- refs = []string{}
746- }
747-
748749 revs := strings.Split(*revsFlag, ",")
749750 if len(revs) == 1 && revs[0] == "" {
750751 revs = []string{}
751752 }
752753
754+ if len(revs) == 0 {
755+ bail(fmt.Errorf("you must provide --revs"))
756+ }
757+
753758 theme := styles.Get(*themeFlag)
754759
755760 lg, err := zap.NewProduction()
......@@ -764,7 +769,6 @@ func main() {
764769 RepoPath: repoPath,
765770 RepoName: repoName(repoPath),
766771 Cache: make(map[string]bool),
767- Refs: refs,
768772 Revs: revs,
769773 Theme: theme,
770774 Logger: logger,