diff options
-rw-r--r-- | README.md | 2 | ||||
-rw-r--r-- | pkg/git/git.go | 48 | ||||
-rw-r--r-- | pkg/handler/git/handler.go | 19 | ||||
-rw-r--r-- | pkg/service/git.go | 2 | ||||
-rw-r--r-- | pkg/u/file.go | 44 | ||||
-rw-r--r-- | pkg/u/file_test.go | 59 | ||||
-rw-r--r-- | templates/gititemrefs.qtpl | 24 | ||||
-rw-r--r-- | templates/gititemrefs.qtpl.go | 176 | ||||
-rw-r--r-- | templates/gititemsummary.qtpl | 24 | ||||
-rw-r--r-- | templates/gititemsummary.qtpl.go | 188 | ||||
-rw-r--r-- | templates/gititemtree.qtpl | 2 | ||||
-rw-r--r-- | templates/gititemtree.qtpl.go | 2 | ||||
-rw-r--r-- | templates/tags.qtpl | 31 | ||||
-rw-r--r-- | templates/tags.qtpl.go | 154 |
14 files changed, 451 insertions, 324 deletions
@@ -23,8 +23,6 @@ To run the project you just need to do a make run. ### TODO -- Add path to tree view - - Fix href with extra slash - Add message to tags - Add link to tar browser from commit page - Add patch to the commit page diff --git a/pkg/git/git.go b/pkg/git/git.go index 6b58d35..7341c1b 100644 --- a/pkg/git/git.go +++ b/pkg/git/git.go @@ -38,6 +38,11 @@ type ( modTime time.Time isDir bool } + + TagReference struct { + ref *plumbing.Reference + tag *object.Tag + } ) func OpenRepository(dir string) (*GitRepository, error) { @@ -119,18 +124,31 @@ func (g *GitRepository) Head() (*plumbing.Reference, error) { return g.repository.Head() } -func (g *GitRepository) Tags() ([]*plumbing.Reference, error) { - ti, err := g.repository.Tags() +func (g *GitRepository) Tags() ([]*TagReference, error) { + iter, err := g.repository.Tags() if err != nil { return nil, err } - tags := []*plumbing.Reference{} - err = ti.ForEach(func(t *plumbing.Reference) error { - tags = append(tags, t) + tags := make([]*TagReference, 0) + + if err := iter.ForEach(func(ref *plumbing.Reference) error { + obj, err := g.repository.TagObject(ref.Hash()) + switch err { + case nil: + tags = append(tags, &TagReference{ + ref: ref, + tag: obj, + }) + case plumbing.ErrObjectNotFound: + tags = append(tags, &TagReference{ + ref: ref, + }) + default: + return err + } return nil - }) - if err != nil { + }); err != nil { return nil, err } @@ -361,3 +379,19 @@ func (i *infoWrapper) IsDir() bool { func (i *infoWrapper) Sys() any { return nil } + +func (t *TagReference) HashString() string { + return t.ref.Hash().String() +} + +func (t *TagReference) ShortName() string { + return t.ref.Name().Short() +} + +func (t *TagReference) Message() string { + if t.tag != nil { + return t.tag.Message + } + return "" + +} diff --git a/pkg/handler/git/handler.go b/pkg/handler/git/handler.go index 5e50122..9549f0e 100644 --- a/pkg/handler/git/handler.go +++ b/pkg/handler/git/handler.go @@ -18,7 +18,6 @@ import ( "github.com/alecthomas/chroma/v2/formatters/html" "github.com/alecthomas/chroma/v2/lexers" "github.com/alecthomas/chroma/v2/styles" - "github.com/go-git/go-git/v5/plumbing" "github.com/go-git/go-git/v5/plumbing/object" "github.com/gomarkdown/markdown" markdownhtml "github.com/gomarkdown/markdown/html" @@ -27,30 +26,16 @@ import ( type ( GitHandler struct { - gitService gitService + gitService *service.GitService readmePath string } - gitService interface { - ListRepositories() ([]*service.Repository, error) - ListCommits(name string, ref string, count int) ([]*object.Commit, error) - LastCommit(name string, ref string) (*object.Commit, error) - GetHead(name string) (*plumbing.Reference, error) - GetTree(name, ref, path string) (*object.Tree, error) - IsBinary(name, ref, path string) (bool, error) - GetFileContent(name, ref, path string) ([]byte, error) - GetAbout(name string) ([]byte, error) - ListTags(name string) ([]*plumbing.Reference, error) - ListBranches(name string) ([]*plumbing.Reference, error) - WriteTarGZip(w io.Writer, name, ref, prefix string) error - } - configurationRepository interface { GetRootReadme() string } ) -func NewGitHandler(gitService gitService, confRepo configurationRepository) *GitHandler { +func NewGitHandler(gitService *service.GitService, confRepo configurationRepository) *GitHandler { return &GitHandler{ gitService: gitService, readmePath: confRepo.GetRootReadme(), diff --git a/pkg/service/git.go b/pkg/service/git.go index df4e3aa..b368f0c 100644 --- a/pkg/service/git.go +++ b/pkg/service/git.go @@ -217,7 +217,7 @@ func (g *GitService) GetAbout(name string) ([]byte, error) { return file, nil } -func (g *GitService) ListTags(name string) ([]*plumbing.Reference, error) { +func (g *GitService) ListTags(name string) ([]*git.TagReference, error) { r := g.configRepo.GetByName(name) if r == nil { return nil, ErrRepositoryNotFound diff --git a/pkg/u/file.go b/pkg/u/file.go index fafe0fb..5010b3e 100644 --- a/pkg/u/file.go +++ b/pkg/u/file.go @@ -4,7 +4,7 @@ import ( "errors" "log/slog" "os" - "path/filepath" + "strings" ) func FileExist(filename string) bool { @@ -22,21 +22,43 @@ func FileExist(filename string) bool { } // This is just a slin wraper to make easier to compose path in the template -type Pathing string +type Pathing struct { + sb strings.Builder +} -func Root() Pathing { - return "/" +func NewPathing() *Pathing { + return &Pathing{} } -func (s Pathing) AddPath(p string) Pathing { - return Pathing(filepath.Join(string(s), p)) +func (s *Pathing) AddPath(p string) *Pathing { + if len(p) == 0 { + return s + } + + // if it has trailing / remove it + if p[len(p)-1] == '/' { + p = p[:len(p)-1] + return s.AddPath(p) + } + + // if it does not have it so add + if p[0] == '/' { + s.sb.WriteString(p) + } else { + s.sb.WriteString("/" + p) + } + + return s } -func (s Pathing) AddPaths(p []string) Pathing { - f := filepath.Join(p...) - return Pathing(filepath.Join(string(s), f)) +func (s *Pathing) AddPaths(p []string) *Pathing { + for _, v := range p { + s.AddPath(v) + } + + return s } -func (s Pathing) Done() string { - return string(s) +func (s *Pathing) Done() string { + return s.sb.String() } diff --git a/pkg/u/file_test.go b/pkg/u/file_test.go new file mode 100644 index 0000000..b7d6975 --- /dev/null +++ b/pkg/u/file_test.go @@ -0,0 +1,59 @@ +// go:build unit +package u + +import "testing" + +func TestPathing(t *testing.T) { + testCases := []struct { + name string + in []any + out string + }{ + { + name: "root", + in: []any{}, + out: "", + }, + { + name: "empty", + in: []any{ + "/", + []string{"/", "/"}, + "/", + []string{"/"}, + }, + out: "", + }, + { + name: "empty", + in: []any{ + "usr", + []string{"/share/", "lib"}, + "/demo", + []string{"/out//"}, + }, + out: "/usr/share/lib/demo/out", + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + r := NewPathing() + + for _, v := range tc.in { + switch s := v.(type) { + case string: + r = r.AddPath(s) + case []string: + r = r.AddPaths(s) + } + } + + path := r.Done() + if tc.out != path { + t.Errorf("String mismatch: wanted %s got %s", tc.out, path) + } + + }) + } +} diff --git a/templates/gititemrefs.qtpl b/templates/gititemrefs.qtpl index 6244082..9f4f74b 100644 --- a/templates/gititemrefs.qtpl +++ b/templates/gititemrefs.qtpl @@ -1,8 +1,9 @@ {% import "github.com/go-git/go-git/v5/plumbing" %} +{% import "git.gabrielgio.me/cerrado/pkg/git" %} {% code type GitItemRefsPage struct { - Tags []*plumbing.Reference + Tags []*git.TagReference Branches []*plumbing.Reference } %} @@ -12,26 +13,7 @@ type GitItemRefsPage struct { {% func (g *GitItemRefsPage) GitContent(name, ref string) %} <div class="row"> <div class="col-md-8"> - {% if len(g.Tags) > 0 %} - <div class="event-list"> - {% for _, t := range g.Tags %} - <div class="row event me-md-2"> - <div class="col-4"> - {%s t.Name().Short() %} - </div> - <div class="col-8"> - <div class="float-end"> - <a href="/{%s name %}/archive/{%s t.Name().Short() %}.tar.gz">tar.gz</a> - <a href="/{%s name %}/tree/{%s t.Name().Short() %}/">tree</a> - <a href="/{%s name %}/log/{%s t.Name().Short() %}/">log</a> - </div> - </div> - </div> - {% endfor %} - </div> - {% else %} - <p> No tags </p> - {% endif %} + {%= ListTags(name, g.Tags) %} </div> <div class="col-md-4"> <div class="event-list"> diff --git a/templates/gititemrefs.qtpl.go b/templates/gititemrefs.qtpl.go index da9bfe7..d54301d 100644 --- a/templates/gititemrefs.qtpl.go +++ b/templates/gititemrefs.qtpl.go @@ -7,214 +7,154 @@ package templates //line gititemrefs.qtpl:1 import "github.com/go-git/go-git/v5/plumbing" -//line gititemrefs.qtpl:3 +//line gititemrefs.qtpl:2 +import "git.gabrielgio.me/cerrado/pkg/git" + +//line gititemrefs.qtpl:4 import ( qtio422016 "io" qt422016 "github.com/valyala/quicktemplate" ) -//line gititemrefs.qtpl:3 +//line gititemrefs.qtpl:4 var ( _ = qtio422016.Copy _ = qt422016.AcquireByteBuffer ) -//line gititemrefs.qtpl:4 +//line gititemrefs.qtpl:5 type GitItemRefsPage struct { - Tags []*plumbing.Reference + Tags []*git.TagReference Branches []*plumbing.Reference } -//line gititemrefs.qtpl:10 +//line gititemrefs.qtpl:11 func (g *GitItemRefsPage) StreamNav(qw422016 *qt422016.Writer, name, ref string) { -//line gititemrefs.qtpl:10 +//line gititemrefs.qtpl:11 StreamGitItemNav(qw422016, name, ref, Refs) -//line gititemrefs.qtpl:10 +//line gititemrefs.qtpl:11 } -//line gititemrefs.qtpl:10 +//line gititemrefs.qtpl:11 func (g *GitItemRefsPage) WriteNav(qq422016 qtio422016.Writer, name, ref string) { -//line gititemrefs.qtpl:10 +//line gititemrefs.qtpl:11 qw422016 := qt422016.AcquireWriter(qq422016) -//line gititemrefs.qtpl:10 +//line gititemrefs.qtpl:11 g.StreamNav(qw422016, name, ref) -//line gititemrefs.qtpl:10 +//line gititemrefs.qtpl:11 qt422016.ReleaseWriter(qw422016) -//line gititemrefs.qtpl:10 +//line gititemrefs.qtpl:11 } -//line gititemrefs.qtpl:10 +//line gititemrefs.qtpl:11 func (g *GitItemRefsPage) Nav(name, ref string) string { -//line gititemrefs.qtpl:10 +//line gititemrefs.qtpl:11 qb422016 := qt422016.AcquireByteBuffer() -//line gititemrefs.qtpl:10 +//line gititemrefs.qtpl:11 g.WriteNav(qb422016, name, ref) -//line gititemrefs.qtpl:10 +//line gititemrefs.qtpl:11 qs422016 := string(qb422016.B) -//line gititemrefs.qtpl:10 +//line gititemrefs.qtpl:11 qt422016.ReleaseByteBuffer(qb422016) -//line gititemrefs.qtpl:10 +//line gititemrefs.qtpl:11 return qs422016 -//line gititemrefs.qtpl:10 +//line gititemrefs.qtpl:11 } -//line gititemrefs.qtpl:12 +//line gititemrefs.qtpl:13 func (g *GitItemRefsPage) StreamGitContent(qw422016 *qt422016.Writer, name, ref string) { -//line gititemrefs.qtpl:12 +//line gititemrefs.qtpl:13 qw422016.N().S(` <div class="row"> <div class="col-md-8"> `) -//line gititemrefs.qtpl:15 - if len(g.Tags) > 0 { -//line gititemrefs.qtpl:15 - qw422016.N().S(` - <div class="event-list"> - `) -//line gititemrefs.qtpl:17 - for _, t := range g.Tags { -//line gititemrefs.qtpl:17 - qw422016.N().S(` - <div class="row event me-md-2"> - <div class="col-4"> - `) -//line gititemrefs.qtpl:20 - qw422016.E().S(t.Name().Short()) -//line gititemrefs.qtpl:20 - qw422016.N().S(` - </div> - <div class="col-8"> - <div class="float-end"> - <a href="/`) -//line gititemrefs.qtpl:24 - qw422016.E().S(name) -//line gititemrefs.qtpl:24 - qw422016.N().S(`/archive/`) -//line gititemrefs.qtpl:24 - qw422016.E().S(t.Name().Short()) -//line gititemrefs.qtpl:24 - qw422016.N().S(`.tar.gz">tar.gz</a> - <a href="/`) -//line gititemrefs.qtpl:25 - qw422016.E().S(name) -//line gititemrefs.qtpl:25 - qw422016.N().S(`/tree/`) -//line gititemrefs.qtpl:25 - qw422016.E().S(t.Name().Short()) -//line gititemrefs.qtpl:25 - qw422016.N().S(`/">tree</a> - <a href="/`) -//line gititemrefs.qtpl:26 - qw422016.E().S(name) -//line gititemrefs.qtpl:26 - qw422016.N().S(`/log/`) -//line gititemrefs.qtpl:26 - qw422016.E().S(t.Name().Short()) -//line gititemrefs.qtpl:26 - qw422016.N().S(`/">log</a> - </div> - </div> - </div> - `) -//line gititemrefs.qtpl:30 - } -//line gititemrefs.qtpl:30 - qw422016.N().S(` - </div> - `) -//line gititemrefs.qtpl:32 - } else { -//line gititemrefs.qtpl:32 - qw422016.N().S(` - <p> No tags </p> - `) -//line gititemrefs.qtpl:34 - } -//line gititemrefs.qtpl:34 +//line gititemrefs.qtpl:16 + StreamListTags(qw422016, name, g.Tags) +//line gititemrefs.qtpl:16 qw422016.N().S(` </div> <div class="col-md-4"> <div class="event-list"> `) -//line gititemrefs.qtpl:38 +//line gititemrefs.qtpl:20 for _, b := range g.Branches { -//line gititemrefs.qtpl:38 +//line gititemrefs.qtpl:20 qw422016.N().S(` <div class="row event"> <div class="col-4"> `) -//line gititemrefs.qtpl:41 +//line gititemrefs.qtpl:23 qw422016.E().S(b.Name().Short()) -//line gititemrefs.qtpl:41 +//line gititemrefs.qtpl:23 qw422016.N().S(` </div> <div class="col-8"> <div class="float-end"> <a href="/`) -//line gititemrefs.qtpl:45 +//line gititemrefs.qtpl:27 qw422016.E().S(name) -//line gititemrefs.qtpl:45 +//line gititemrefs.qtpl:27 qw422016.N().S(`/archive/`) -//line gititemrefs.qtpl:45 +//line gititemrefs.qtpl:27 qw422016.E().S(b.Name().Short()) -//line gititemrefs.qtpl:45 +//line gititemrefs.qtpl:27 qw422016.N().S(`.tar.gz">tar.gz</a> <a href="/`) -//line gititemrefs.qtpl:46 +//line gititemrefs.qtpl:28 qw422016.E().S(name) -//line gititemrefs.qtpl:46 +//line gititemrefs.qtpl:28 qw422016.N().S(`/tree/`) -//line gititemrefs.qtpl:46 +//line gititemrefs.qtpl:28 qw422016.E().S(b.Name().Short()) -//line gititemrefs.qtpl:46 +//line gititemrefs.qtpl:28 qw422016.N().S(`/">tree</a> <a href="/`) -//line gititemrefs.qtpl:47 +//line gititemrefs.qtpl:29 qw422016.E().S(name) -//line gititemrefs.qtpl:47 +//line gititemrefs.qtpl:29 qw422016.N().S(`/log/`) -//line gititemrefs.qtpl:47 +//line gititemrefs.qtpl:29 qw422016.E().S(b.Name().Short()) -//line gititemrefs.qtpl:47 +//line gititemrefs.qtpl:29 qw422016.N().S(`/">log</a> </div> </div> </div> `) -//line gititemrefs.qtpl:51 +//line gititemrefs.qtpl:33 } -//line gititemrefs.qtpl:51 +//line gititemrefs.qtpl:33 qw422016.N().S(` </div> </div> </div> `) -//line gititemrefs.qtpl:55 +//line gititemrefs.qtpl:37 } -//line gititemrefs.qtpl:55 +//line gititemrefs.qtpl:37 func (g *GitItemRefsPage) WriteGitContent(qq422016 qtio422016.Writer, name, ref string) { -//line gititemrefs.qtpl:55 +//line gititemrefs.qtpl:37 qw422016 := qt422016.AcquireWriter(qq422016) -//line gititemrefs.qtpl:55 +//line gititemrefs.qtpl:37 g.StreamGitContent(qw422016, name, ref) -//line gititemrefs.qtpl:55 +//line gititemrefs.qtpl:37 qt422016.ReleaseWriter(qw422016) -//line gititemrefs.qtpl:55 +//line gititemrefs.qtpl:37 } -//line gititemrefs.qtpl:55 +//line gititemrefs.qtpl:37 func (g *GitItemRefsPage) GitContent(name, ref string) string { -//line gititemrefs.qtpl:55 +//line gititemrefs.qtpl:37 qb422016 := qt422016.AcquireByteBuffer() -//line gititemrefs.qtpl:55 +//line gititemrefs.qtpl:37 g.WriteGitContent(qb422016, name, ref) -//line gititemrefs.qtpl:55 +//line gititemrefs.qtpl:37 qs422016 := string(qb422016.B) -//line gititemrefs.qtpl:55 +//line gititemrefs.qtpl:37 qt422016.ReleaseByteBuffer(qb422016) -//line gititemrefs.qtpl:55 +//line gititemrefs.qtpl:37 return qs422016 -//line gititemrefs.qtpl:55 +//line gititemrefs.qtpl:37 } diff --git a/templates/gititemsummary.qtpl b/templates/gititemsummary.qtpl index ef2c534..44e1604 100644 --- a/templates/gititemsummary.qtpl +++ b/templates/gititemsummary.qtpl @@ -1,9 +1,10 @@ {% import "github.com/go-git/go-git/v5/plumbing" %} {% import "github.com/go-git/go-git/v5/plumbing/object" %} +{% import "git.gabrielgio.me/cerrado/pkg/git" %} {% code type GitItemSummaryPage struct { - Tags []*plumbing.Reference + Tags []*git.TagReference Branches []*plumbing.Reference Commits []*object.Commit } @@ -14,26 +15,7 @@ type GitItemSummaryPage struct { {% func (g *GitItemSummaryPage) GitContent(name, ref string) %} <div class="row"> <div class="col-md-8"> - {% if len(g.Tags) > 0 %} - <div class="event-list"> - {% for _, t := range g.Tags %} - <div class="row event me-md-2"> - <div class="col-4"> - {%s t.Name().Short() %} - </div> - <div class="col-8"> - <div class="float-end"> - <a href="/{%s name %}/archive/{%s t.Name().Short() %}.tar.gz">tar.gz</a> - <a href="/{%s name %}/tree/{%s t.Name().Short() %}/">tree</a> - <a href="/{%s name %}/log/{%s t.Name().Short() %}/">log</a> - </div> - </div> - </div> - {% endfor %} - </div> - {% else %} - <p> No tags </p> - {% endif %} + {%= ListTags(name, g.Tags) %} </div> <div class="col-md-4"> <div class="event-list"> diff --git a/templates/gititemsummary.qtpl.go b/templates/gititemsummary.qtpl.go index 570a955..24fed9d 100644 --- a/templates/gititemsummary.qtpl.go +++ b/templates/gititemsummary.qtpl.go @@ -10,185 +10,125 @@ import "github.com/go-git/go-git/v5/plumbing" //line gititemsummary.qtpl:2 import "github.com/go-git/go-git/v5/plumbing/object" -//line gititemsummary.qtpl:4 +//line gititemsummary.qtpl:3 +import "git.gabrielgio.me/cerrado/pkg/git" + +//line gititemsummary.qtpl:5 import ( qtio422016 "io" qt422016 "github.com/valyala/quicktemplate" ) -//line gititemsummary.qtpl:4 +//line gititemsummary.qtpl:5 var ( _ = qtio422016.Copy _ = qt422016.AcquireByteBuffer ) -//line gititemsummary.qtpl:5 +//line gititemsummary.qtpl:6 type GitItemSummaryPage struct { - Tags []*plumbing.Reference + Tags []*git.TagReference Branches []*plumbing.Reference Commits []*object.Commit } -//line gititemsummary.qtpl:12 +//line gititemsummary.qtpl:13 func (g *GitItemSummaryPage) StreamNav(qw422016 *qt422016.Writer, name, ref string) { -//line gititemsummary.qtpl:12 +//line gititemsummary.qtpl:13 StreamGitItemNav(qw422016, name, ref, Summary) -//line gititemsummary.qtpl:12 +//line gititemsummary.qtpl:13 } -//line gititemsummary.qtpl:12 +//line gititemsummary.qtpl:13 func (g *GitItemSummaryPage) WriteNav(qq422016 qtio422016.Writer, name, ref string) { -//line gititemsummary.qtpl:12 +//line gititemsummary.qtpl:13 qw422016 := qt422016.AcquireWriter(qq422016) -//line gititemsummary.qtpl:12 +//line gititemsummary.qtpl:13 g.StreamNav(qw422016, name, ref) -//line gititemsummary.qtpl:12 +//line gititemsummary.qtpl:13 qt422016.ReleaseWriter(qw422016) -//line gititemsummary.qtpl:12 +//line gititemsummary.qtpl:13 } -//line gititemsummary.qtpl:12 +//line gititemsummary.qtpl:13 func (g *GitItemSummaryPage) Nav(name, ref string) string { -//line gititemsummary.qtpl:12 +//line gititemsummary.qtpl:13 qb422016 := qt422016.AcquireByteBuffer() -//line gititemsummary.qtpl:12 +//line gititemsummary.qtpl:13 g.WriteNav(qb422016, name, ref) -//line gititemsummary.qtpl:12 +//line gititemsummary.qtpl:13 qs422016 := string(qb422016.B) -//line gititemsummary.qtpl:12 +//line gititemsummary.qtpl:13 qt422016.ReleaseByteBuffer(qb422016) -//line gititemsummary.qtpl:12 +//line gititemsummary.qtpl:13 return qs422016 -//line gititemsummary.qtpl:12 +//line gititemsummary.qtpl:13 } -//line gititemsummary.qtpl:14 +//line gititemsummary.qtpl:15 func (g *GitItemSummaryPage) StreamGitContent(qw422016 *qt422016.Writer, name, ref string) { -//line gititemsummary.qtpl:14 +//line gititemsummary.qtpl:15 qw422016.N().S(` <div class="row"> <div class="col-md-8"> `) -//line gititemsummary.qtpl:17 - if len(g.Tags) > 0 { -//line gititemsummary.qtpl:17 - qw422016.N().S(` - <div class="event-list"> - `) -//line gititemsummary.qtpl:19 - for _, t := range g.Tags { -//line gititemsummary.qtpl:19 - qw422016.N().S(` - <div class="row event me-md-2"> - <div class="col-4"> - `) -//line gititemsummary.qtpl:22 - qw422016.E().S(t.Name().Short()) -//line gititemsummary.qtpl:22 - qw422016.N().S(` - </div> - <div class="col-8"> - <div class="float-end"> - <a href="/`) -//line gititemsummary.qtpl:26 - qw422016.E().S(name) -//line gititemsummary.qtpl:26 - qw422016.N().S(`/archive/`) -//line gititemsummary.qtpl:26 - qw422016.E().S(t.Name().Short()) -//line gititemsummary.qtpl:26 - qw422016.N().S(`.tar.gz">tar.gz</a> - <a href="/`) -//line gititemsummary.qtpl:27 - qw422016.E().S(name) -//line gititemsummary.qtpl:27 - qw422016.N().S(`/tree/`) -//line gititemsummary.qtpl:27 - qw422016.E().S(t.Name().Short()) -//line gititemsummary.qtpl:27 - qw422016.N().S(`/">tree</a> - <a href="/`) -//line gititemsummary.qtpl:28 - qw422016.E().S(name) -//line gititemsummary.qtpl:28 - qw422016.N().S(`/log/`) -//line gititemsummary.qtpl:28 - qw422016.E().S(t.Name().Short()) -//line gititemsummary.qtpl:28 - qw422016.N().S(`/">log</a> - </div> - </div> - </div> - `) -//line gititemsummary.qtpl:32 - } -//line gititemsummary.qtpl:32 - qw422016.N().S(` - </div> - `) -//line gititemsummary.qtpl:34 - } else { -//line gititemsummary.qtpl:34 - qw422016.N().S(` - <p> No tags </p> - `) -//line gititemsummary.qtpl:36 - } -//line gititemsummary.qtpl:36 +//line gititemsummary.qtpl:18 + StreamListTags(qw422016, name, g.Tags) +//line gititemsummary.qtpl:18 qw422016.N().S(` </div> <div class="col-md-4"> <div class="event-list"> `) -//line gititemsummary.qtpl:40 +//line gititemsummary.qtpl:22 for _, b := range g.Branches { -//line gititemsummary.qtpl:40 +//line gititemsummary.qtpl:22 qw422016.N().S(` <div class="row event"> <div class="col-4"> `) -//line gititemsummary.qtpl:43 +//line gititemsummary.qtpl:25 qw422016.E().S(b.Name().Short()) -//line gititemsummary.qtpl:43 +//line gititemsummary.qtpl:25 qw422016.N().S(` </div> <div class="col-8"> <div class="float-end"> <a href="/`) -//line gititemsummary.qtpl:47 +//line gititemsummary.qtpl:29 qw422016.E().S(name) -//line gititemsummary.qtpl:47 +//line gititemsummary.qtpl:29 qw422016.N().S(`/archive/`) -//line gititemsummary.qtpl:47 +//line gititemsummary.qtpl:29 qw422016.E().S(b.Name().Short()) -//line gititemsummary.qtpl:47 +//line gititemsummary.qtpl:29 qw422016.N().S(`.tar.gz">tar.gz</a> <a href="/`) -//line gititemsummary.qtpl:48 +//line gititemsummary.qtpl:30 qw422016.E().S(name) -//line gititemsummary.qtpl:48 +//line gititemsummary.qtpl:30 qw422016.N().S(`/tree/`) -//line gititemsummary.qtpl:48 +//line gititemsummary.qtpl:30 qw422016.E().S(b.Name().Short()) -//line gititemsummary.qtpl:48 +//line gititemsummary.qtpl:30 qw422016.N().S(`/">tree</a> <a href="/`) -//line gititemsummary.qtpl:49 +//line gititemsummary.qtpl:31 qw422016.E().S(name) -//line gititemsummary.qtpl:49 +//line gititemsummary.qtpl:31 qw422016.N().S(`/log/`) -//line gititemsummary.qtpl:49 +//line gititemsummary.qtpl:31 qw422016.E().S(b.Name().Short()) -//line gititemsummary.qtpl:49 +//line gititemsummary.qtpl:31 qw422016.N().S(`/">log</a> </div> </div> </div> `) -//line gititemsummary.qtpl:53 +//line gititemsummary.qtpl:35 } -//line gititemsummary.qtpl:53 +//line gititemsummary.qtpl:35 qw422016.N().S(` </div> </div> @@ -196,48 +136,48 @@ func (g *GitItemSummaryPage) StreamGitContent(qw422016 *qt422016.Writer, name, r <div class="row"> <div class="event-list"> `) -//line gititemsummary.qtpl:59 +//line gititemsummary.qtpl:41 for _, c := range g.Commits { -//line gititemsummary.qtpl:59 +//line gititemsummary.qtpl:41 qw422016.N().S(` `) -//line gititemsummary.qtpl:60 +//line gititemsummary.qtpl:42 StreamCommit(qw422016, name, c) -//line gititemsummary.qtpl:60 +//line gititemsummary.qtpl:42 qw422016.N().S(` `) -//line gititemsummary.qtpl:61 +//line gititemsummary.qtpl:43 } -//line gititemsummary.qtpl:61 +//line gititemsummary.qtpl:43 qw422016.N().S(` </div> </div> `) -//line gititemsummary.qtpl:64 +//line gititemsummary.qtpl:46 } -//line gititemsummary.qtpl:64 +//line gititemsummary.qtpl:46 func (g *GitItemSummaryPage) WriteGitContent(qq422016 qtio422016.Writer, name, ref string) { -//line gititemsummary.qtpl:64 +//line gititemsummary.qtpl:46 qw422016 := qt422016.AcquireWriter(qq422016) -//line gititemsummary.qtpl:64 +//line gititemsummary.qtpl:46 g.StreamGitContent(qw422016, name, ref) -//line gititemsummary.qtpl:64 +//line gititemsummary.qtpl:46 qt422016.ReleaseWriter(qw422016) -//line gititemsummary.qtpl:64 +//line gititemsummary.qtpl:46 } -//line gititemsummary.qtpl:64 +//line gititemsummary.qtpl:46 func (g *GitItemSummaryPage) GitContent(name, ref string) string { -//line gititemsummary.qtpl:64 +//line gititemsummary.qtpl:46 qb422016 := qt422016.AcquireByteBuffer() -//line gititemsummary.qtpl:64 +//line gititemsummary.qtpl:46 g.WriteGitContent(qb422016, name, ref) -//line gititemsummary.qtpl:64 +//line gititemsummary.qtpl:46 qs422016 := string(qb422016.B) -//line gititemsummary.qtpl:64 +//line gititemsummary.qtpl:46 qt422016.ReleaseByteBuffer(qb422016) -//line gititemsummary.qtpl:64 +//line gititemsummary.qtpl:46 return qs422016 -//line gititemsummary.qtpl:64 +//line gititemsummary.qtpl:46 } diff --git a/templates/gititemtree.qtpl b/templates/gititemtree.qtpl index 86fb29c..5898506 100644 --- a/templates/gititemtree.qtpl +++ b/templates/gititemtree.qtpl @@ -15,7 +15,7 @@ %} {% code func url(name, mode, ref, filename string, path []string) string { - return u.Root(). + return u.NewPathing(). AddPath(name). AddPath(mode). AddPath(ref). diff --git a/templates/gititemtree.qtpl.go b/templates/gititemtree.qtpl.go index c0fc3a7..f8d1fd2 100644 --- a/templates/gititemtree.qtpl.go +++ b/templates/gititemtree.qtpl.go @@ -38,7 +38,7 @@ const ( //line gititemtree.qtpl:17 func url(name, mode, ref, filename string, path []string) string { - return u.Root(). + return u.NewPathing(). AddPath(name). AddPath(mode). AddPath(ref). diff --git a/templates/tags.qtpl b/templates/tags.qtpl new file mode 100644 index 0000000..5cd617f --- /dev/null +++ b/templates/tags.qtpl @@ -0,0 +1,31 @@ +{% import "git.gabrielgio.me/cerrado/pkg/git" %} + +{% func ListTags(name string, tags []*git.TagReference) %} +{% if len(tags) > 0 %} +<div class="event-list"> + {% for _, t := range tags %} + <div class="event me-md-2"> + <div class="row "> + <div class="col-4"> + <a title="{%s t.HashString() %}" href="/{%s name %}/commit/{%s t.HashString() %}">{%s t.ShortName() %}</a> + </div> + <div class="col-8"> + <div class="float-end"> + <a href="/{%s name %}/archive/{%s t.ShortName() %}.tar.gz">tar.gz</a> + <a href="/{%s name %}/tree/{%s t.ShortName() %}/">tree</a> + <a href="/{%s name %}/log/{%s t.ShortName() %}/">log</a> + </div> + </div> + </div> + {% if t.Message() != "" %} + <div class="code-view"> + <pre>{%s t.Message() %}</pre> + </div> + {% endif %} + </div> + {% endfor %} +</div> +{% else %} + <p> No tags </p> +{% endif %} +{% endfunc %} diff --git a/templates/tags.qtpl.go b/templates/tags.qtpl.go new file mode 100644 index 0000000..7d8eca8 --- /dev/null +++ b/templates/tags.qtpl.go @@ -0,0 +1,154 @@ +// Code generated by qtc from "tags.qtpl". DO NOT EDIT. +// See https://github.com/valyala/quicktemplate for details. + +//line tags.qtpl:1 +package templates + +//line tags.qtpl:1 +import "git.gabrielgio.me/cerrado/pkg/git" + +//line tags.qtpl:3 +import ( + qtio422016 "io" + + qt422016 "github.com/valyala/quicktemplate" +) + +//line tags.qtpl:3 +var ( + _ = qtio422016.Copy + _ = qt422016.AcquireByteBuffer +) + +//line tags.qtpl:3 +func StreamListTags(qw422016 *qt422016.Writer, name string, tags []*git.TagReference) { +//line tags.qtpl:3 + qw422016.N().S(` +`) +//line tags.qtpl:4 + if len(tags) > 0 { +//line tags.qtpl:4 + qw422016.N().S(` +<div class="event-list"> + `) +//line tags.qtpl:6 + for _, t := range tags { +//line tags.qtpl:6 + qw422016.N().S(` + <div class="event me-md-2"> + <div class="row "> + <div class="col-4"> + <a title="`) +//line tags.qtpl:10 + qw422016.E().S(t.HashString()) +//line tags.qtpl:10 + qw422016.N().S(`" href="/`) +//line tags.qtpl:10 + qw422016.E().S(name) +//line tags.qtpl:10 + qw422016.N().S(`/commit/`) +//line tags.qtpl:10 + qw422016.E().S(t.HashString()) +//line tags.qtpl:10 + qw422016.N().S(`">`) +//line tags.qtpl:10 + qw422016.E().S(t.ShortName()) +//line tags.qtpl:10 + qw422016.N().S(`</a> + </div> + <div class="col-8"> + <div class="float-end"> + <a href="/`) +//line tags.qtpl:14 + qw422016.E().S(name) +//line tags.qtpl:14 + qw422016.N().S(`/archive/`) +//line tags.qtpl:14 + qw422016.E().S(t.ShortName()) +//line tags.qtpl:14 + qw422016.N().S(`.tar.gz">tar.gz</a> + <a href="/`) +//line tags.qtpl:15 + qw422016.E().S(name) +//line tags.qtpl:15 + qw422016.N().S(`/tree/`) +//line tags.qtpl:15 + qw422016.E().S(t.ShortName()) +//line tags.qtpl:15 + qw422016.N().S(`/">tree</a> + <a href="/`) +//line tags.qtpl:16 + qw422016.E().S(name) +//line tags.qtpl:16 + qw422016.N().S(`/log/`) +//line tags.qtpl:16 + qw422016.E().S(t.ShortName()) +//line tags.qtpl:16 + qw422016.N().S(`/">log</a> + </div> + </div> + </div> + `) +//line tags.qtpl:20 + if t.Message() != "" { +//line tags.qtpl:20 + qw422016.N().S(` + <div class="code-view"> + <pre>`) +//line tags.qtpl:22 + qw422016.E().S(t.Message()) +//line tags.qtpl:22 + qw422016.N().S(`</pre> + </div> + `) +//line tags.qtpl:24 + } +//line tags.qtpl:24 + qw422016.N().S(` + </div> + `) +//line tags.qtpl:26 + } +//line tags.qtpl:26 + qw422016.N().S(` +</div> +`) +//line tags.qtpl:28 + } else { +//line tags.qtpl:28 + qw422016.N().S(` + <p> No tags </p> +`) +//line tags.qtpl:30 + } +//line tags.qtpl:30 + qw422016.N().S(` +`) +//line tags.qtpl:31 +} + +//line tags.qtpl:31 +func WriteListTags(qq422016 qtio422016.Writer, name string, tags []*git.TagReference) { +//line tags.qtpl:31 + qw422016 := qt422016.AcquireWriter(qq422016) +//line tags.qtpl:31 + StreamListTags(qw422016, name, tags) +//line tags.qtpl:31 + qt422016.ReleaseWriter(qw422016) +//line tags.qtpl:31 +} + +//line tags.qtpl:31 +func ListTags(name string, tags []*git.TagReference) string { +//line tags.qtpl:31 + qb422016 := qt422016.AcquireByteBuffer() +//line tags.qtpl:31 + WriteListTags(qb422016, name, tags) +//line tags.qtpl:31 + qs422016 := string(qb422016.B) +//line tags.qtpl:31 + qt422016.ReleaseByteBuffer(qb422016) +//line tags.qtpl:31 + return qs422016 +//line tags.qtpl:31 +} |