Commit 173794d

Eric Bower  ·  2023-08-14 16:33:58 -0400 EDT
parent 9185313
refactor: use reference name for URLs
2 files changed,  +83, -49
+1, -1
......@@ -10,7 +10,7 @@
1010 <nav class="text-lg">
1111 <a href="{{.SiteURLs.SummaryURL}}">summary</a> |
1212 <a href="{{.SiteURLs.RefsURL}}">refs</a> |
13- <span class="font-bold">{{.RevData.RevName}}</span> |
13+ <span class="font-bold">{{.RevData.Name}}</span> |
1414 <a href="{{.RevData.TreeURL}}">tree</a> |
1515 <a href="{{.RevData.LogURL}}">log</a>
1616 </nav>
+82, -48
......@@ -13,7 +13,6 @@ import (
1313 "path/filepath"
1414 "sort"
1515 "strings"
16- "time"
1716 "unicode/utf8"
1817
1918 "github.com/alecthomas/chroma"
......@@ -70,12 +69,31 @@ type Config struct {
7069 Theme *chroma.Style
7170 }
7271
72+type RevInfo interface {
73+ ID() string
74+ Name() string
75+}
76+
7377 // revision data
7478 type RevData struct {
75- ID string
76- RevName string
77- TreeURL template.URL
78- LogURL template.URL
79+ id string
80+ name string
81+}
82+
83+func (r *RevData) ID() string {
84+ return r.id
85+}
86+
87+func (r *RevData) Name() string {
88+ return r.name
89+}
90+
91+func (r *RevData) TreeURL() template.URL {
92+ return getTreeURL(r)
93+}
94+
95+func (r *RevData) LogURL() template.URL {
96+ return getLogsURL(r)
7997 }
8098
8199 type TagData struct {
......@@ -283,7 +301,7 @@ func readmeFile(repo *Config) string {
283301 return strings.ToLower(repo.Readme)
284302 }
285303
286-func walkTree(tree *git.Tree, commitID string, curpath string, aggregate []*TreeItem) []*TreeItem {
304+func walkTree(tree *git.Tree, revData *RevData, curpath string, aggregate []*TreeItem) []*TreeItem {
287305 entries, err := tree.Entries()
288306 bail(err)
289307
......@@ -292,7 +310,7 @@ func walkTree(tree *git.Tree, commitID string, curpath string, aggregate []*Tree
292310 typ := entry.Type()
293311 if typ == git.ObjectTree {
294312 re, _ := tree.Subtree(entry.Name())
295- aggregate = walkTree(re, commitID, fname, aggregate)
313+ aggregate = walkTree(re, revData, fname, aggregate)
296314 }
297315
298316 if entry.Type() == git.ObjectBlob {
......@@ -300,7 +318,7 @@ func walkTree(tree *git.Tree, commitID string, curpath string, aggregate []*Tree
300318 Size: toPretty(entry.Size()),
301319 Path: fname,
302320 Entry: entry,
303- URL: template.URL(filepath.Join("/", "tree", commitID, "item", fname)),
321+ URL: template.URL(getFileURL(revData, fname)),
304322 })
305323 }
306324 }
......@@ -352,7 +370,7 @@ func (c *Config) writeRootSummary(data *PageData, readme template.HTML) {
352370 func (c *Config) writeTree(data *PageData, tree []*TreeItem) {
353371 c.writeHtml(&WriteData{
354372 Filename: "index.html",
355- Subdir: filepath.Join("tree", getShortID(data.RevData.ID)),
373+ Subdir: getTreeBaseDir(data.RevData),
356374 Template: "html/tree.page.tmpl",
357375 Data: &TreePageData{
358376 PageData: data,
......@@ -364,7 +382,7 @@ func (c *Config) writeTree(data *PageData, tree []*TreeItem) {
364382 func (c *Config) writeLog(data *PageData, logs []*CommitData) {
365383 c.writeHtml(&WriteData{
366384 Filename: "index.html",
367- Subdir: filepath.Join("logs", getShortID(data.RevData.ID)),
385+ Subdir: getLogBaseDir(data.RevData),
368386 Template: "html/log.page.tmpl",
369387 Data: &LogPageData{
370388 PageData: data,
......@@ -416,7 +434,7 @@ func (c *Config) writeHTMLTreeFiles(pageData *PageData, tree []*TreeItem) string
416434 Contents: template.HTML(contents),
417435 Path: file.Path,
418436 },
419- Subdir: filepath.Join("tree", getShortID(pageData.RevData.ID), "item", d),
437+ Subdir: getFileURL(pageData.RevData, d),
420438 })
421439 }
422440 return readme
......@@ -442,7 +460,7 @@ func (c *Config) writeLogDiffs(repo *git.Repository, pageData *PageData, logs []
442460 pt := ancestors[0]
443461 parent = &CommitData{
444462 Commit: pt,
445- URL: c.getCommitURL(pt.ID.String()),
463+ URL: getCommitURL(pt.ID.String()),
446464 }
447465 }
448466 parentID := parent.ID.String()
......@@ -492,8 +510,8 @@ func (c *Config) writeLogDiffs(repo *git.Repository, pageData *PageData, logs []
492510 CommitID: getShortID(commitID),
493511 Diff: rnd,
494512 Parent: getShortID(parentID),
495- CommitURL: c.getCommitURL(commitID),
496- ParentURL: c.getCommitURL(parentID),
513+ CommitURL: getCommitURL(commitID),
514+ ParentURL: getCommitURL(parentID),
497515 }
498516
499517 c.writeHtml(&WriteData{
......@@ -505,27 +523,47 @@ func (c *Config) writeLogDiffs(repo *git.Repository, pageData *PageData, logs []
505523 }
506524 }
507525
508-func (c *Config) getSummaryURL() template.URL {
526+func getSummaryURL() template.URL {
509527 url := "/index.html"
510528 return template.URL(url)
511529 }
512530
513-func (c *Config) getRefsURL() template.URL {
531+func getRefsURL() template.URL {
514532 url := "/refs.html"
515533 return template.URL(url)
516534 }
517535
518-func (c *Config) getTreeURL(revn string) template.URL {
519- url := fmt.Sprintf("/tree/%s/index.html", revn)
536+func getRevIDForURL(info RevInfo) string {
537+ return info.Name()
538+}
539+
540+func getTreeBaseDir(info RevInfo) string {
541+ subdir := getRevIDForURL(info)
542+ return filepath.Join("/", "tree", subdir)
543+}
544+
545+func getLogBaseDir(info RevInfo) string {
546+ subdir := getRevIDForURL(info)
547+ return filepath.Join("/", "logs", subdir)
548+}
549+
550+func getFileURL(info RevInfo, fname string) string {
551+ return filepath.Join(getTreeBaseDir(info), "item", fname)
552+}
553+
554+func getTreeURL(info RevInfo) template.URL {
555+ dir := getTreeBaseDir(info)
556+ url := filepath.Join(dir, "index.html")
520557 return template.URL(url)
521558 }
522559
523-func (c *Config) getLogsURL(revn string) template.URL {
524- url := fmt.Sprintf("/logs/%s/index.html", revn)
560+func getLogsURL(info RevInfo) template.URL {
561+ dir := getLogBaseDir(info)
562+ url := filepath.Join(dir, "index.html")
525563 return template.URL(url)
526564 }
527565
528-func (c *Config) getCommitURL(commitID string) template.URL {
566+func getCommitURL(commitID string) template.URL {
529567 url := fmt.Sprintf("/commits/%s.html", commitID)
530568 return template.URL(url)
531569 }
......@@ -534,8 +572,8 @@ func (c *Config) getURLs() *SiteURLs {
534572 return &SiteURLs{
535573 HomeURL: c.HomeURL,
536574 CloneURL: c.CloneURL,
537- RefsURL: c.getRefsURL(),
538- SummaryURL: c.getSummaryURL(),
575+ RefsURL: getRefsURL(),
576+ SummaryURL: getSummaryURL(),
539577 }
540578 }
541579
......@@ -567,11 +605,10 @@ func (c *Config) writeRepo() *BranchOutput {
567605 }
568606
569607 data := &RevData{
570- ID: fullRevID,
571- RevName: revName,
572- TreeURL: c.getTreeURL(revID),
573- LogURL: c.getLogsURL(revID),
608+ id: fullRevID,
609+ name: revName,
574610 }
611+
575612 if first == nil {
576613 first = data
577614 }
......@@ -586,10 +623,10 @@ func (c *Config) writeRepo() *BranchOutput {
586623 mainOutput := &BranchOutput{}
587624 claimed := false
588625 for _, revData := range revs {
589- refInfoMap[revData.RevName] = &RefInfo{
590- ID: revData.ID,
591- Refspec: revData.RevName,
592- URL: revData.TreeURL,
626+ refInfoMap[revData.Name()] = &RefInfo{
627+ ID: revData.ID(),
628+ Refspec: revData.Name(),
629+ URL: revData.TreeURL(),
593630 }
594631 }
595632
......@@ -640,9 +677,8 @@ func (c *Config) writeRepo() *BranchOutput {
640677 // use the first revision in our list to generate
641678 // the root summary, logs, and tree the user can click
642679 revData := &RevData{
643- TreeURL: c.getTreeURL(getShortID(first.ID)),
644- LogURL: c.getLogsURL(getShortID(first.ID)),
645- RevName: first.RevName,
680+ id: first.ID(),
681+ name: first.Name(),
646682 }
647683
648684 data := &PageData{
......@@ -659,7 +695,7 @@ func (c *Config) writeRevision(repo *git.Repository, pageData *PageData, refs []
659695 c.Logger.Infof(
660696 "compiling (%s) revision (%s)",
661697 c.RepoName,
662- pageData.RevData.RevName,
698+ pageData.RevData.Name(),
663699 )
664700
665701 output := &BranchOutput{}
......@@ -668,7 +704,7 @@ func (c *Config) writeRevision(repo *git.Repository, pageData *PageData, refs []
668704 pageSize = 5000
669705 }
670706
671- commits, err := repo.CommitsByPage(pageData.RevData.ID, 0, pageSize)
707+ commits, err := repo.CommitsByPage(pageData.RevData.ID(), 0, pageSize)
672708 bail(err)
673709
674710 logs := []*CommitData{}
......@@ -685,21 +721,21 @@ func (c *Config) writeRevision(repo *git.Repository, pageData *PageData, refs []
685721 }
686722
687723 logs = append(logs, &CommitData{
688- URL: c.getCommitURL(commit.ID.String()),
724+ URL: getCommitURL(commit.ID.String()),
689725 ShortID: getShortID(commit.ID.String()),
690726 SummaryStr: commit.Summary(),
691727 AuthorStr: commit.Author.Name,
692- WhenStr: commit.Author.When.Format(time.RFC822),
728+ WhenStr: commit.Author.When.Format("02 Jan 06"),
693729 Commit: commit,
694730 Refs: tags,
695731 })
696732 }
697733
698- tree, err := repo.LsTree(pageData.RevData.ID)
734+ tree, err := repo.LsTree(pageData.RevData.ID())
699735 bail(err)
700736
701737 entries := []*TreeItem{}
702- treeEntries := walkTree(tree, getShortID(pageData.RevData.ID), "", entries)
738+ treeEntries := walkTree(tree, pageData.RevData, "", entries)
703739 for _, entry := range treeEntries {
704740 entry.Path = strings.TrimPrefix(entry.Path, "/")
705741
......@@ -708,7 +744,7 @@ func (c *Config) writeRevision(repo *git.Repository, pageData *PageData, refs []
708744 if pageData.Repo.HideTreeLastCommit {
709745 c.Logger.Info("skipping finding last commit for each file")
710746 } else {
711- lastCommits, err = repo.RevList([]string{pageData.RevData.ID}, git.RevListOptions{
747+ lastCommits, err = repo.RevList([]string{pageData.RevData.ID()}, git.RevListOptions{
712748 Path: entry.Path,
713749 CommandOptions: git.CommandOptions{Args: []string{"-1"}},
714750 })
......@@ -718,14 +754,12 @@ func (c *Config) writeRevision(repo *git.Repository, pageData *PageData, refs []
718754 if len(lastCommits) > 0 {
719755 lc = lastCommits[0]
720756 }
721- entry.CommitURL = c.getCommitURL(lc.ID.String())
757+ entry.CommitURL = getCommitURL(lc.ID.String())
722758 entry.Summary = lc.Summary()
723- entry.When = lc.Author.When.Format(time.RFC822)
759+ entry.When = lc.Author.When.Format("02 Jan 06")
724760 }
725- fpath := filepath.Join(
726- "/tree",
727- getShortID(pageData.RevData.ID),
728- "item",
761+ fpath := getFileURL(
762+ pageData.RevData,
729763 fmt.Sprintf("%s.html", entry.Path),
730764 )
731765 entry.URL = template.URL(fpath)
......@@ -734,7 +768,7 @@ func (c *Config) writeRevision(repo *git.Repository, pageData *PageData, refs []
734768 c.Logger.Infof(
735769 "compilation complete (%s) branch (%s)",
736770 c.RepoName,
737- pageData.RevData.RevName,
771+ pageData.RevData.Name(),
738772 )
739773
740774 c.writeLog(pageData, logs)