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  } | 
