routes: refs view
This commit is contained in:
parent
01f27147ba
commit
7a6ff3565e
4 changed files with 104 additions and 0 deletions
32
git/git.go
32
git/git.go
|
@ -78,3 +78,35 @@ func (g *GitRepo) FileContent(path string) (string, error) {
|
||||||
|
|
||||||
return file.Contents()
|
return file.Contents()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (g *GitRepo) Tags() ([]*object.Tag, error) {
|
||||||
|
ti, err := g.r.TagObjects()
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("tag objects: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
tags := []*object.Tag{}
|
||||||
|
|
||||||
|
_ = ti.ForEach(func(t *object.Tag) error {
|
||||||
|
tags = append(tags, t)
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
return tags, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *GitRepo) Branches() ([]*plumbing.Reference, error) {
|
||||||
|
bi, err := g.r.Branches()
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("branchs: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
branches := []*plumbing.Reference{}
|
||||||
|
|
||||||
|
_ = bi.ForEach(func(ref *plumbing.Reference) error {
|
||||||
|
branches = append(branches, ref)
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
return branches, nil
|
||||||
|
}
|
||||||
|
|
|
@ -21,5 +21,6 @@ func Handlers(c *config.Config) *flow.Mux {
|
||||||
mux.HandleFunc("/:name/blob/:ref/...", d.FileContent, "GET")
|
mux.HandleFunc("/:name/blob/:ref/...", d.FileContent, "GET")
|
||||||
mux.HandleFunc("/:name/log/:ref", d.Log, "GET")
|
mux.HandleFunc("/:name/log/:ref", d.Log, "GET")
|
||||||
mux.HandleFunc("/:name/commit/:ref", d.Diff, "GET")
|
mux.HandleFunc("/:name/commit/:ref", d.Diff, "GET")
|
||||||
|
mux.HandleFunc("/:name/refs", d.Refs, "GET")
|
||||||
return mux
|
return mux
|
||||||
}
|
}
|
||||||
|
|
|
@ -216,3 +216,42 @@ func (d *deps) Diff(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *deps) Refs(w http.ResponseWriter, r *http.Request) {
|
||||||
|
name := flow.Param(r.Context(), "name")
|
||||||
|
|
||||||
|
path := filepath.Join(d.c.Git.ScanPath, name)
|
||||||
|
gr, err := git.Open(path, "")
|
||||||
|
if err != nil {
|
||||||
|
d.Write404(w)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
tags, err := gr.Tags()
|
||||||
|
if err != nil {
|
||||||
|
// Non-fatal, we *should* have at least one branch to show.
|
||||||
|
log.Println(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
branches, err := gr.Branches()
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
d.Write500(w)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
tpath := filepath.Join(d.c.Template.Dir, "*")
|
||||||
|
t := template.Must(template.ParseGlob(tpath))
|
||||||
|
|
||||||
|
data := make(map[string]interface{})
|
||||||
|
|
||||||
|
data["meta"] = d.c.Meta
|
||||||
|
data["name"] = name
|
||||||
|
data["branches"] = branches
|
||||||
|
data["tags"] = tags
|
||||||
|
|
||||||
|
if err := t.ExecuteTemplate(w, "refs", data); err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
32
templates/refs.html
Normal file
32
templates/refs.html
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
{{ define "refs" }}
|
||||||
|
<html>
|
||||||
|
{{ template "head" . }}
|
||||||
|
|
||||||
|
<header>
|
||||||
|
<h1>{{ .meta.Title }}</h1>
|
||||||
|
<h2>{{ .meta.Description }}</h2>
|
||||||
|
</header>
|
||||||
|
<body>
|
||||||
|
{{ template "nav" . }}
|
||||||
|
<main>
|
||||||
|
<h3>branches</h3>
|
||||||
|
{{ $name := .name }}
|
||||||
|
{{ range .branches }}
|
||||||
|
<p>
|
||||||
|
<strong>{{ .Name.Short }}</strong>
|
||||||
|
<a href="/{{ $name }}/tree/{{ .Name.Short }}/">browse</a>
|
||||||
|
<a href="/{{ $name }}/log/{{ .Name.Short }}">log</a>
|
||||||
|
</p>
|
||||||
|
{{ end }}
|
||||||
|
{{ if .tags }}
|
||||||
|
{{ range .tags }}
|
||||||
|
<p>{{ .Name }}</p>
|
||||||
|
{{ if .Message }}
|
||||||
|
<p>{{ .Message }}</p>
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
</main>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
{{ end }}
|
Loading…
Reference in a new issue