Commit 029d56d

Eric Bower  ·  2023-08-09 00:13:46 -0400 EDT
parent c69f86f
progress
1 files changed,  +80, -56
+80, -56
......@@ -32,8 +32,10 @@ type Config struct {
3232 RepoPath string
3333
3434 // optional params
35- // generate logs and trees based on the refs provided
35+ // generate logs and trees based on the git references provided
3636 Refs []string
37+ // generate logs anad tree based on the git revisions provided
38+ Revs []string
3739 // description of repo used in the header of site
3840 Desc string
3941 // maximum number of commits that we will process in descending order
......@@ -57,11 +59,12 @@ type Config struct {
5759 RepoName string
5860 }
5961
62+// revision data
6063 type RevData struct {
64+ ID string
6165 RevName string
6266 TreeURL template.URL
6367 LogURL template.URL
64- Ref *git.Reference
6568 }
6669
6770 type CommitData struct {
......@@ -77,12 +80,12 @@ type TreeItem struct {
7780 IsTextFile bool
7881 Size string
7982 NumLines int
80- URL string
8183 Path string
82- Entry *git.TreeEntry
84+ URL template.URL
8385 CommitURL template.URL
8486 Summary string
8587 When string
88+ Entry *git.TreeEntry
8689 }
8790
8891 type DiffRender struct {
......@@ -271,7 +274,7 @@ func walkTree(tree *git.Tree, branch string, curpath string, aggregate []*TreeIt
271274 Size: toPretty(entry.Size()),
272275 Path: fname,
273276 Entry: entry,
274- URL: filepath.Join("/", "tree", branch, "item", fname),
277+ URL: template.URL(filepath.Join("/", "tree", branch, "item", fname)),
275278 })
276279 }
277280 }
......@@ -514,6 +517,10 @@ func (c *Config) getURLs() *SiteURLs {
514517 }
515518 }
516519
520+func getShortID(id string) string {
521+ return id[:7]
522+}
523+
517524 func (c *Config) writeRepo() *BranchOutput {
518525 repo, err := git.Open(c.RepoPath)
519526 bail(err)
......@@ -521,57 +528,72 @@ func (c *Config) writeRepo() *BranchOutput {
521528 refs, err := repo.ShowRef(git.ShowRefOptions{Heads: true, Tags: true})
522529 bail(err)
523530
524- var first *git.Reference
525- fitRefs := []*git.Reference{}
531+ var first *RevData
532+ revs := []*RevData{}
526533 for _, refStr := range c.Refs {
527534 for _, ref := range refs {
528- rH := strings.Replace(ref.Refspec, "refs/heads/", "", 1)
529- rT := strings.Replace(rH, "refs/tags/", "", 1)
530- if rT == refStr {
531- if first == nil {
532- first = ref
533- }
534- fitRefs = append(fitRefs, ref)
535+ refName := git.RefShortName(ref.Refspec)
536+ if refName != refStr {
537+ continue
538+ }
539+
540+ data := &RevData{
541+ ID: ref.ID,
542+ RevName: refName,
543+ TreeURL: c.getTreeUrl(refName),
544+ LogURL: c.getLogsUrl(refName),
545+ }
546+ if first == nil {
547+ first = data
535548 }
549+ revs = append(revs, data)
550+ }
551+ }
552+
553+ for _, revStr := range c.Revs {
554+ fullRevID, err := repo.RevParse(revStr)
555+ bail(err)
556+
557+ revName := getShortID(fullRevID)
558+ data := &RevData{
559+ ID: fullRevID,
560+ RevName: revName,
561+ TreeURL: c.getTreeUrl(revName),
562+ LogURL: c.getLogsUrl(revName),
536563 }
564+ if first == nil {
565+ first = data
566+ }
567+ revs = append(revs, data)
537568 }
538569
539570 if first == nil {
540571 bail(fmt.Errorf("could find find a git reference that matches criteria"))
541572 }
542573
543- _, revName := filepath.Split(first.Refspec)
544-
545574 refInfoMap := map[string]*RefInfo{}
546575 mainOutput := &BranchOutput{}
547576 claimed := false
548- for _, ref := range fitRefs {
549- _, revn := filepath.Split(ref.Refspec)
550- refInfoMap[ref.ID] = &RefInfo{
551- Refspec: strings.TrimPrefix(ref.Refspec, "refs/"),
552- URL: c.getTreeUrl(revn),
553- }
554-
555- branchRepo := &RevData{
556- TreeURL: c.getTreeUrl(revn),
557- LogURL: c.getLogsUrl(revn),
558- RevName: revn,
559- Ref: ref,
560- }
577+ for _, revData := range revs {
578+ refInfoMap[revData.ID] = &RefInfo{
579+ Refspec: revData.RevName,
580+ URL: revData.TreeURL,
581+ }
561582
562- data := &PageData{
563- Repo: c,
564- RevData: branchRepo,
565- SiteURLs: c.getURLs(),
566- }
583+ data := &PageData{
584+ Repo: c,
585+ RevData: revData,
586+ SiteURLs: c.getURLs(),
587+ }
567588
568- branchOutput := c.writeBranch(repo, data)
569- if !claimed {
570- mainOutput = branchOutput
571- claimed = true
572- }
589+ branchOutput := c.writeBranch(repo, data)
590+ if !claimed {
591+ mainOutput = branchOutput
592+ claimed = true
573593 }
594+ }
574595
596+ // loop through ALL refs that don't have URLs
575597 for _, ref := range refs {
576598 if refInfoMap[ref.ID] != nil {
577599 continue
......@@ -598,9 +620,9 @@ func (c *Config) writeRepo() *BranchOutput {
598620 })
599621
600622 revData := &RevData{
601- TreeURL: c.getTreeUrl(revName),
602- LogURL: c.getLogsUrl(revName),
603- RevName: revName,
623+ TreeURL: c.getTreeUrl(first.RevName),
624+ LogURL: c.getLogsUrl(first.RevName),
625+ RevName: first.RevName,
604626 }
605627
606628 data := &PageData{
......@@ -622,7 +644,7 @@ func (c *Config) writeBranch(repo *git.Repository, pageData *PageData) *BranchOu
622644 pageSize = 5000
623645 }
624646
625- commits, err := repo.CommitsByPage(pageData.RevData.Ref.ID, 0, pageSize)
647+ commits, err := repo.CommitsByPage(pageData.RevData.ID, 0, pageSize)
626648 bail(err)
627649
628650 logs := []*CommitData{}
......@@ -641,7 +663,7 @@ func (c *Config) writeBranch(repo *git.Repository, pageData *PageData) *BranchOu
641663 })
642664 }
643665
644- tree, err := repo.LsTree(pageData.RevData.Ref.ID)
666+ tree, err := repo.LsTree(pageData.RevData.ID)
645667 bail(err)
646668
647669 entries := []*TreeItem{}
......@@ -654,7 +676,7 @@ func (c *Config) writeBranch(repo *git.Repository, pageData *PageData) *BranchOu
654676 if pageData.Repo.HideTreeLastCommit {
655677 fmt.Println("skipping finding last commit for each file")
656678 } else {
657- lastCommits, err = repo.RevList([]string{pageData.RevData.Ref.Refspec}, git.RevListOptions{
679+ lastCommits, err = repo.RevList([]string{pageData.RevData.ID}, git.RevListOptions{
658680 Path: entry.Path,
659681 CommandOptions: git.CommandOptions{Args: []string{"-1"}},
660682 })
......@@ -668,14 +690,14 @@ func (c *Config) writeBranch(repo *git.Repository, pageData *PageData) *BranchOu
668690 entry.Summary = lc.Summary()
669691 entry.When = timediff.TimeDiff(lc.Author.When)
670692 }
671- entry.URL = filepath.Join(
693+ entry.URL = template.URL(filepath.Join(
672694 "/",
673695 c.RepoName,
674696 "tree",
675697 pageData.RevData.RevName,
676698 "item",
677699 fmt.Sprintf("%s.html", entry.Path),
678- )
700+ ))
679701 }
680702
681703 fmt.Printf("compilation complete (%s) branch (%s)\n", c.RepoName, pageData.RevData.RevName)
......@@ -690,9 +712,10 @@ func (c *Config) writeBranch(repo *git.Repository, pageData *PageData) *BranchOu
690712 }
691713
692714 func main() {
693- var outdir = flag.String("out", "./public", "output directory (default: ./public)")
715+ var outdir = flag.String("out", "./public", "output directory")
694716 var rpath = flag.String("repo", ".", "path to git repo")
695- var refsFlag = flag.String("refs", "", "path to git repo")
717+ var refsFlag = flag.String("refs", "", "list of refs to generate logs and tree (e.g. main,v1)")
718+ var revsFlag = flag.String("revs", "HEAD", "list of revs to generate logs and tree (e.g. c69f86f,7415be1")
696719
697720 flag.Parse()
698721
......@@ -703,7 +726,12 @@ func main() {
703726
704727 refs := strings.Split(*refsFlag, ",")
705728 if len(refs) == 1 && refs[0] == "" {
706- refs = []string{"main", "master"}
729+ refs = []string{}
730+ }
731+
732+ revs := strings.Split(*revsFlag, ",")
733+ if len(revs) == 1 && revs[0] == "" {
734+ revs = []string{}
707735 }
708736
709737 config := &Config{
......@@ -712,14 +740,10 @@ func main() {
712740 RepoName: repoName(repoPath),
713741 Cache: make(map[string]bool),
714742 Refs: refs,
743+ Revs: revs,
715744 }
716745
717- fmt.Println(config.Outdir)
718- fmt.Println(config.RepoPath)
719- fmt.Println(config.RepoName)
720- fmt.Println(config.Refs)
721-
722746 config.writeRepo()
723- url := filepath.Join(config.Outdir, config.RepoName, "index.html")
747+ url := filepath.Join("/", config.RepoName, "index.html")
724748 fmt.Println(url)
725749 }