name:
files.go
-rw-r--r--
1332
1package main
2
3import (
4 "fmt"
5 "html/template"
6 "io/fs"
7 "os"
8 "path"
9 "path/filepath"
10 "strings"
11)
12
13type FileOverview struct {
14 Mode string
15 Name string
16 Size string
17 Origin string
18}
19
20type FilesPage struct {
21 RepoData repoData
22 Files []FileOverview
23}
24
25func (f *FilesPage) renderPage(t *template.Template) {
26 debug("file page for '%v'", f.RepoData.Name)
27 output, err := os.Create(path.Join(args.OutputDir, f.RepoData.Name, "files.html"))
28 checkErr(err)
29 err = t.Execute(output, f)
30 checkErr(err)
31}
32
33func renderAllFilesPage(data repoData) {
34 t, err := template.ParseFS(htmlTemplates, "template.files.html", "template.partials.html")
35 checkErr(err)
36 files := make([]FileOverview, 0)
37 err = filepath.Walk(data.cloneDir(), func(filename string, info fs.FileInfo, err error) error {
38 if info.IsDir() && info.Name() == ".git" {
39 return filepath.SkipDir
40 }
41
42 if !info.IsDir() {
43 info, err := os.Stat(filename)
44 checkErr(err)
45 Name, _ := strings.CutPrefix(filename, data.cloneDir())
46 Name, _ = strings.CutPrefix(Name, "/")
47 tf := FileOverview{
48 Origin: filename,
49 Name: Name,
50 Mode: info.Mode().String(),
51 Size: fmt.Sprintf("%v", info.Size()),
52 }
53 files = append(files, tf)
54 }
55 return nil
56 })
57 checkErr(err)
58 index := FilesPage{
59 RepoData: data,
60 Files: files,
61 }
62 index.renderPage(t)
63}