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 @@ | |
| 10 | 10 | <nav class="text-lg"> | |
| 11 | 11 | <a href="{{.SiteURLs.SummaryURL}}">summary</a> | | |
| 12 | 12 | <a href="{{.SiteURLs.RefsURL}}">refs</a> | | |
| 13 | - | <span class="font-bold">{{.RevData.RevName}}</span> | | |
| 13 | + | <span class="font-bold">{{.RevData.Name}}</span> | | |
| 14 | 14 | <a href="{{.RevData.TreeURL}}">tree</a> | | |
| 15 | 15 | <a href="{{.RevData.LogURL}}">log</a> | |
| 16 | 16 | </nav> |
M
main.go
+82,
-48
| ... | ... | @@ -13,7 +13,6 @@ import ( | |
| 13 | 13 | "path/filepath" | |
| 14 | 14 | "sort" | |
| 15 | 15 | "strings" | |
| 16 | - | "time" | |
| 17 | 16 | "unicode/utf8" | |
| 18 | 17 | ||
| 19 | 18 | "github.com/alecthomas/chroma" |
| ... | ... | @@ -70,12 +69,31 @@ type Config struct { | |
| 70 | 69 | Theme *chroma.Style | |
| 71 | 70 | } | |
| 72 | 71 | ||
| 72 | + | type RevInfo interface { | |
| 73 | + | ID() string | |
| 74 | + | Name() string | |
| 75 | + | } | |
| 76 | + | ||
| 73 | 77 | // revision data | |
| 74 | 78 | 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) | |
| 79 | 97 | } | |
| 80 | 98 | ||
| 81 | 99 | type TagData struct { |
| ... | ... | @@ -283,7 +301,7 @@ func readmeFile(repo *Config) string { | |
| 283 | 301 | return strings.ToLower(repo.Readme) | |
| 284 | 302 | } | |
| 285 | 303 | ||
| 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 { | |
| 287 | 305 | entries, err := tree.Entries() | |
| 288 | 306 | bail(err) | |
| 289 | 307 |
| ... | ... | @@ -292,7 +310,7 @@ func walkTree(tree *git.Tree, commitID string, curpath string, aggregate []*Tree | |
| 292 | 310 | typ := entry.Type() | |
| 293 | 311 | if typ == git.ObjectTree { | |
| 294 | 312 | re, _ := tree.Subtree(entry.Name()) | |
| 295 | - | aggregate = walkTree(re, commitID, fname, aggregate) | |
| 313 | + | aggregate = walkTree(re, revData, fname, aggregate) | |
| 296 | 314 | } | |
| 297 | 315 | ||
| 298 | 316 | if entry.Type() == git.ObjectBlob { |
| ... | ... | @@ -300,7 +318,7 @@ func walkTree(tree *git.Tree, commitID string, curpath string, aggregate []*Tree | |
| 300 | 318 | Size: toPretty(entry.Size()), | |
| 301 | 319 | Path: fname, | |
| 302 | 320 | Entry: entry, | |
| 303 | - | URL: template.URL(filepath.Join("/", "tree", commitID, "item", fname)), | |
| 321 | + | URL: template.URL(getFileURL(revData, fname)), | |
| 304 | 322 | }) | |
| 305 | 323 | } | |
| 306 | 324 | } |
| ... | ... | @@ -352,7 +370,7 @@ func (c *Config) writeRootSummary(data *PageData, readme template.HTML) { | |
| 352 | 370 | func (c *Config) writeTree(data *PageData, tree []*TreeItem) { | |
| 353 | 371 | c.writeHtml(&WriteData{ | |
| 354 | 372 | Filename: "index.html", | |
| 355 | - | Subdir: filepath.Join("tree", getShortID(data.RevData.ID)), | |
| 373 | + | Subdir: getTreeBaseDir(data.RevData), | |
| 356 | 374 | Template: "html/tree.page.tmpl", | |
| 357 | 375 | Data: &TreePageData{ | |
| 358 | 376 | PageData: data, |
| ... | ... | @@ -364,7 +382,7 @@ func (c *Config) writeTree(data *PageData, tree []*TreeItem) { | |
| 364 | 382 | func (c *Config) writeLog(data *PageData, logs []*CommitData) { | |
| 365 | 383 | c.writeHtml(&WriteData{ | |
| 366 | 384 | Filename: "index.html", | |
| 367 | - | Subdir: filepath.Join("logs", getShortID(data.RevData.ID)), | |
| 385 | + | Subdir: getLogBaseDir(data.RevData), | |
| 368 | 386 | Template: "html/log.page.tmpl", | |
| 369 | 387 | Data: &LogPageData{ | |
| 370 | 388 | PageData: data, |
| ... | ... | @@ -416,7 +434,7 @@ func (c *Config) writeHTMLTreeFiles(pageData *PageData, tree []*TreeItem) string | |
| 416 | 434 | Contents: template.HTML(contents), | |
| 417 | 435 | Path: file.Path, | |
| 418 | 436 | }, | |
| 419 | - | Subdir: filepath.Join("tree", getShortID(pageData.RevData.ID), "item", d), | |
| 437 | + | Subdir: getFileURL(pageData.RevData, d), | |
| 420 | 438 | }) | |
| 421 | 439 | } | |
| 422 | 440 | return readme |
| ... | ... | @@ -442,7 +460,7 @@ func (c *Config) writeLogDiffs(repo *git.Repository, pageData *PageData, logs [] | |
| 442 | 460 | pt := ancestors[0] | |
| 443 | 461 | parent = &CommitData{ | |
| 444 | 462 | Commit: pt, | |
| 445 | - | URL: c.getCommitURL(pt.ID.String()), | |
| 463 | + | URL: getCommitURL(pt.ID.String()), | |
| 446 | 464 | } | |
| 447 | 465 | } | |
| 448 | 466 | parentID := parent.ID.String() |
| ... | ... | @@ -492,8 +510,8 @@ func (c *Config) writeLogDiffs(repo *git.Repository, pageData *PageData, logs [] | |
| 492 | 510 | CommitID: getShortID(commitID), | |
| 493 | 511 | Diff: rnd, | |
| 494 | 512 | Parent: getShortID(parentID), | |
| 495 | - | CommitURL: c.getCommitURL(commitID), | |
| 496 | - | ParentURL: c.getCommitURL(parentID), | |
| 513 | + | CommitURL: getCommitURL(commitID), | |
| 514 | + | ParentURL: getCommitURL(parentID), | |
| 497 | 515 | } | |
| 498 | 516 | ||
| 499 | 517 | c.writeHtml(&WriteData{ |
| ... | ... | @@ -505,27 +523,47 @@ func (c *Config) writeLogDiffs(repo *git.Repository, pageData *PageData, logs [] | |
| 505 | 523 | } | |
| 506 | 524 | } | |
| 507 | 525 | ||
| 508 | - | func (c *Config) getSummaryURL() template.URL { | |
| 526 | + | func getSummaryURL() template.URL { | |
| 509 | 527 | url := "/index.html" | |
| 510 | 528 | return template.URL(url) | |
| 511 | 529 | } | |
| 512 | 530 | ||
| 513 | - | func (c *Config) getRefsURL() template.URL { | |
| 531 | + | func getRefsURL() template.URL { | |
| 514 | 532 | url := "/refs.html" | |
| 515 | 533 | return template.URL(url) | |
| 516 | 534 | } | |
| 517 | 535 | ||
| 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") | |
| 520 | 557 | return template.URL(url) | |
| 521 | 558 | } | |
| 522 | 559 | ||
| 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") | |
| 525 | 563 | return template.URL(url) | |
| 526 | 564 | } | |
| 527 | 565 | ||
| 528 | - | func (c *Config) getCommitURL(commitID string) template.URL { | |
| 566 | + | func getCommitURL(commitID string) template.URL { | |
| 529 | 567 | url := fmt.Sprintf("/commits/%s.html", commitID) | |
| 530 | 568 | return template.URL(url) | |
| 531 | 569 | } |
| ... | ... | @@ -534,8 +572,8 @@ func (c *Config) getURLs() *SiteURLs { | |
| 534 | 572 | return &SiteURLs{ | |
| 535 | 573 | HomeURL: c.HomeURL, | |
| 536 | 574 | CloneURL: c.CloneURL, | |
| 537 | - | RefsURL: c.getRefsURL(), | |
| 538 | - | SummaryURL: c.getSummaryURL(), | |
| 575 | + | RefsURL: getRefsURL(), | |
| 576 | + | SummaryURL: getSummaryURL(), | |
| 539 | 577 | } | |
| 540 | 578 | } | |
| 541 | 579 |
| ... | ... | @@ -567,11 +605,10 @@ func (c *Config) writeRepo() *BranchOutput { | |
| 567 | 605 | } | |
| 568 | 606 | ||
| 569 | 607 | data := &RevData{ | |
| 570 | - | ID: fullRevID, | |
| 571 | - | RevName: revName, | |
| 572 | - | TreeURL: c.getTreeURL(revID), | |
| 573 | - | LogURL: c.getLogsURL(revID), | |
| 608 | + | id: fullRevID, | |
| 609 | + | name: revName, | |
| 574 | 610 | } | |
| 611 | + | ||
| 575 | 612 | if first == nil { | |
| 576 | 613 | first = data | |
| 577 | 614 | } |
| ... | ... | @@ -586,10 +623,10 @@ func (c *Config) writeRepo() *BranchOutput { | |
| 586 | 623 | mainOutput := &BranchOutput{} | |
| 587 | 624 | claimed := false | |
| 588 | 625 | 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(), | |
| 593 | 630 | } | |
| 594 | 631 | } | |
| 595 | 632 |
| ... | ... | @@ -640,9 +677,8 @@ func (c *Config) writeRepo() *BranchOutput { | |
| 640 | 677 | // use the first revision in our list to generate | |
| 641 | 678 | // the root summary, logs, and tree the user can click | |
| 642 | 679 | 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(), | |
| 646 | 682 | } | |
| 647 | 683 | ||
| 648 | 684 | data := &PageData{ |
| ... | ... | @@ -659,7 +695,7 @@ func (c *Config) writeRevision(repo *git.Repository, pageData *PageData, refs [] | |
| 659 | 695 | c.Logger.Infof( | |
| 660 | 696 | "compiling (%s) revision (%s)", | |
| 661 | 697 | c.RepoName, | |
| 662 | - | pageData.RevData.RevName, | |
| 698 | + | pageData.RevData.Name(), | |
| 663 | 699 | ) | |
| 664 | 700 | ||
| 665 | 701 | output := &BranchOutput{} |
| ... | ... | @@ -668,7 +704,7 @@ func (c *Config) writeRevision(repo *git.Repository, pageData *PageData, refs [] | |
| 668 | 704 | pageSize = 5000 | |
| 669 | 705 | } | |
| 670 | 706 | ||
| 671 | - | commits, err := repo.CommitsByPage(pageData.RevData.ID, 0, pageSize) | |
| 707 | + | commits, err := repo.CommitsByPage(pageData.RevData.ID(), 0, pageSize) | |
| 672 | 708 | bail(err) | |
| 673 | 709 | ||
| 674 | 710 | logs := []*CommitData{} |
| ... | ... | @@ -685,21 +721,21 @@ func (c *Config) writeRevision(repo *git.Repository, pageData *PageData, refs [] | |
| 685 | 721 | } | |
| 686 | 722 | ||
| 687 | 723 | logs = append(logs, &CommitData{ | |
| 688 | - | URL: c.getCommitURL(commit.ID.String()), | |
| 724 | + | URL: getCommitURL(commit.ID.String()), | |
| 689 | 725 | ShortID: getShortID(commit.ID.String()), | |
| 690 | 726 | SummaryStr: commit.Summary(), | |
| 691 | 727 | AuthorStr: commit.Author.Name, | |
| 692 | - | WhenStr: commit.Author.When.Format(time.RFC822), | |
| 728 | + | WhenStr: commit.Author.When.Format("02 Jan 06"), | |
| 693 | 729 | Commit: commit, | |
| 694 | 730 | Refs: tags, | |
| 695 | 731 | }) | |
| 696 | 732 | } | |
| 697 | 733 | ||
| 698 | - | tree, err := repo.LsTree(pageData.RevData.ID) | |
| 734 | + | tree, err := repo.LsTree(pageData.RevData.ID()) | |
| 699 | 735 | bail(err) | |
| 700 | 736 | ||
| 701 | 737 | entries := []*TreeItem{} | |
| 702 | - | treeEntries := walkTree(tree, getShortID(pageData.RevData.ID), "", entries) | |
| 738 | + | treeEntries := walkTree(tree, pageData.RevData, "", entries) | |
| 703 | 739 | for _, entry := range treeEntries { | |
| 704 | 740 | entry.Path = strings.TrimPrefix(entry.Path, "/") | |
| 705 | 741 |
| ... | ... | @@ -708,7 +744,7 @@ func (c *Config) writeRevision(repo *git.Repository, pageData *PageData, refs [] | |
| 708 | 744 | if pageData.Repo.HideTreeLastCommit { | |
| 709 | 745 | c.Logger.Info("skipping finding last commit for each file") | |
| 710 | 746 | } else { | |
| 711 | - | lastCommits, err = repo.RevList([]string{pageData.RevData.ID}, git.RevListOptions{ | |
| 747 | + | lastCommits, err = repo.RevList([]string{pageData.RevData.ID()}, git.RevListOptions{ | |
| 712 | 748 | Path: entry.Path, | |
| 713 | 749 | CommandOptions: git.CommandOptions{Args: []string{"-1"}}, | |
| 714 | 750 | }) |
| ... | ... | @@ -718,14 +754,12 @@ func (c *Config) writeRevision(repo *git.Repository, pageData *PageData, refs [] | |
| 718 | 754 | if len(lastCommits) > 0 { | |
| 719 | 755 | lc = lastCommits[0] | |
| 720 | 756 | } | |
| 721 | - | entry.CommitURL = c.getCommitURL(lc.ID.String()) | |
| 757 | + | entry.CommitURL = getCommitURL(lc.ID.String()) | |
| 722 | 758 | entry.Summary = lc.Summary() | |
| 723 | - | entry.When = lc.Author.When.Format(time.RFC822) | |
| 759 | + | entry.When = lc.Author.When.Format("02 Jan 06") | |
| 724 | 760 | } | |
| 725 | - | fpath := filepath.Join( | |
| 726 | - | "/tree", | |
| 727 | - | getShortID(pageData.RevData.ID), | |
| 728 | - | "item", | |
| 761 | + | fpath := getFileURL( | |
| 762 | + | pageData.RevData, | |
| 729 | 763 | fmt.Sprintf("%s.html", entry.Path), | |
| 730 | 764 | ) | |
| 731 | 765 | entry.URL = template.URL(fpath) |
| ... | ... | @@ -734,7 +768,7 @@ func (c *Config) writeRevision(repo *git.Repository, pageData *PageData, refs [] | |
| 734 | 768 | c.Logger.Infof( | |
| 735 | 769 | "compilation complete (%s) branch (%s)", | |
| 736 | 770 | c.RepoName, | |
| 737 | - | pageData.RevData.RevName, | |
| 771 | + | pageData.RevData.Name(), | |
| 738 | 772 | ) | |
| 739 | 773 | ||
| 740 | 774 | c.writeLog(pageData, logs) |