Commit fe38cd8
Eric Bower
·
2023-08-06 12:00:45 -0400 EDT
parent c0b0fe0
progress
6 files changed,
+105,
-49
+1,
-0
| ... | ... | @@ -3,6 +3,7 @@ repos: | |
| 3 | 3 | - path: /home/erock/dev/pico/pico | |
| 4 | 4 | refs: | |
| 5 | 5 | - main | |
| 6 | + | - v1.0.0 | |
| 6 | 7 | desc: pico services - prose.sh, lists.sh, pastes.sh, imgs.sh, feeds.sh, pgs.sh | |
| 7 | 8 | - path: /home/erock/dev/pico/pico-ops | |
| 8 | 9 | refs: |
+3,
-2
| ... | ... | @@ -6,9 +6,10 @@ | |
| 6 | 6 | ||
| 7 | 7 | <div class="text-lg"> | |
| 8 | 8 | <a href="{{.Repo.SummaryURL}}">summary</a> | | |
| 9 | + | <a href="{{.Repo.RefsURL}}">refs</a> | | |
| 10 | + | <span class="font-bold">{{.Repo.RevName}}</span> | | |
| 9 | 11 | <a href="{{.Repo.TreeURL}}">tree</a> | | |
| 10 | - | <a href="{{.Repo.LogURL}}">log</a> | | |
| 11 | - | <a href="{{.Repo.RefsURL}}">refs</a> | |
| 12 | + | <a href="{{.Repo.LogURL}}">log</a> | |
| 12 | 13 | </div> | |
| 13 | 14 | ||
| 14 | 15 | <div class="my"> |
+12,
-3
| ... | ... | @@ -5,9 +5,18 @@ | |
| 5 | 5 | {{define "content"}} | |
| 6 | 6 | {{template "header" .}} | |
| 7 | 7 | ||
| 8 | + | <div> | |
| 8 | 9 | {{range .Data.Log}} | |
| 9 | - | <p> | |
| 10 | - | {{.Author.When}} <a href="{{.URL}}">{{.Summary}}</a> {{.Author.Name}} | |
| 11 | - | </p> | |
| 10 | + | <div class="box"> | |
| 11 | + | <div> | |
| 12 | + | <a href="{{.URL}}">{{.SummaryStr}}</a> | |
| 13 | + | </div> | |
| 14 | + | <div> | |
| 15 | + | <span>{{.AuthorStr}}</span> | |
| 16 | + | <span> committed </span> | |
| 17 | + | <span>{{.WhenStr}}</span> | |
| 18 | + | </div> | |
| 19 | + | </div> | |
| 12 | 20 | {{end}} | |
| 21 | + | </div> | |
| 13 | 22 | {{end}} |
+8,
-11
| ... | ... | @@ -5,17 +5,14 @@ | |
| 5 | 5 | {{define "content"}} | |
| 6 | 6 | {{template "header" .}} | |
| 7 | 7 | ||
| 8 | - | <h2 class="text-md">branches</h2> | |
| 9 | - | <ol> | |
| 10 | - | {{range .Data.Branches}} | |
| 11 | - | <li>{{.Refspec}}</li> | |
| 12 | - | {{end}} | |
| 13 | - | </ol> | |
| 14 | - | ||
| 15 | - | <h2 class="text-md">tags</h2> | |
| 16 | - | <ol> | |
| 17 | - | {{range .Data.Tags}} | |
| 18 | - | <li>{{.Refspec}}</li> | |
| 8 | + | <h2 class="text-md font-bold">refs</h2> | |
| 9 | + | <ul> | |
| 10 | + | {{range .Data.Refs}} | |
| 11 | + | {{if .URL}} | |
| 12 | + | <li><a href="{{.URL}}">{{.Refspec}}</a></li> | |
| 13 | + | {{else}} | |
| 14 | + | <li>{{.Refspec}}</li> | |
| 15 | + | {{end}} | |
| 19 | 16 | {{end}} | |
| 20 | 17 | </ol> | |
| 21 | 18 | {{end}} |
+17,
-19
| ... | ... | @@ -5,24 +5,22 @@ | |
| 5 | 5 | {{define "content"}} | |
| 6 | 6 | {{template "header" .}} | |
| 7 | 7 | ||
| 8 | - | <table> | |
| 9 | - | <tbody> | |
| 10 | - | {{range .Data.Tree}} | |
| 11 | - | <tr> | |
| 12 | - | <td> | |
| 13 | - | <a href="{{.URL}}">{{.Path}}</a> | |
| 14 | - | </td> | |
| 15 | - | <td> | |
| 16 | - | <a href="{{.CommitURL}}">{{.Desc}}</a> | |
| 17 | - | </td> | |
| 18 | - | <td> | |
| 19 | - | {{.When}} | |
| 20 | - | </td> | |
| 21 | - | <td class="mono font-bold"> | |
| 8 | + | <div> | |
| 9 | + | {{range .Data.Tree}} | |
| 10 | + | <div class="flex justify-between"> | |
| 11 | + | <div class="flex-1"> | |
| 12 | + | <a href="{{.URL}}">{{.Path}}</a> | |
| 13 | + | </div> | |
| 14 | + | ||
| 15 | + | <div class="flex"> | |
| 16 | + | <div> | |
| 17 | + | <a href="{{.CommitURL}}">{{.When}}</a> | |
| 18 | + | </div> | |
| 19 | + | <div class="mono font-bold"> | |
| 22 | 20 | L{{.NumLines}} | |
| 23 | - | </td> | |
| 24 | - | </tr> | |
| 25 | - | {{end}} | |
| 26 | - | </tbody> | |
| 27 | - | </table> | |
| 21 | + | </div> | |
| 22 | + | </div> | |
| 23 | + | </div> | |
| 24 | + | {{end}} | |
| 25 | + | </div> | |
| 28 | 26 | {{end}} |
M
main.go
+64,
-14
| ... | ... | @@ -38,10 +38,14 @@ type RepoData struct { | |
| 38 | 38 | RefsURL string | |
| 39 | 39 | CloneURL string | |
| 40 | 40 | MaxCommits int | |
| 41 | + | RevName string | |
| 41 | 42 | } | |
| 42 | 43 | ||
| 43 | 44 | type CommitData struct { | |
| 45 | + | SummaryStr string | |
| 44 | 46 | URL string | |
| 47 | + | WhenStr string | |
| 48 | + | AuthorStr string | |
| 45 | 49 | *git.Commit | |
| 46 | 50 | } | |
| 47 | 51 |
| ... | ... | @@ -58,12 +62,11 @@ type TreeItem struct { | |
| 58 | 62 | type PageData struct { | |
| 59 | 63 | Repo *RepoData | |
| 60 | 64 | Log []*CommitData | |
| 61 | - | Branches []*git.Reference | |
| 62 | - | Tags []*git.Reference | |
| 63 | 65 | Tree []*TreeItem | |
| 64 | 66 | Readme template.HTML | |
| 65 | 67 | Rev *git.Reference | |
| 66 | 68 | RevName string | |
| 69 | + | Refs []*RefInfo | |
| 67 | 70 | } | |
| 68 | 71 | ||
| 69 | 72 | type CommitPageData struct { |
| ... | ... | @@ -378,16 +381,21 @@ func (c *Config) writeLogDiffs(repo *git.Repository, pageData *PageData) { | |
| 378 | 381 | } | |
| 379 | 382 | } | |
| 380 | 383 | ||
| 384 | + | type RefInfo struct { | |
| 385 | + | Refspec string | |
| 386 | + | URL template.URL | |
| 387 | + | } | |
| 388 | + | ||
| 381 | 389 | func (c *Config) writeRepo(config *RepoConfig) *BranchOutput { | |
| 382 | 390 | repo, err := git.Open(config.Path) | |
| 383 | 391 | bail(err) | |
| 384 | 392 | ||
| 385 | 393 | name := repoName(config.Path) | |
| 386 | 394 | ||
| 387 | - | heads, err := repo.ShowRef(git.ShowRefOptions{Heads: true, Tags: false}) | |
| 395 | + | refs, err := repo.ShowRef(git.ShowRefOptions{Heads: true, Tags: true}) | |
| 388 | 396 | bail(err) | |
| 389 | 397 | ||
| 390 | - | rev := findDefaultBranch(config, heads) | |
| 398 | + | rev := findDefaultBranch(config, refs) | |
| 391 | 399 | if rev == nil { | |
| 392 | 400 | bail(fmt.Errorf("no default branch found")) | |
| 393 | 401 | } |
| ... | ... | @@ -402,24 +410,39 @@ func (c *Config) writeRepo(config *RepoConfig) *BranchOutput { | |
| 402 | 410 | LogURL: fmt.Sprintf("/%s/logs/%s/index.html", name, revName), | |
| 403 | 411 | RefsURL: fmt.Sprintf("/%s/refs.html", name), | |
| 404 | 412 | CloneURL: fmt.Sprintf("https://%s/%s.git", c.URL, name), | |
| 413 | + | RevName: revName, | |
| 405 | 414 | } | |
| 406 | 415 | ||
| 407 | - | tags, _ := repo.ShowRef(git.ShowRefOptions{Heads: false, Tags: true}) | |
| 408 | - | ||
| 416 | + | refInfoMap := map[string]*RefInfo{} | |
| 409 | 417 | var mainOutput *BranchOutput | |
| 410 | 418 | claimed := false | |
| 411 | 419 | for _, revn := range config.Refs { | |
| 412 | - | for _, head := range heads { | |
| 420 | + | for _, head := range refs { | |
| 413 | 421 | _, headName := filepath.Split(head.Refspec) | |
| 414 | 422 | if revn != headName { | |
| 415 | 423 | continue | |
| 416 | 424 | } | |
| 425 | + | refInfoMap[head.ID] = &RefInfo{ | |
| 426 | + | Refspec: strings.TrimPrefix(head.Refspec, "refs/"), | |
| 427 | + | URL: template.URL(fmt.Sprintf("/%s/tree/%s/index.html", name, revn)), | |
| 428 | + | } | |
| 429 | + | ||
| 430 | + | branchRepo := &RepoData{ | |
| 431 | + | Name: name, | |
| 432 | + | Desc: config.Desc, | |
| 433 | + | MaxCommits: config.MaxCommits, | |
| 434 | + | SummaryURL: fmt.Sprintf("/%s/index.html", name), | |
| 435 | + | TreeURL: fmt.Sprintf("/%s/tree/%s/index.html", name, revn), | |
| 436 | + | LogURL: fmt.Sprintf("/%s/logs/%s/index.html", name, revn), | |
| 437 | + | RefsURL: fmt.Sprintf("/%s/refs.html", name), | |
| 438 | + | CloneURL: fmt.Sprintf("https://%s/%s.git", c.URL, name), | |
| 439 | + | RevName: revn, | |
| 440 | + | } | |
| 441 | + | ||
| 417 | 442 | data := &PageData{ | |
| 418 | - | Branches: heads, | |
| 419 | - | Tags: tags, | |
| 420 | - | Rev: head, | |
| 421 | - | RevName: headName, | |
| 422 | - | Repo: repoData, | |
| 443 | + | Rev: head, | |
| 444 | + | RevName: headName, | |
| 445 | + | Repo: branchRepo, | |
| 423 | 446 | } | |
| 424 | 447 | ||
| 425 | 448 | branchOutput := c.writeBranch(repo, data) |
| ... | ... | @@ -430,13 +453,37 @@ func (c *Config) writeRepo(config *RepoConfig) *BranchOutput { | |
| 430 | 453 | } | |
| 431 | 454 | } | |
| 432 | 455 | ||
| 456 | + | for _, ref := range refs { | |
| 457 | + | if refInfoMap[ref.ID] != nil { | |
| 458 | + | continue | |
| 459 | + | } | |
| 460 | + | ||
| 461 | + | refInfoMap[ref.ID] = &RefInfo{ | |
| 462 | + | Refspec: strings.TrimPrefix(ref.Refspec, "refs/"), | |
| 463 | + | } | |
| 464 | + | } | |
| 465 | + | ||
| 466 | + | refInfoList := []*RefInfo{} | |
| 467 | + | for _, val := range refInfoMap { | |
| 468 | + | refInfoList = append(refInfoList, val) | |
| 469 | + | } | |
| 470 | + | sort.Slice(refInfoList, func(i, j int) bool { | |
| 471 | + | urlI := refInfoList[i].URL | |
| 472 | + | urlJ := refInfoList[j].URL | |
| 473 | + | refI := refInfoList[i].Refspec | |
| 474 | + | refJ := refInfoList[j].Refspec | |
| 475 | + | if urlI == urlJ { | |
| 476 | + | return refI < refJ | |
| 477 | + | } | |
| 478 | + | return urlI > urlJ | |
| 479 | + | }) | |
| 480 | + | ||
| 433 | 481 | data := &PageData{ | |
| 434 | - | Branches: heads, | |
| 435 | - | Tags: tags, | |
| 436 | 482 | Rev: rev, | |
| 437 | 483 | RevName: revName, | |
| 438 | 484 | Repo: repoData, | |
| 439 | 485 | Readme: template.HTML(mainOutput.Readme), | |
| 486 | + | Refs: refInfoList, | |
| 440 | 487 | } | |
| 441 | 488 | writeRefs(data) | |
| 442 | 489 | writeRootSummary(data) |
| ... | ... | @@ -466,6 +513,9 @@ func (c *Config) writeBranch(repo *git.Repository, pageData *PageData) *BranchOu | |
| 466 | 513 | ||
| 467 | 514 | logs = append(logs, &CommitData{ | |
| 468 | 515 | URL: commitURL(pageData.Repo.Name, commit.ID.String()), | |
| 516 | + | SummaryStr: commit.Summary(), | |
| 517 | + | AuthorStr: commit.Author.Name, | |
| 518 | + | WhenStr: timediff.TimeDiff(commit.Author.When), | |
| 469 | 519 | Commit: commit, | |
| 470 | 520 | }) | |
| 471 | 521 | } |