Commit e51bb05
Eric Bower
·
2023-08-05 14:53:20 -0400 EDT
parent d19c0db
content edits
8 files changed,
+71,
-48
+2,
-0
| ... | ... | @@ -3,6 +3,8 @@ repos: | |
| 3 | 3 | - path: /home/erock/dev/pico/pico | |
| 4 | 4 | refs: | |
| 5 | 5 | - main | |
| 6 | + | desc: pico services - prose.sh, lists.sh, pastes.sh, imgs.sh, feeds.sh, pgs.sh | |
| 6 | 7 | - path: /home/erock/dev/pico/pico-ops | |
| 7 | 8 | refs: | |
| 8 | 9 | - main | |
| 10 | + | desc: infra for pico services |
+1,
-3
| ... | ... | @@ -13,8 +13,6 @@ | |
| 13 | 13 | <link rel="stylesheet" href="/main.css" /> | |
| 14 | 14 | <link rel="stylesheet" href="/syntax.css" /> | |
| 15 | 15 | </head> | |
| 16 | - | <body> | |
| 17 | - | {{template "content" .}} | |
| 18 | - | </body> | |
| 16 | + | <body>{{template "content" .}}</body> | |
| 19 | 17 | </html> | |
| 20 | 18 | {{end}} |
+1,
-1
| ... | ... | @@ -22,7 +22,7 @@ | |
| 22 | 22 | ||
| 23 | 23 | <div class="box mono"> | |
| 24 | 24 | <div> | |
| 25 | - | <strong>{{.Data.Diff.NumFiles}}</strong> files changed,&nbps; | |
| 25 | + | <strong>{{.Data.Diff.NumFiles}}</strong> files changed, | |
| 26 | 26 | <span class="color-green">+{{.Data.Diff.TotalAdditions}}</span>, | |
| 27 | 27 | <span class="color-red">-{{.Data.Diff.TotalDeletions}}</span> | |
| 28 | 28 | </div> |
+10,
-7
| ... | ... | @@ -1,17 +1,20 @@ | |
| 1 | 1 | {{define "header"}} | |
| 2 | - | <h1> | |
| 2 | + | <h1 class="text-xl"> | |
| 3 | 3 | <a href="/">repos</a> | |
| 4 | 4 | <span> / {{.RepoName}}</span> | |
| 5 | 5 | </h1> | |
| 6 | 6 | ||
| 7 | - | <div> | |
| 8 | - | <a href="{{.Repo.SummaryURL}}">summary</a> | | |
| 9 | - | <a href="{{.Repo.TreeURL}}">tree</a> | | |
| 10 | - | <a href="{{.Repo.LogURL}}">log</a> | | |
| 11 | - | <a href="{{.Repo.RefsURL}}">refs</a> | |
| 7 | + | <div class="text-lg"> | |
| 8 | + | <a href="{{.Repo.SummaryURL}}">summary</a> | | |
| 9 | + | <a href="{{.Repo.TreeURL}}">tree</a> | | |
| 10 | + | <a href="{{.Repo.LogURL}}">log</a> | | |
| 11 | + | <a href="{{.Repo.RefsURL}}">refs</a> | |
| 12 | 12 | </div> | |
| 13 | 13 | ||
| 14 | - | <p>git clone {{.Repo.CloneURL}}</p> | |
| 14 | + | <div class="my"> | |
| 15 | + | <div class="text-lg">{{.Repo.Desc}}</div> | |
| 16 | + | <pre style="margin: 0;">git clone {{.Repo.CloneURL}}</pre> | |
| 17 | + | </div> | |
| 15 | 18 | ||
| 16 | 19 | <hr /> | |
| 17 | 20 | {{end}} |
+2,
-1
| ... | ... | @@ -4,5 +4,6 @@ | |
| 4 | 4 | ||
| 5 | 5 | {{define "content"}} | |
| 6 | 6 | {{template "header" .}} | |
| 7 | - | <p>{{.Data.Readme}}</p> | |
| 7 | + | ||
| 8 | + | {{.Data.Readme}} | |
| 8 | 9 | {{end}} |
+9,
-3
| ... | ... | @@ -5,10 +5,16 @@ | |
| 5 | 5 | {{define "content"}} | |
| 6 | 6 | {{template "header" .}} | |
| 7 | 7 | ||
| 8 | + | <div> | |
| 8 | 9 | {{range .Data.Tree}} | |
| 9 | - | <div> | |
| 10 | - | <a href="{{.URL}}">{{.Path}}</a> | |
| 11 | - | <span> (lines: {{.NumLines}})</span> | |
| 10 | + | <div class="flex justify-between mt"> | |
| 11 | + | <div class="text-md"> | |
| 12 | + | <a href="{{.URL}}">{{.Path}}</a> | |
| 13 | + | </div> | |
| 14 | + | <div class="mono"> | |
| 15 | + | <span>lines: {{.NumLines}}</span> | |
| 16 | + | </div> | |
| 12 | 17 | </div> | |
| 13 | 18 | {{end}} | |
| 19 | + | </div> | |
| 14 | 20 | {{end}} |
M
main.go
+37,
-32
| ... | ... | @@ -26,6 +26,7 @@ type IndexPage struct { | |
| 26 | 26 | ||
| 27 | 27 | type RepoData struct { | |
| 28 | 28 | Name string | |
| 29 | + | Desc string | |
| 29 | 30 | SummaryURL string | |
| 30 | 31 | TreeURL string | |
| 31 | 32 | LogURL string |
| ... | ... | @@ -51,7 +52,7 @@ type PageData struct { | |
| 51 | 52 | Branches []*git.Reference | |
| 52 | 53 | Tags []*git.Reference | |
| 53 | 54 | Tree []*TreeItem | |
| 54 | - | Readme string | |
| 55 | + | Readme template.HTML | |
| 55 | 56 | Rev *git.Reference | |
| 56 | 57 | RevName string | |
| 57 | 58 | } |
| ... | ... | @@ -219,16 +220,7 @@ func writeRootSummary(data *PageData) { | |
| 219 | 220 | Repo: data.Repo, | |
| 220 | 221 | }) | |
| 221 | 222 | } | |
| 222 | - | func writeSummary(data *PageData) { | |
| 223 | - | writeHtml(&WriteData{ | |
| 224 | - | Name: "index.html", | |
| 225 | - | Subdir: filepath.Join("tree", data.RevName), | |
| 226 | - | Template: "./html/summary.page.tmpl", | |
| 227 | - | Data: data, | |
| 228 | - | RepoName: data.Repo.Name, | |
| 229 | - | Repo: data.Repo, | |
| 230 | - | }) | |
| 231 | - | } | |
| 223 | + | ||
| 232 | 224 | func writeTree(data *PageData) { | |
| 233 | 225 | writeHtml(&WriteData{ | |
| 234 | 226 | Name: "index.html", |
| ... | ... | @@ -263,7 +255,8 @@ type FileData struct { | |
| 263 | 255 | Contents template.HTML | |
| 264 | 256 | } | |
| 265 | 257 | ||
| 266 | - | func writeHTMLTreeFiles(data *PageData) { | |
| 258 | + | func writeHTMLTreeFiles(data *PageData) string { | |
| 259 | + | readme := "" | |
| 267 | 260 | for _, file := range data.Tree { | |
| 268 | 261 | b, err := file.Entry.Blob().Bytes() | |
| 269 | 262 | bail(err) |
| ... | ... | @@ -271,9 +264,13 @@ func writeHTMLTreeFiles(data *PageData) { | |
| 271 | 264 | ||
| 272 | 265 | d := filepath.Dir(file.Path) | |
| 273 | 266 | contents, err := pastes.ParseText(file.Entry.Name(), string(b)) | |
| 274 | - | if err != nil { | |
| 275 | - | panic(err) | |
| 267 | + | bail(err) | |
| 268 | + | ||
| 269 | + | nameLower := strings.ToLower(file.Entry.Name()) | |
| 270 | + | if nameLower == "readme.md" { | |
| 271 | + | readme = contents | |
| 276 | 272 | } | |
| 273 | + | ||
| 277 | 274 | writeHtml(&WriteData{ | |
| 278 | 275 | Name: fmt.Sprintf("%s.html", file.Entry.Name()), | |
| 279 | 276 | Template: "./html/file.page.tmpl", |
| ... | ... | @@ -283,6 +280,7 @@ func writeHTMLTreeFiles(data *PageData) { | |
| 283 | 280 | Repo: data.Repo, | |
| 284 | 281 | }) | |
| 285 | 282 | } | |
| 283 | + | return readme | |
| 286 | 284 | } | |
| 287 | 285 | ||
| 288 | 286 | func writeLogDiffs(project string, repo *git.Repository, data *PageData, cache map[string]bool) { |
| ... | ... | @@ -340,9 +338,8 @@ func writeLogDiffs(project string, repo *git.Repository, data *PageData, cache m | |
| 340 | 338 | } | |
| 341 | 339 | } | |
| 342 | 340 | finContent, err := pastes.ParseText("commit.diff", content) | |
| 343 | - | if err != nil { | |
| 344 | - | panic(err) | |
| 345 | - | } | |
| 341 | + | bail(err) | |
| 342 | + | ||
| 346 | 343 | fl.Content = template.HTML(finContent) | |
| 347 | 344 | fls = append(fls, fl) | |
| 348 | 345 | } |
| ... | ... | @@ -373,6 +370,7 @@ func writeRepo(config *RepoConfig) { | |
| 373 | 370 | bail(err) | |
| 374 | 371 | ||
| 375 | 372 | name := repoName(config.Path) | |
| 373 | + | desc := config.Desc | |
| 376 | 374 | ||
| 377 | 375 | heads, err := repo.ShowRef(git.ShowRefOptions{Heads: true, Tags: false}) | |
| 378 | 376 | bail(err) |
| ... | ... | @@ -385,6 +383,7 @@ func writeRepo(config *RepoConfig) { | |
| 385 | 383 | ||
| 386 | 384 | repoData := &RepoData{ | |
| 387 | 385 | Name: name, | |
| 386 | + | Desc: desc, | |
| 388 | 387 | SummaryURL: fmt.Sprintf("/%s/index.html", name), | |
| 389 | 388 | TreeURL: fmt.Sprintf("/%s/tree/%s/index.html", name, revName), | |
| 390 | 389 | LogURL: fmt.Sprintf("/%s/logs/%s/index.html", name, revName), |
| ... | ... | @@ -396,17 +395,7 @@ func writeRepo(config *RepoConfig) { | |
| 396 | 395 | ||
| 397 | 396 | cache := make(map[string]bool) | |
| 398 | 397 | ||
| 399 | - | data := &PageData{ | |
| 400 | - | Branches: heads, | |
| 401 | - | Tags: tags, | |
| 402 | - | Rev: rev, | |
| 403 | - | RevName: revName, | |
| 404 | - | Repo: repoData, | |
| 405 | - | Readme: "", | |
| 406 | - | } | |
| 407 | - | writeRootSummary(data) | |
| 408 | - | writeRefs(data) | |
| 409 | - | ||
| 398 | + | readme := "" | |
| 410 | 399 | for _, revn := range config.Refs { | |
| 411 | 400 | for _, head := range heads { | |
| 412 | 401 | _, headName := filepath.Split(head.Refspec) |
| ... | ... | @@ -419,15 +408,28 @@ func writeRepo(config *RepoConfig) { | |
| 419 | 408 | Rev: head, | |
| 420 | 409 | RevName: headName, | |
| 421 | 410 | Repo: repoData, | |
| 422 | - | Readme: "", | |
| 423 | 411 | } | |
| 424 | 412 | ||
| 425 | - | writeBranch(repo, data, cache) | |
| 413 | + | branchReadme := writeBranch(repo, data, cache) | |
| 414 | + | if readme == "" { | |
| 415 | + | readme = branchReadme | |
| 416 | + | } | |
| 426 | 417 | } | |
| 427 | 418 | } | |
| 419 | + | ||
| 420 | + | data := &PageData{ | |
| 421 | + | Branches: heads, | |
| 422 | + | Tags: tags, | |
| 423 | + | Rev: rev, | |
| 424 | + | RevName: revName, | |
| 425 | + | Repo: repoData, | |
| 426 | + | Readme: template.HTML(readme), | |
| 427 | + | } | |
| 428 | + | writeRefs(data) | |
| 429 | + | writeRootSummary(data) | |
| 428 | 430 | } | |
| 429 | 431 | ||
| 430 | - | func writeBranch(repo *git.Repository, pageData *PageData, cache map[string]bool) { | |
| 432 | + | func writeBranch(repo *git.Repository, pageData *PageData, cache map[string]bool) string { | |
| 431 | 433 | commits, err := repo.CommitsByPage(pageData.Rev.ID, 0, 100) | |
| 432 | 434 | bail(err) | |
| 433 | 435 |
| ... | ... | @@ -459,7 +461,7 @@ func writeBranch(repo *git.Repository, pageData *PageData, cache map[string]bool | |
| 459 | 461 | pageData.Tree = treeEntries | |
| 460 | 462 | ||
| 461 | 463 | writeLog(pageData) | |
| 462 | - | writeHTMLTreeFiles(pageData) | |
| 464 | + | readme := writeHTMLTreeFiles(pageData) | |
| 463 | 465 | writeLogDiffs(pageData.Repo.Name, repo, pageData, cache) | |
| 464 | 466 | ||
| 465 | 467 | for _, def := range defaultBranches { |
| ... | ... | @@ -467,11 +469,14 @@ func writeBranch(repo *git.Repository, pageData *PageData, cache map[string]bool | |
| 467 | 469 | writeTree(pageData) | |
| 468 | 470 | } | |
| 469 | 471 | } | |
| 472 | + | ||
| 473 | + | return readme | |
| 470 | 474 | } | |
| 471 | 475 | ||
| 472 | 476 | type RepoConfig struct { | |
| 473 | 477 | Path string `mapstructure:"path"` | |
| 474 | 478 | Refs []string `mapstructure:"refs"` | |
| 479 | + | Desc string `mapstructure:"desc"` | |
| 475 | 480 | } | |
| 476 | 481 | type Config struct { | |
| 477 | 482 | Repos []*RepoConfig `mapstructure:"repos"` |
+9,
-1
| ... | ... | @@ -67,7 +67,7 @@ html { | |
| 67 | 67 | ||
| 68 | 68 | body { | |
| 69 | 69 | margin: 0 auto; | |
| 70 | - | max-width: 720px; | |
| 70 | + | max-width: 900px; | |
| 71 | 71 | } | |
| 72 | 72 | ||
| 73 | 73 | img { |
| ... | ... | @@ -115,6 +115,14 @@ pre { | |
| 115 | 115 | background-color: var(--pre) !important; | |
| 116 | 116 | } | |
| 117 | 117 | ||
| 118 | + | .my { | |
| 119 | + | margin: 1rem 0; | |
| 120 | + | } | |
| 121 | + | ||
| 122 | + | .mt { | |
| 123 | + | margin-top: 1rem; | |
| 124 | + | } | |
| 125 | + | ||
| 118 | 126 | .mono { | |
| 119 | 127 | font-family: ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", Menlo, | |
| 120 | 128 | monospace; |