diff options
author | Gabriel A. Giovanini <mail@gabrielgio.me> | 2024-06-01 19:59:43 +0200 |
---|---|---|
committer | Gabriel A. Giovanini <mail@gabrielgio.me> | 2024-06-01 19:59:43 +0200 |
commit | e3705f35c642e578625ce4574d189fa0b0869403 (patch) | |
tree | f63d779d4eb817ad6b5abed30f50ad3b85ffcab1 | |
parent | f1643ffcbd543cacfe9ab5e46eafdd0c39cd47fd (diff) | |
download | cerrado-e3705f35c642e578625ce4574d189fa0b0869403.tar.gz cerrado-e3705f35c642e578625ce4574d189fa0b0869403.tar.bz2 cerrado-e3705f35c642e578625ce4574d189fa0b0869403.zip |
feat: Add ref support
Now log and tree can be loaded using a given reference.
-rw-r--r-- | pkg/git/git.go | 82 | ||||
-rw-r--r-- | pkg/handler/git/handler.go | 33 | ||||
-rw-r--r-- | pkg/handler/router.go | 6 | ||||
-rw-r--r-- | pkg/service/git.go | 50 | ||||
-rw-r--r-- | templates/gititem.qtpl | 10 | ||||
-rw-r--r-- | templates/gititem.qtpl.go | 144 | ||||
-rw-r--r-- | templates/gititemabout.qtpl | 2 | ||||
-rw-r--r-- | templates/gititemabout.qtpl.go | 12 | ||||
-rw-r--r-- | templates/gititemlog.qtpl | 2 | ||||
-rw-r--r-- | templates/gititemlog.qtpl.go | 12 | ||||
-rw-r--r-- | templates/gititemrefs.qtpl | 4 | ||||
-rw-r--r-- | templates/gititemrefs.qtpl.go | 14 | ||||
-rw-r--r-- | templates/gititemsummary.qtpl | 2 | ||||
-rw-r--r-- | templates/gititemsummary.qtpl.go | 12 | ||||
-rw-r--r-- | templates/gititemtree.qtpl | 2 | ||||
-rw-r--r-- | templates/gititemtree.qtpl.go | 12 | ||||
-rw-r--r-- | templates/gitlist.qtpl | 8 | ||||
-rw-r--r-- | templates/gitlist.qtpl.go | 16 | ||||
-rw-r--r-- | templates/navbar.qtpl | 13 | ||||
-rw-r--r-- | templates/navbar.qtpl.go | 109 |
20 files changed, 330 insertions, 215 deletions
diff --git a/pkg/git/git.go b/pkg/git/git.go index 7ef23f7..ce72465 100644 --- a/pkg/git/git.go +++ b/pkg/git/git.go @@ -13,19 +13,50 @@ import ( var () var ( - MissingHeadErr = errors.New("Head not found") + MissingRefErr = errors.New("Reference not found") ) type ( GitRepository struct { - path string + path string + repository *git.Repository + + ref plumbing.Hash + // this is setRef when ref is setRef + setRef bool } ) -func NewGitRepository(dir string) *GitRepository { - return &GitRepository{ +func OpenRepository(dir string) (*GitRepository, error) { + g := &GitRepository{ path: dir, } + + repo, err := git.PlainOpen(dir) + if err != nil { + return nil, err + } + g.repository = repo + + return g, nil +} + +func (g *GitRepository) SetRef(ref string) error { + if ref == "" { + head, err := g.repository.Head() + if err != nil { + return errors.Join(MissingRefErr, err) + } + g.ref = head.Hash() + } else { + hash, err := g.repository.ResolveRevision(plumbing.Revision(ref)) + if err != nil { + return errors.Join(MissingRefErr, err) + } + g.ref = *hash + } + g.setRef = true + return nil } func (g *GitRepository) Path() string { @@ -33,17 +64,12 @@ func (g *GitRepository) Path() string { } func (g *GitRepository) LastCommit() (*object.Commit, error) { - repo, err := git.PlainOpen(g.path) + err := g.validateRef() if err != nil { return nil, err } - ref, err := repo.Head() - if err != nil { - return nil, errors.Join(MissingHeadErr, err) - } - - c, err := repo.CommitObject(ref.Hash()) + c, err := g.repository.CommitObject(g.ref) if err != nil { return nil, err } @@ -51,17 +77,12 @@ func (g *GitRepository) LastCommit() (*object.Commit, error) { } func (g *GitRepository) Commits() ([]*object.Commit, error) { - repo, err := git.PlainOpen(g.path) + err := g.validateRef() if err != nil { return nil, err } - ref, err := repo.Head() - if err != nil { - return nil, errors.Join(MissingHeadErr, err) - } - - ci, err := repo.Log(&git.LogOptions{From: ref.Hash()}) + ci, err := g.repository.Log(&git.LogOptions{From: g.ref}) if err != nil { return nil, fmt.Errorf("commits from ref: %w", err) } @@ -84,13 +105,12 @@ func (g *GitRepository) Commits() ([]*object.Commit, error) { return commits, nil } -func (g *GitRepository) Tags() ([]*object.Tag, error) { - repo, err := git.PlainOpen(g.path) - if err != nil { - return nil, err - } +func (g *GitRepository) Head() (*plumbing.Reference, error) { + return g.repository.Head() +} - ti, err := repo.TagObjects() +func (g *GitRepository) Tags() ([]*object.Tag, error) { + ti, err := g.repository.TagObjects() if err != nil { return nil, err } @@ -108,12 +128,7 @@ func (g *GitRepository) Tags() ([]*object.Tag, error) { } func (g *GitRepository) Branches() ([]*plumbing.Reference, error) { - repo, err := git.PlainOpen(g.path) - if err != nil { - return nil, err - } - - bs, err := repo.Branches() + bs, err := g.repository.Branches() if err != nil { return nil, err } @@ -129,3 +144,10 @@ func (g *GitRepository) Branches() ([]*plumbing.Reference, error) { return branches, nil } + +func (g *GitRepository) validateRef() error { + if !g.setRef { + return g.SetRef("") + } + return nil +} diff --git a/pkg/handler/git/handler.go b/pkg/handler/git/handler.go index d090f22..b77bcfc 100644 --- a/pkg/handler/git/handler.go +++ b/pkg/handler/git/handler.go @@ -18,9 +18,10 @@ type ( gitService interface { ListRepositories() ([]*service.Repository, error) - ListCommits(string) ([]*object.Commit, error) - ListTags(string) ([]*object.Tag, error) - ListBranches(string) ([]*plumbing.Reference, error) + ListCommits(name string, ref string) ([]*object.Commit, error) + GetHead(name string) (*plumbing.Reference, error) + ListTags(name string) ([]*object.Tag, error) + ListBranches(name string) ([]*plumbing.Reference, error) } ) @@ -43,8 +44,15 @@ func (g *GitHandler) List(w http.ResponseWriter, _ *http.Request) { func (g *GitHandler) Summary(w http.ResponseWriter, r *http.Request) { name := mux.Vars(r)["name"] + ref, err := g.gitService.GetHead(name) + if err != nil { + slog.Error("Error loading head", "error", err) + return + } + gitList := &templates.GitItemPage{ Name: name, + Ref: ref.Name().Short(), GitItemBase: &templates.GitItemSummaryPage{}, } templates.WritePageTemplate(w, gitList) @@ -52,8 +60,14 @@ func (g *GitHandler) Summary(w http.ResponseWriter, r *http.Request) { func (g *GitHandler) About(w http.ResponseWriter, r *http.Request) { name := mux.Vars(r)["name"] + ref, err := g.gitService.GetHead(name) + if err != nil { + slog.Error("Error loading head", "error", err) + return + } gitList := &templates.GitItemPage{ Name: name, + Ref: ref.Name().Short(), GitItemBase: &templates.GitItemAboutPage{}, } templates.WritePageTemplate(w, gitList) @@ -74,8 +88,15 @@ func (g *GitHandler) Refs(w http.ResponseWriter, r *http.Request) { return } + ref, err := g.gitService.GetHead(name) + if err != nil { + slog.Error("Error loading head", "error", err) + return + } + gitList := &templates.GitItemPage{ Name: name, + Ref: ref.Name().Short(), GitItemBase: &templates.GitItemRefsPage{ Tags: tags, Branches: branches, @@ -86,8 +107,10 @@ func (g *GitHandler) Refs(w http.ResponseWriter, r *http.Request) { func (g *GitHandler) Tree(w http.ResponseWriter, r *http.Request) { name := mux.Vars(r)["name"] + ref := mux.Vars(r)["ref"] gitList := &templates.GitItemPage{ Name: name, + Ref: ref, GitItemBase: &templates.GitItemTreePage{}, } templates.WritePageTemplate(w, gitList) @@ -95,8 +118,9 @@ func (g *GitHandler) Tree(w http.ResponseWriter, r *http.Request) { func (g *GitHandler) Log(w http.ResponseWriter, r *http.Request) { name := mux.Vars(r)["name"] + ref := mux.Vars(r)["ref"] - commits, err := g.gitService.ListCommits(name) + commits, err := g.gitService.ListCommits(name, ref) if err != nil { slog.Error("Error loading commits", "error", err) return @@ -104,6 +128,7 @@ func (g *GitHandler) Log(w http.ResponseWriter, r *http.Request) { gitList := &templates.GitItemPage{ Name: name, + Ref: ref, GitItemBase: &templates.GitItemLogPage{ Commits: commits, }, diff --git a/pkg/handler/router.go b/pkg/handler/router.go index f73e9fb..79f70f1 100644 --- a/pkg/handler/router.go +++ b/pkg/handler/router.go @@ -34,10 +34,10 @@ func MountHandler( mux.PathPrefix("/static").Handler(staticHandler) mux.HandleFunc("/{name}/about", gitHandler.About) - mux.HandleFunc("/{name}/summary", gitHandler.Summary) + mux.HandleFunc("/{name}", gitHandler.Summary) mux.HandleFunc("/{name}/refs", gitHandler.Refs) - mux.HandleFunc("/{name}/tree", gitHandler.Tree) - mux.HandleFunc("/{name}/log", gitHandler.Log) + mux.HandleFunc("/{name}/tree/{ref}", gitHandler.Tree) + mux.HandleFunc("/{name}/log/{ref}", gitHandler.Log) mux.HandleFunc("/config", configHander) mux.HandleFunc("/about", aboutHandler.About) mux.HandleFunc("/", gitHandler.List) diff --git a/pkg/service/git.go b/pkg/service/git.go index 57b9b6e..9bf11f4 100644 --- a/pkg/service/git.go +++ b/pkg/service/git.go @@ -15,6 +15,7 @@ type ( Title string LastCommitMessage string LastCommitDate string + Ref string } GitService struct { @@ -41,29 +42,50 @@ func (g *GitService) ListRepositories() ([]*Repository, error) { repos := make([]*Repository, len(rs)) for i, r := range rs { - repo := git.NewGitRepository(r.Path) + repo, err := git.OpenRepository(r.Path) + if err != nil { + return nil, err + } + if err != nil { + return nil, err + } + obj, err := repo.LastCommit() if err != nil { return nil, err } + head, err := repo.Head() + if err != nil { + return nil, err + } + baseName := path.Base(r.Path) repos[i] = &Repository{ Name: baseName, Title: baseName, LastCommitMessage: obj.Message, LastCommitDate: obj.Author.When.Format(timeFormat), + Ref: head.Name().Short(), } } return repos, nil } -func (g *GitService) ListCommits(name string) ([]*object.Commit, error) { +func (g *GitService) ListCommits(name, ref string) ([]*object.Commit, error) { // TODO: handle nil r := g.configRepo.GetByName(name) - repo := git.NewGitRepository(r.Path) + repo, err := git.OpenRepository(r.Path) + if err != nil { + return nil, err + } + + err = repo.SetRef(ref) + if err != nil { + return nil, err + } return repo.Commits() } @@ -71,7 +93,10 @@ func (g *GitService) ListTags(name string) ([]*object.Tag, error) { // TODO: handle nil r := g.configRepo.GetByName(name) - repo := git.NewGitRepository(r.Path) + repo, err := git.OpenRepository(r.Path) + if err != nil { + return nil, err + } return repo.Tags() } @@ -79,6 +104,21 @@ func (g *GitService) ListBranches(name string) ([]*plumbing.Reference, error) { // TODO: handle nil r := g.configRepo.GetByName(name) - repo := git.NewGitRepository(r.Path) + repo, err := git.OpenRepository(r.Path) + if err != nil { + return nil, err + } return repo.Branches() } + +func (g *GitService) GetHead(name string) (*plumbing.Reference, error) { + // TODO: handle nil + r := g.configRepo.GetByName(name) + + repo, err := git.OpenRepository(r.Path) + if err != nil { + return nil, err + } + + return repo.Head() +} diff --git a/templates/gititem.qtpl b/templates/gititem.qtpl index d2fcea7..3e2dd4e 100644 --- a/templates/gititem.qtpl +++ b/templates/gititem.qtpl @@ -1,6 +1,6 @@ {% interface GitItemBase { - Nav(name string) + Nav(name, ref string) GitContent() } %} @@ -8,6 +8,7 @@ GitItemBase { {% code type GitItemPage struct { Name string + Ref string GitItemBase } %} @@ -17,12 +18,7 @@ type GitItemPage struct { {% func (p *GitItemPage) Navbar() %}{%= Navbar(Git) %}{% endfunc %} {% func (p *GitItemPage) Content() %} -<div class="row"> - <h3>{%s p.Name %}</h3> -</div> -<div class="row"> -{%= p.Nav(p.Name) %} -</div> +{%= p.Nav(p.Name, p.Ref) %} <div class="container"> {%= p.GitContent() %} </div> diff --git a/templates/gititem.qtpl.go b/templates/gititem.qtpl.go index 9709a43..2c46104 100644 --- a/templates/gititem.qtpl.go +++ b/templates/gititem.qtpl.go @@ -20,11 +20,11 @@ var ( //line gititem.qtpl:2 type GitItemBase interface { //line gititem.qtpl:2 - Nav(name string) string + Nav(name, ref string) string //line gititem.qtpl:2 - StreamNav(qw422016 *qt422016.Writer, name string) + StreamNav(qw422016 *qt422016.Writer, name, ref string) //line gititem.qtpl:2 - WriteNav(qq422016 qtio422016.Writer, name string) + WriteNav(qq422016 qtio422016.Writer, name, ref string) //line gititem.qtpl:2 GitContent() string //line gititem.qtpl:2 @@ -37,160 +37,152 @@ type GitItemBase interface { //line gititem.qtpl:9 type GitItemPage struct { Name string + Ref string GitItemBase } -//line gititem.qtpl:15 +//line gititem.qtpl:16 func (p *GitItemPage) StreamTitle(qw422016 *qt422016.Writer) { -//line gititem.qtpl:15 +//line gititem.qtpl:16 qw422016.N().S(`Git | List`) -//line gititem.qtpl:15 +//line gititem.qtpl:16 } -//line gititem.qtpl:15 +//line gititem.qtpl:16 func (p *GitItemPage) WriteTitle(qq422016 qtio422016.Writer) { -//line gititem.qtpl:15 +//line gititem.qtpl:16 qw422016 := qt422016.AcquireWriter(qq422016) -//line gititem.qtpl:15 +//line gititem.qtpl:16 p.StreamTitle(qw422016) -//line gititem.qtpl:15 +//line gititem.qtpl:16 qt422016.ReleaseWriter(qw422016) -//line gititem.qtpl:15 +//line gititem.qtpl:16 } -//line gititem.qtpl:15 +//line gititem.qtpl:16 func (p *GitItemPage) Title() string { -//line gititem.qtpl:15 +//line gititem.qtpl:16 qb422016 := qt422016.AcquireByteBuffer() -//line gititem.qtpl:15 +//line gititem.qtpl:16 p.WriteTitle(qb422016) -//line gititem.qtpl:15 +//line gititem.qtpl:16 qs422016 := string(qb422016.B) -//line gititem.qtpl:15 +//line gititem.qtpl:16 qt422016.ReleaseByteBuffer(qb422016) -//line gititem.qtpl:15 +//line gititem.qtpl:16 return qs422016 -//line gititem.qtpl:15 +//line gititem.qtpl:16 } -//line gititem.qtpl:17 +//line gititem.qtpl:18 func (p *GitItemPage) StreamNavbar(qw422016 *qt422016.Writer) { -//line gititem.qtpl:17 +//line gititem.qtpl:18 StreamNavbar(qw422016, Git) -//line gititem.qtpl:17 +//line gititem.qtpl:18 } -//line gititem.qtpl:17 +//line gititem.qtpl:18 func (p *GitItemPage) WriteNavbar(qq422016 qtio422016.Writer) { -//line gititem.qtpl:17 +//line gititem.qtpl:18 qw422016 := qt422016.AcquireWriter(qq422016) -//line gititem.qtpl:17 +//line gititem.qtpl:18 p.StreamNavbar(qw422016) -//line gititem.qtpl:17 +//line gititem.qtpl:18 qt422016.ReleaseWriter(qw422016) -//line gititem.qtpl:17 +//line gititem.qtpl:18 } -//line gititem.qtpl:17 +//line gititem.qtpl:18 func (p *GitItemPage) Navbar() string { -//line gititem.qtpl:17 +//line gititem.qtpl:18 qb422016 := qt422016.AcquireByteBuffer() -//line gititem.qtpl:17 +//line gititem.qtpl:18 p.WriteNavbar(qb422016) -//line gititem.qtpl:17 +//line gititem.qtpl:18 qs422016 := string(qb422016.B) -//line gititem.qtpl:17 +//line gititem.qtpl:18 qt422016.ReleaseByteBuffer(qb422016) -//line gititem.qtpl:17 +//line gititem.qtpl:18 return qs422016 -//line gititem.qtpl:17 +//line gititem.qtpl:18 } -//line gititem.qtpl:19 +//line gititem.qtpl:20 func (p *GitItemPage) StreamContent(qw422016 *qt422016.Writer) { -//line gititem.qtpl:19 +//line gititem.qtpl:20 qw422016.N().S(` -<div class="row"> - <h3>`) +`) //line gititem.qtpl:21 - qw422016.E().S(p.Name) + p.StreamNav(qw422016, p.Name, p.Ref) //line gititem.qtpl:21 - qw422016.N().S(`</h3> -</div> -<div class="row"> -`) -//line gititem.qtpl:24 - p.StreamNav(qw422016, p.Name) -//line gititem.qtpl:24 qw422016.N().S(` -</div> <div class="container"> `) -//line gititem.qtpl:27 +//line gititem.qtpl:23 p.StreamGitContent(qw422016) -//line gititem.qtpl:27 +//line gititem.qtpl:23 qw422016.N().S(` </div> `) -//line gititem.qtpl:29 +//line gititem.qtpl:25 } -//line gititem.qtpl:29 +//line gititem.qtpl:25 func (p *GitItemPage) WriteContent(qq422016 qtio422016.Writer) { -//line gititem.qtpl:29 +//line gititem.qtpl:25 qw422016 := qt422016.AcquireWriter(qq422016) -//line gititem.qtpl:29 +//line gititem.qtpl:25 p.StreamContent(qw422016) -//line gititem.qtpl:29 +//line gititem.qtpl:25 qt422016.ReleaseWriter(qw422016) -//line gititem.qtpl:29 +//line gititem.qtpl:25 } -//line gititem.qtpl:29 +//line gititem.qtpl:25 func (p *GitItemPage) Content() string { -//line gititem.qtpl:29 +//line gititem.qtpl:25 qb422016 := qt422016.AcquireByteBuffer() -//line gititem.qtpl:29 +//line gititem.qtpl:25 p.WriteContent(qb422016) -//line gititem.qtpl:29 +//line gititem.qtpl:25 qs422016 := string(qb422016.B) -//line gititem.qtpl:29 +//line gititem.qtpl:25 qt422016.ReleaseByteBuffer(qb422016) -//line gititem.qtpl:29 +//line gititem.qtpl:25 return qs422016 -//line gititem.qtpl:29 +//line gititem.qtpl:25 } -//line gititem.qtpl:31 +//line gititem.qtpl:27 func (p *GitItemPage) StreamScript(qw422016 *qt422016.Writer) { -//line gititem.qtpl:31 +//line gititem.qtpl:27 qw422016.N().S(` `) -//line gititem.qtpl:32 +//line gititem.qtpl:28 } -//line gititem.qtpl:32 +//line gititem.qtpl:28 func (p *GitItemPage) WriteScript(qq422016 qtio422016.Writer) { -//line gititem.qtpl:32 +//line gititem.qtpl:28 qw422016 := qt422016.AcquireWriter(qq422016) -//line gititem.qtpl:32 +//line gititem.qtpl:28 p.StreamScript(qw422016) -//line gititem.qtpl:32 +//line gititem.qtpl:28 qt422016.ReleaseWriter(qw422016) -//line gititem.qtpl:32 +//line gititem.qtpl:28 } -//line gititem.qtpl:32 +//line gititem.qtpl:28 func (p *GitItemPage) Script() string { -//line gititem.qtpl:32 +//line gititem.qtpl:28 qb422016 := qt422016.AcquireByteBuffer() -//line gititem.qtpl:32 +//line gititem.qtpl:28 p.WriteScript(qb422016) -//line gititem.qtpl:32 +//line gititem.qtpl:28 qs422016 := string(qb422016.B) -//line gititem.qtpl:32 +//line gititem.qtpl:28 qt422016.ReleaseByteBuffer(qb422016) -//line gititem.qtpl:32 +//line gititem.qtpl:28 return qs422016 -//line gititem.qtpl:32 +//line gititem.qtpl:28 } diff --git a/templates/gititemabout.qtpl b/templates/gititemabout.qtpl index 67d43f1..e0fa9c3 100644 --- a/templates/gititemabout.qtpl +++ b/templates/gititemabout.qtpl @@ -3,7 +3,7 @@ type GitItemAboutPage struct { } %} -{% func (g *GitItemAboutPage) Nav(name string) %}{%= GitItemNav(name, Readme) %}{% endfunc %} +{% func (g *GitItemAboutPage) Nav(name, ref string) %}{%= GitItemNav(name, ref, Readme) %}{% endfunc %} {% func (g *GitItemAboutPage) GitContent() %} <h4>About</h4> diff --git a/templates/gititemabout.qtpl.go b/templates/gititemabout.qtpl.go index 7b772e5..0827fbe 100644 --- a/templates/gititemabout.qtpl.go +++ b/templates/gititemabout.qtpl.go @@ -22,29 +22,29 @@ type GitItemAboutPage struct { } //line gititemabout.qtpl:6 -func (g *GitItemAboutPage) StreamNav(qw422016 *qt422016.Writer, name string) { +func (g *GitItemAboutPage) StreamNav(qw422016 *qt422016.Writer, name, ref string) { //line gititemabout.qtpl:6 - StreamGitItemNav(qw422016, name, Readme) + StreamGitItemNav(qw422016, name, ref, Readme) //line gititemabout.qtpl:6 } //line gititemabout.qtpl:6 -func (g *GitItemAboutPage) WriteNav(qq422016 qtio422016.Writer, name string) { +func (g *GitItemAboutPage) WriteNav(qq422016 qtio422016.Writer, name, ref string) { //line gititemabout.qtpl:6 qw422016 := qt422016.AcquireWriter(qq422016) //line gititemabout.qtpl:6 - g.StreamNav(qw422016, name) + g.StreamNav(qw422016, name, ref) //line gititemabout.qtpl:6 qt422016.ReleaseWriter(qw422016) //line gititemabout.qtpl:6 } //line gititemabout.qtpl:6 -func (g *GitItemAboutPage) Nav(name string) string { +func (g *GitItemAboutPage) Nav(name, ref string) string { //line gititemabout.qtpl:6 qb422016 := qt422016.AcquireByteBuffer() //line gititemabout.qtpl:6 - g.WriteNav(qb422016, name) + g.WriteNav(qb422016, name, ref) //line gititemabout.qtpl:6 qs422016 := string(qb422016.B) //line gititemabout.qtpl:6 diff --git a/templates/gititemlog.qtpl b/templates/gititemlog.qtpl index 436c1d2..e037c52 100644 --- a/templates/gititemlog.qtpl +++ b/templates/gititemlog.qtpl @@ -6,7 +6,7 @@ type GitItemLogPage struct { } %} -{% func (g *GitItemLogPage) Nav(name string) %}{%= GitItemNav(name, Log) %}{% endfunc %} +{% func (g *GitItemLogPage) Nav(name, ref string) %}{%= GitItemNav(name, ref, Log) %}{% endfunc %} {% func (g *GitItemLogPage) GitContent() %} <div class="logs"> diff --git a/templates/gititemlog.qtpl.go b/templates/gititemlog.qtpl.go index e63c871..47e700d 100644 --- a/templates/gititemlog.qtpl.go +++ b/templates/gititemlog.qtpl.go @@ -26,29 +26,29 @@ type GitItemLogPage struct { } //line gititemlog.qtpl:9 -func (g *GitItemLogPage) StreamNav(qw422016 *qt422016.Writer, name string) { +func (g *GitItemLogPage) StreamNav(qw422016 *qt422016.Writer, name, ref string) { //line gititemlog.qtpl:9 - StreamGitItemNav(qw422016, name, Log) + StreamGitItemNav(qw422016, name, ref, Log) //line gititemlog.qtpl:9 } //line gititemlog.qtpl:9 -func (g *GitItemLogPage) WriteNav(qq422016 qtio422016.Writer, name string) { +func (g *GitItemLogPage) WriteNav(qq422016 qtio422016.Writer, name, ref string) { //line gititemlog.qtpl:9 qw422016 := qt422016.AcquireWriter(qq422016) //line gititemlog.qtpl:9 - g.StreamNav(qw422016, name) + g.StreamNav(qw422016, name, ref) //line gititemlog.qtpl:9 qt422016.ReleaseWriter(qw422016) //line gititemlog.qtpl:9 } //line gititemlog.qtpl:9 -func (g *GitItemLogPage) Nav(name string) string { +func (g *GitItemLogPage) Nav(name, ref string) string { //line gititemlog.qtpl:9 qb422016 := qt422016.AcquireByteBuffer() //line gititemlog.qtpl:9 - g.WriteNav(qb422016, name) + g.WriteNav(qb422016, name, ref) //line gititemlog.qtpl:9 qs422016 := string(qb422016.B) //line gititemlog.qtpl:9 diff --git a/templates/gititemrefs.qtpl b/templates/gititemrefs.qtpl index 9c58863..56f6c2b 100644 --- a/templates/gititemrefs.qtpl +++ b/templates/gititemrefs.qtpl @@ -8,7 +8,7 @@ type GitItemRefsPage struct { } %} -{% func (g *GitItemRefsPage) Nav(name string) %}{%= GitItemNav(name ,Refs) %}{% endfunc %} +{% func (g *GitItemRefsPage) Nav(name, ref string) %}{%= GitItemNav(name, ref, Refs) %}{% endfunc %} {% func (g *GitItemRefsPage) GitContent() %} <div class="row"> @@ -36,7 +36,7 @@ type GitItemRefsPage struct { {% for _, b := range g.Branches %} <div class="row"> <div class="col-xxl"> - {%s b.String() %} + {%s b.Name().Short() %} </div> </div> {% endfor %} diff --git a/templates/gititemrefs.qtpl.go b/templates/gititemrefs.qtpl.go index f2d2b6f..d2a362e 100644 --- a/templates/gititemrefs.qtpl.go +++ b/templates/gititemrefs.qtpl.go @@ -30,29 +30,29 @@ type GitItemRefsPage struct { } //line gititemrefs.qtpl:11 -func (g *GitItemRefsPage) StreamNav(qw422016 *qt422016.Writer, name string) { +func (g *GitItemRefsPage) StreamNav(qw422016 *qt422016.Writer, name, ref string) { //line gititemrefs.qtpl:11 - StreamGitItemNav(qw422016, name, Refs) + StreamGitItemNav(qw422016, name, ref, Refs) //line gititemrefs.qtpl:11 } //line gititemrefs.qtpl:11 -func (g *GitItemRefsPage) WriteNav(qq422016 qtio422016.Writer, name string) { +func (g *GitItemRefsPage) WriteNav(qq422016 qtio422016.Writer, name, ref string) { //line gititemrefs.qtpl:11 qw422016 := qt422016.AcquireWriter(qq422016) //line gititemrefs.qtpl:11 - g.StreamNav(qw422016, name) + g.StreamNav(qw422016, name, ref) //line gititemrefs.qtpl:11 qt422016.ReleaseWriter(qw422016) //line gititemrefs.qtpl:11 } //line gititemrefs.qtpl:11 -func (g *GitItemRefsPage) Nav(name string) string { +func (g *GitItemRefsPage) Nav(name, ref string) string { //line gititemrefs.qtpl:11 qb422016 := qt422016.AcquireByteBuffer() //line gititemrefs.qtpl:11 - g.WriteNav(qb422016, name) + g.WriteNav(qb422016, name, ref) //line gititemrefs.qtpl:11 qs422016 := string(qb422016.B) //line gititemrefs.qtpl:11 @@ -117,7 +117,7 @@ func (g *GitItemRefsPage) StreamGitContent(qw422016 *qt422016.Writer) { <div class="col-xxl"> `) //line gititemrefs.qtpl:39 - qw422016.E().S(b.String()) + qw422016.E().S(b.Name().Short()) //line gititemrefs.qtpl:39 qw422016.N().S(` </div> diff --git a/templates/gititemsummary.qtpl b/templates/gititemsummary.qtpl index f4b0dd6..5756ea5 100644 --- a/templates/gititemsummary.qtpl +++ b/templates/gititemsummary.qtpl @@ -3,7 +3,7 @@ type GitItemSummaryPage struct { } %} -{% func (g *GitItemSummaryPage) Nav(name string) %}{%= GitItemNav(name, Summary) %}{% endfunc %} +{% func (g *GitItemSummaryPage) Nav(name, ref string) %}{%= GitItemNav(name, ref, Summary) %}{% endfunc %} {% func (g *GitItemSummaryPage) GitContent() %} <h4>Summary</h4> diff --git a/templates/gititemsummary.qtpl.go b/templates/gititemsummary.qtpl.go index aa41a17..99cb984 100644 --- a/templates/gititemsummary.qtpl.go +++ b/templates/gititemsummary.qtpl.go @@ -22,29 +22,29 @@ type GitItemSummaryPage struct { } //line gititemsummary.qtpl:6 -func (g *GitItemSummaryPage) StreamNav(qw422016 *qt422016.Writer, name string) { +func (g *GitItemSummaryPage) StreamNav(qw422016 *qt422016.Writer, name, ref string) { //line gititemsummary.qtpl:6 - StreamGitItemNav(qw422016, name, Summary) + StreamGitItemNav(qw422016, name, ref, Summary) //line gititemsummary.qtpl:6 } //line gititemsummary.qtpl:6 -func (g *GitItemSummaryPage) WriteNav(qq422016 qtio422016.Writer, name string) { +func (g *GitItemSummaryPage) WriteNav(qq422016 qtio422016.Writer, name, ref string) { //line gititemsummary.qtpl:6 qw422016 := qt422016.AcquireWriter(qq422016) //line gititemsummary.qtpl:6 - g.StreamNav(qw422016, name) + g.StreamNav(qw422016, name, ref) //line gititemsummary.qtpl:6 qt422016.ReleaseWriter(qw422016) //line gititemsummary.qtpl:6 } //line gititemsummary.qtpl:6 -func (g *GitItemSummaryPage) Nav(name string) string { +func (g *GitItemSummaryPage) Nav(name, ref string) string { //line gititemsummary.qtpl:6 qb422016 := qt422016.AcquireByteBuffer() //line gititemsummary.qtpl:6 - g.WriteNav(qb422016, name) + g.WriteNav(qb422016, name, ref) //line gititemsummary.qtpl:6 qs422016 := string(qb422016.B) //line gititemsummary.qtpl:6 diff --git a/templates/gititemtree.qtpl b/templates/gititemtree.qtpl index 778cc00..5ace7b0 100644 --- a/templates/gititemtree.qtpl +++ b/templates/gititemtree.qtpl @@ -3,7 +3,7 @@ type GitItemTreePage struct { } %} -{% func (g *GitItemTreePage) Nav(name string) %}{%= GitItemNav(name, Tree) %}{% endfunc %} +{% func (g *GitItemTreePage) Nav(name, ref string) %}{%= GitItemNav(name, ref, Tree) %}{% endfunc %} {% func (g *GitItemTreePage) GitContent() %} <h4>Tree</h4> diff --git a/templates/gititemtree.qtpl.go b/templates/gititemtree.qtpl.go index 04861d1..d8beb0e 100644 --- a/templates/gititemtree.qtpl.go +++ b/templates/gititemtree.qtpl.go @@ -22,29 +22,29 @@ type GitItemTreePage struct { } //line gititemtree.qtpl:6 -func (g *GitItemTreePage) StreamNav(qw422016 *qt422016.Writer, name string) { +func (g *GitItemTreePage) StreamNav(qw422016 *qt422016.Writer, name, ref string) { //line gititemtree.qtpl:6 - StreamGitItemNav(qw422016, name, Tree) + StreamGitItemNav(qw422016, name, ref, Tree) //line gititemtree.qtpl:6 } //line gititemtree.qtpl:6 -func (g *GitItemTreePage) WriteNav(qq422016 qtio422016.Writer, name string) { +func (g *GitItemTreePage) WriteNav(qq422016 qtio422016.Writer, name, ref string) { //line gititemtree.qtpl:6 qw422016 := qt422016.AcquireWriter(qq422016) //line gititemtree.qtpl:6 - g.StreamNav(qw422016, name) + g.StreamNav(qw422016, name, ref) //line gititemtree.qtpl:6 qt422016.ReleaseWriter(qw422016) //line gititemtree.qtpl:6 } //line gititemtree.qtpl:6 -func (g *GitItemTreePage) Nav(name string) string { +func (g *GitItemTreePage) Nav(name, ref string) string { //line gititemtree.qtpl:6 qb422016 := qt422016.AcquireByteBuffer() //line gititemtree.qtpl:6 - g.WriteNav(qb422016, name) + g.WriteNav(qb422016, name, ref) //line gititemtree.qtpl:6 qs422016 := string(qb422016.B) //line gititemtree.qtpl:6 diff --git a/templates/gitlist.qtpl b/templates/gitlist.qtpl index b7beca5..3d7ef82 100644 --- a/templates/gitlist.qtpl +++ b/templates/gitlist.qtpl @@ -17,15 +17,15 @@ type GitListPage struct { {% for _, r := range p.Respositories %} <div class="event"> <h4> - <a href="/{%s r.Name %}/summary">{%s r.Name %}</a> + <a href="/{%s r.Name %}">{%s r.Name %}</a> </h4> </hr> <p>{%s r.LastCommitMessage %}</p> <p><small>{%s r.LastCommitDate %}</small></p> <p> - <a href="/{%s r.Name %}/summary">summary</a> - <a href="/{%s r.Name %}/log">log</a> - <a href="/{%s r.Name %}/tree">tree</a> + <a href="/{%s r.Name %}/log/{%s r.Ref %}">log</a> + <a href="/{%s r.Name %}/tree/{%s r.Ref %}">tree</a> + <a href="/{%s r.Name %}/refs">refs</a> </p> </div> {% endfor %} diff --git a/templates/gitlist.qtpl.go b/templates/gitlist.qtpl.go index 73f887a..d9f7ec1 100644 --- a/templates/gitlist.qtpl.go +++ b/templates/gitlist.qtpl.go @@ -109,7 +109,7 @@ func (p *GitListPage) StreamContent(qw422016 *qt422016.Writer) { //line gitlist.qtpl:20 qw422016.E().S(r.Name) //line gitlist.qtpl:20 - qw422016.N().S(`/summary">`) + qw422016.N().S(`">`) //line gitlist.qtpl:20 qw422016.E().S(r.Name) //line gitlist.qtpl:20 @@ -131,17 +131,25 @@ func (p *GitListPage) StreamContent(qw422016 *qt422016.Writer) { //line gitlist.qtpl:26 qw422016.E().S(r.Name) //line gitlist.qtpl:26 - qw422016.N().S(`/summary">summary</a> + qw422016.N().S(`/log/`) +//line gitlist.qtpl:26 + qw422016.E().S(r.Ref) +//line gitlist.qtpl:26 + qw422016.N().S(`">log</a> <a href="/`) //line gitlist.qtpl:27 qw422016.E().S(r.Name) //line gitlist.qtpl:27 - qw422016.N().S(`/log">log</a> + qw422016.N().S(`/tree/`) +//line gitlist.qtpl:27 + qw422016.E().S(r.Ref) +//line gitlist.qtpl:27 + qw422016.N().S(`">tree</a> <a href="/`) //line gitlist.qtpl:28 qw422016.E().S(r.Name) //line gitlist.qtpl:28 - qw422016.N().S(`/tree">tree</a> + qw422016.N().S(`/refs">refs</a> </p> </div> `) diff --git a/templates/navbar.qtpl b/templates/navbar.qtpl index 8b0799d..775f496 100644 --- a/templates/navbar.qtpl +++ b/templates/navbar.qtpl @@ -32,22 +32,27 @@ const ( </nav> {% endfunc %} -{% func GitItemNav (name string, s GitSelection) %} +{% func GitItemNav (name, ref string, s GitSelection) %} +<div class="row"> + <h3>{%s name %} {% if ref != "" && (s == Log || s == Tree) %}@ {%s ref %}{% endif %}</h3> +</div> +<div class="row"> <ul class="nav"> <li class="nav-item"> <a class="nav-link{%= insertIfEqual(s, Readme) %}" aria-current="page" href="/{%s name %}/about">about</a> </li> <li class="nav-item"> - <a class="nav-link{%= insertIfEqual(s, Log) %}" aria-current="page" href="/{%s name %}/log">log</a> + <a class="nav-link{%= insertIfEqual(s, Log) %}" aria-current="page" href="/{%s name %}/log/{%s ref %}">log</a> </li> <li class="nav-item"> - <a class="nav-link{%= insertIfEqual(s, Summary) %}" aria-current="page" href="/{%s name %}/summary">summary</a> + <a class="nav-link{%= insertIfEqual(s, Summary) %}" aria-current="page" href="/{%s name %}">summary</a> </li> <li class="nav-item"> <a class="nav-link{%= insertIfEqual(s, Refs) %}" aria-current="page" href="/{%s name %}/refs">refs</a> </li> <li class="nav-item"> - <a class="nav-link{%= insertIfEqual(s, Tree) %}" aria-current="page" href="/{%s name %}/tree">tree</a> + <a class="nav-link{%= insertIfEqual(s, Tree) %}" aria-current="page" href="/{%s name %}/tree/{%s ref %}">tree</a> </li> </ul> +</div> {% endfunc %} diff --git a/templates/navbar.qtpl.go b/templates/navbar.qtpl.go index acf21b4..cddc6a6 100644 --- a/templates/navbar.qtpl.go +++ b/templates/navbar.qtpl.go @@ -134,92 +134,119 @@ func Navbar(s Selection) string { } //line navbar.qtpl:35 -func StreamGitItemNav(qw422016 *qt422016.Writer, name string, s GitSelection) { +func StreamGitItemNav(qw422016 *qt422016.Writer, name, ref string, s GitSelection) { //line navbar.qtpl:35 qw422016.N().S(` +<div class="row"> + <h3>`) +//line navbar.qtpl:37 + qw422016.E().S(name) +//line navbar.qtpl:37 + qw422016.N().S(` `) +//line navbar.qtpl:37 + if ref != "" && (s == Log || s == Tree) { +//line navbar.qtpl:37 + qw422016.N().S(`@ `) +//line navbar.qtpl:37 + qw422016.E().S(ref) +//line navbar.qtpl:37 + } +//line navbar.qtpl:37 + qw422016.N().S(`</h3> +</div> +<div class="row"> <ul class="nav"> <li class="nav-item"> <a class="nav-link`) -//line navbar.qtpl:38 +//line navbar.qtpl:42 streaminsertIfEqual(qw422016, s, Readme) -//line navbar.qtpl:38 +//line navbar.qtpl:42 qw422016.N().S(`" aria-current="page" href="/`) -//line navbar.qtpl:38 +//line navbar.qtpl:42 qw422016.E().S(name) -//line navbar.qtpl:38 +//line navbar.qtpl:42 qw422016.N().S(`/about">about</a> </li> <li class="nav-item"> <a class="nav-link`) -//line navbar.qtpl:41 +//line navbar.qtpl:45 streaminsertIfEqual(qw422016, s, Log) -//line navbar.qtpl:41 +//line navbar.qtpl:45 qw422016.N().S(`" aria-current="page" href="/`) -//line navbar.qtpl:41 +//line navbar.qtpl:45 qw422016.E().S(name) -//line navbar.qtpl:41 - qw422016.N().S(`/log">log</a> +//line navbar.qtpl:45 + qw422016.N().S(`/log/`) +//line navbar.qtpl:45 + qw422016.E().S(ref) +//line navbar.qtpl:45 + qw422016.N().S(`">log</a> </li> <li class="nav-item"> <a class="nav-link`) -//line navbar.qtpl:44 +//line navbar.qtpl:48 streaminsertIfEqual(qw422016, s, Summary) -//line navbar.qtpl:44 +//line navbar.qtpl:48 qw422016.N().S(`" aria-current="page" href="/`) -//line navbar.qtpl:44 +//line navbar.qtpl:48 qw422016.E().S(name) -//line navbar.qtpl:44 - qw422016.N().S(`/summary">summary</a> +//line navbar.qtpl:48 + qw422016.N().S(`">summary</a> </li> <li class="nav-item"> <a class="nav-link`) -//line navbar.qtpl:47 +//line navbar.qtpl:51 streaminsertIfEqual(qw422016, s, Refs) -//line navbar.qtpl:47 +//line navbar.qtpl:51 qw422016.N().S(`" aria-current="page" href="/`) -//line navbar.qtpl:47 +//line navbar.qtpl:51 qw422016.E().S(name) -//line navbar.qtpl:47 +//line navbar.qtpl:51 qw422016.N().S(`/refs">refs</a> </li> <li class="nav-item"> <a class="nav-link`) -//line navbar.qtpl:50 +//line navbar.qtpl:54 streaminsertIfEqual(qw422016, s, Tree) -//line navbar.qtpl:50 +//line navbar.qtpl:54 qw422016.N().S(`" aria-current="page" href="/`) -//line navbar.qtpl:50 +//line navbar.qtpl:54 qw422016.E().S(name) -//line navbar.qtpl:50 - qw422016.N().S(`/tree">tree</a> +//line navbar.qtpl:54 + qw422016.N().S(`/tree/`) +//line navbar.qtpl:54 + qw422016.E().S(ref) +//line navbar.qtpl:54 + qw422016.N().S(`">tree</a> </li> </ul> +</div> `) -//line navbar.qtpl:53 +//line navbar.qtpl:58 } -//line navbar.qtpl:53 -func WriteGitItemNav(qq422016 qtio422016.Writer, name string, s GitSelection) { -//line navbar.qtpl:53 +//line navbar.qtpl:58 +func WriteGitItemNav(qq422016 qtio422016.Writer, name, ref string, s GitSelection) { +//line navbar.qtpl:58 qw422016 := qt422016.AcquireWriter(qq422016) -//line navbar.qtpl:53 - StreamGitItemNav(qw422016, name, s) -//line navbar.qtpl:53 +//line navbar.qtpl:58 + StreamGitItemNav(qw422016, name, ref, s) +//line navbar.qtpl:58 qt422016.ReleaseWriter(qw422016) -//line navbar.qtpl:53 +//line navbar.qtpl:58 } -//line navbar.qtpl:53 -func GitItemNav(name string, s GitSelection) string { -//line navbar.qtpl:53 +//line navbar.qtpl:58 +func GitItemNav(name, ref string, s GitSelection) string { +//line navbar.qtpl:58 qb422016 := qt422016.AcquireByteBuffer() -//line navbar.qtpl:53 - WriteGitItemNav(qb422016, name, s) -//line navbar.qtpl:53 +//line navbar.qtpl:58 + WriteGitItemNav(qb422016, name, ref, s) +//line navbar.qtpl:58 qs422016 := string(qb422016.B) -//line navbar.qtpl:53 +//line navbar.qtpl:58 qt422016.ReleaseByteBuffer(qb422016) -//line navbar.qtpl:53 +//line navbar.qtpl:58 return qs422016 -//line navbar.qtpl:53 +//line navbar.qtpl:58 } |