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()