Removing grouping and sorting by last commit instead. - staticgit - A git static site generator, the site you are viewing now!
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
---
(DIR) commit 2c17ce4ce5c99e093bcc742c8815e7ad64e3b233
(DIR) parent 9d8853a409012768220b56db8959cdc7f73abff9
(HTM) Author: Jay Scott <me@jay.scot>
Date: Sun, 14 Jul 2024 11:54:21 +0100
Removing grouping and sorting by last commit instead.
Diffstat:
M Makefile | 2 +-
M main.go | 77 +++++++++----------------------
2 files changed, 22 insertions(+), 57 deletions(-)
---
(DIR) diff --git a/Makefile b/Makefile
@@ -8,7 +8,7 @@ all: run
run:
@echo "Running $(APP_NAME)..."
- @go run . -g -p ./git -o tmp -i .ssh,jay.scot,internal-docs
+ @go run . -p ./git -o tmp -i .ssh,jay.scot,internal-docs
build:
@echo "Building $(APP_NAME) for local architecture..."
(DIR) diff --git a/main.go b/main.go
@@ -7,10 +7,10 @@ import (
"log"
"os"
"path/filepath"
- "regexp"
"sort"
"strings"
"sync"
+ "time"
"github.com/go-git/go-git/v5"
"github.com/go-git/go-git/v5/plumbing/object"
@@ -26,14 +26,13 @@ type CommitInfo struct {
}
type RepoInfo struct {
- Name string
- Description string
- LastCommit string
+ Name string
+ Description string
+ LastCommitTime time.Time
}
const (
-
- base = `
+ base = `
<!DOCTYPE html>
<html lang="en">
<head>
@@ -73,7 +72,7 @@ const (
</html>
`
- details = `
+ details = `
{{define "content"}}
<pre>{{.ReadmeContent}}</pre>
@@ -112,7 +111,7 @@ const (
{{end}}
`
- index = `
+ index = `
{{define "content"}}
<table>
<thead>
@@ -123,15 +122,13 @@ const (
</tr>
</thead>
<tbody>
- {{range $group, $repos := .Repos}}
- {{range $repos}}
+ {{range .Repos}}
<tr>
<td><a href="{{.Name}}/index.html">{{.Name}}</a></td>
<td>{{.Description}}</td>
- <td>{{.LastCommit}}</td>
+ <td>{{.LastCommitTime.Format "2006-01-02 15:04:05"}}</td>
</tr>
{{end}}
- {{end}}
</tbody>
</table>
{{end}}
@@ -145,14 +142,16 @@ var (
}
reposPath string
- groupFlag bool
ignoreDirs map[string]bool
outputRoot string
commitLimit int
)
func generateIndex(repoInfos []RepoInfo) error {
- groupedRepos := groupRepos(repoInfos)
+ sort.Slice(repoInfos, func(i, j int) bool {
+ return repoInfos[i].LastCommitTime.After(repoInfos[j].LastCommitTime)
+ })
+
indexOutputPath := filepath.Join(outputRoot, "index.html")
indexFile, err := os.Create(indexOutputPath)
@@ -162,13 +161,11 @@ func generateIndex(repoInfos []RepoInfo) error {
defer indexFile.Close()
return templates["index"].Execute(indexFile, struct {
- Title string
- IconPath string
- Repos map[string][]RepoInfo
+ Title string
+ Repos []RepoInfo
}{
- Title: "Repos for days!",
- IconPath: "./",
- Repos: groupedRepos,
+ Title: "Repos for days!",
+ Repos: repoInfos,
})
}
@@ -203,15 +200,11 @@ func generateRepo(repoName, repoPath, outputDir string) error {
return templates["details"].Execute(f, struct {
Title string
- IconPath string
- RepoName string
ReadmeContent string
Files []string
Commits []CommitInfo
}{
Title: "git clone git@git.jay.scot:" + repoName,
- IconPath: "../",
- RepoName: repoName,
ReadmeContent: readme,
Files: files,
Commits: commits,
@@ -360,39 +353,12 @@ func getRepo(repoPath string) (RepoInfo, error) {
description := getDescription(repoPath)
return RepoInfo{
- Name: filepath.Base(repoPath),
- Description: description,
- LastCommit: commit.Committer.When.Format("02 Jan 2006"),
+ Name: filepath.Base(repoPath),
+ Description: description,
+ LastCommitTime: commit.Committer.When,
}, nil
}
-func groupRepos(repos []RepoInfo) map[string][]RepoInfo {
- groupedRepos := make(map[string][]RepoInfo)
- for _, repo := range repos {
- group := getGroup(repo.Description)
- groupedRepos[group] = append(groupedRepos[group], repo)
- }
-
- for _, repoList := range groupedRepos {
- sort.Slice(repoList, func(i, j int) bool {
- return strings.ToLower(repoList[i].Name) < strings.ToLower(repoList[j].Name)
- })
- }
-
- return groupedRepos
-}
-
-func getGroup(description string) string {
- if groupFlag {
- groupRegex := regexp.MustCompile(`\[(.*?)\]`)
- matches := groupRegex.FindStringSubmatch(description)
- if len(matches) > 1 {
- return matches[1]
- }
- }
- return ""
-}
-
func parseIgnored(ignoreDirs string) map[string]bool {
ignoreMap := make(map[string]bool)
for _, dir := range strings.Split(ignoreDirs, ",") {
@@ -460,7 +426,6 @@ func processRepos() error {
func main() {
flag.StringVar(&reposPath, "p", "", "Path to the git repositories (required)")
flag.StringVar(&outputRoot, "o", ".", "Root path where output directories will be created")
- flag.BoolVar(&groupFlag, "g", false, "Group repositories based on description tags")
flag.IntVar(&commitLimit, "c", 100, "Limit for the number of commits to display (default 100)")
ignoreFlag := flag.String("i", "", "Directories to ignore (comma-separated)")
@@ -469,7 +434,7 @@ func main() {
fmt.Fprintf(os.Stderr, "Options:\n")
flag.PrintDefaults()
fmt.Fprintf(os.Stderr, "\nExample:\n")
- fmt.Fprintf(os.Stderr, " %s -p /path/to/repos -g -i dir1,dir2 -o /path/to/output -c50\n", os.Args[0])
+ fmt.Fprintf(os.Stderr, " %s -p /path/to/repos -i dir1,dir2 -o /path/to/output -c50\n", os.Args[0])
}
flag.Parse()