init: pristine aerc 0.20.0 source
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"io"
|
||||
"strings"
|
||||
"text/template"
|
||||
|
||||
"git.sr.ht/~rjarry/aerc/lib/log"
|
||||
)
|
||||
|
||||
var templateText = `
|
||||
Project {{.Name}} {{if .IsActive}}[active]{{end}} {{if .IsWorktree}}[Linked worktree to {{.WorktreeParent}}]{{end}}
|
||||
Directory {{.Root}}
|
||||
Base {{with .Base.ID}}{{if ge (len .) 40}}{{printf "%-6.6s" .}}{{else}}{{.}}{{end}}{{end}}
|
||||
{{$notes := .Notes}}{{$commits := .Commits}}
|
||||
{{- range $index, $patch := .Patches}}
|
||||
{{$patch}}:
|
||||
{{- range (index $commits $patch)}}
|
||||
{{with (index $notes .ID)}}[{{.}}] {{end}}{{. -}}
|
||||
{{end}}
|
||||
{{end -}}
|
||||
`
|
||||
|
||||
var viewRenderer = template.Must(template.New("ProjectToText").Parse(templateText))
|
||||
|
||||
type view struct {
|
||||
Name string
|
||||
Root string
|
||||
Base Commit
|
||||
// Patches are the unique tag names.
|
||||
Patches []string
|
||||
// Commits is a map where the tag names are keys and the associated
|
||||
// commits the values.
|
||||
Commits map[string][]Commit
|
||||
// Notes contain annotations of the commits where the commit hash is
|
||||
// the key and the annotation is the value.
|
||||
Notes map[string]string
|
||||
// IsActive is true if the current project is selected.
|
||||
IsActive bool
|
||||
IsWorktree bool
|
||||
WorktreeParent string
|
||||
}
|
||||
|
||||
func newView(p Project, active bool, notes map[string]string) view {
|
||||
v := view{
|
||||
Name: p.Name,
|
||||
Root: p.Root,
|
||||
Base: p.Base,
|
||||
Commits: make(map[string][]Commit),
|
||||
Notes: notes,
|
||||
IsActive: active,
|
||||
IsWorktree: p.Worktree.Root != "" && p.Worktree.Name != "",
|
||||
WorktreeParent: p.Worktree.Name,
|
||||
}
|
||||
|
||||
for _, commit := range p.Commits {
|
||||
patch := commit.Tag
|
||||
commits, ok := v.Commits[patch]
|
||||
if !ok {
|
||||
v.Patches = append(v.Patches, patch)
|
||||
}
|
||||
commits = append(commits, commit)
|
||||
v.Commits[patch] = commits
|
||||
}
|
||||
|
||||
return v
|
||||
}
|
||||
|
||||
func (v view) String() string {
|
||||
var buf bytes.Buffer
|
||||
err := viewRenderer.Execute(&buf, v)
|
||||
if err != nil {
|
||||
log.Errorf("failed to run template: %v", err)
|
||||
}
|
||||
return buf.String()
|
||||
}
|
||||
|
||||
func (p Project) String() string {
|
||||
return newView(p, false, nil).String()
|
||||
}
|
||||
|
||||
func (p Project) NewReader(isActive bool, notes map[string]string) io.Reader {
|
||||
return strings.NewReader(newView(p, isActive, notes).String())
|
||||
}
|
||||
Reference in New Issue
Block a user