diff options
| author | Gabriel A. Giovanini <mail@gabrielgio.me> | 2024-06-15 19:07:14 +0200 | 
|---|---|---|
| committer | Gabriel A. Giovanini <mail@gabrielgio.me> | 2024-06-15 19:07:14 +0200 | 
| commit | ce5185f551b707fe8dd8db8b5cbffd46e96cacc0 (patch) | |
| tree | b4b83a117a7c479589cfce022011e725e24529e8 | |
| parent | b71c6c0e5b8dd00d44e40ac0551902a23cbe19d5 (diff) | |
| download | cerrado-ce5185f551b707fe8dd8db8b5cbffd46e96cacc0.tar.gz cerrado-ce5185f551b707fe8dd8db8b5cbffd46e96cacc0.tar.bz2 cerrado-ce5185f551b707fe8dd8db8b5cbffd46e96cacc0.zip | |
feat: Add per repository about page
| -rw-r--r-- | pkg/config/config.go | 6 | ||||
| -rw-r--r-- | pkg/config/config_test.go | 6 | ||||
| -rw-r--r-- | pkg/handler/git/handler.go | 25 | ||||
| -rw-r--r-- | pkg/service/git.go | 18 | ||||
| -rw-r--r-- | scss/main.scss | 11 | ||||
| -rw-r--r-- | templates/gititemabout.qtpl | 5 | ||||
| -rw-r--r-- | templates/gititemabout.qtpl.go | 69 | ||||
| -rw-r--r-- | templates/gititemlog.qtpl | 1 | ||||
| -rw-r--r-- | templates/gititemlog.qtpl.go | 47 | 
9 files changed, 130 insertions, 58 deletions
| diff --git a/pkg/config/config.go b/pkg/config/config.go index 6ac6d05..3759b7c 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -42,6 +42,7 @@ type (  		Path        string  		Description string  		Public      bool +		About       string  	}  	// ConfigurationRepository represents the configuration repository (as in @@ -214,6 +215,10 @@ func setRepositories(block scfg.Block, repositories *[]*GitRepositoryConfigurati  				if err := setBool(d, &repository.Public); err != nil {  					return err  				} +			case "about": +				if err := setString(d, &repository.About); err != nil { +					return err +				}  			}  		} @@ -249,6 +254,7 @@ func defaultRepisotryConfiguration(path string) *GitRepositoryConfiguration {  		Name:        filepath.Base(path),  		Description: "",  		Public:      false, +		About:       "README.md",  	}  } diff --git a/pkg/config/config_test.go b/pkg/config/config_test.go index 2d779c5..8c1d27e 100644 --- a/pkg/config/config_test.go +++ b/pkg/config/config_test.go @@ -53,6 +53,7 @@ scan "/srv/git" {  						Path:        "/srv/git/cerrado.git",  						Description: "",  						Public:      false, +						About:       "README.md",  					},  				},  			}, @@ -64,6 +65,7 @@ repository /srv/git/cerrado.git {  	name cerrado  	description "Single person forge"  	public true +	about readme.txt  }`,  			expectedConfig: &configuration{  				Scan:       defaultScan(), @@ -74,6 +76,7 @@ repository /srv/git/cerrado.git {  						Path:        "/srv/git/cerrado.git",  						Description: "Single person forge",  						Public:      true, +						About:       "readme.txt",  					},  				},  			}, @@ -111,6 +114,7 @@ repository /srv/git/cerrado.git {  	name cerrado  	description "Single person forge"  	public true +	about readme.txt  }`,  			expectedConfig: &configuration{  				Scan: &scan{ @@ -124,12 +128,14 @@ repository /srv/git/cerrado.git {  						Path:        "/srv/git/linux.git",  						Description: "",  						Public:      false, +						About:       "README.md",  					},  					{  						Name:        "cerrado",  						Path:        "/srv/git/cerrado.git",  						Description: "Single person forge",  						Public:      true, +						About:       "readme.txt",  					},  				},  			}, diff --git a/pkg/handler/git/handler.go b/pkg/handler/git/handler.go index 899f61e..25505ba 100644 --- a/pkg/handler/git/handler.go +++ b/pkg/handler/git/handler.go @@ -33,6 +33,7 @@ type (  		GetHead(name string) (*plumbing.Reference, error)  		GetTree(name, ref, path string) (*object.Tree, error)  		GetFileContent(name, ref, path string) (string, error) +		GetAbout(name string) (string, error)  		ListTags(name string) ([]*plumbing.Reference, error)  		ListBranches(name string) ([]*plumbing.Reference, error)  	} @@ -126,10 +127,28 @@ func (g *GitHandler) About(w http.ResponseWriter, r *http.Request) error {  	if err != nil {  		return err  	} + +	file, err := g.gitService.GetAbout(name) +	if err != nil { +		return err +	} + +	extensions := parser.CommonExtensions | parser.AutoHeadingIDs | parser.NoEmptyLineBeforeBlock +	p := parser.NewWithExtensions(extensions) +	doc := p.Parse([]byte(file)) + +	htmlFlag := markdownhtml.CommonFlags | markdownhtml.HrefTargetBlank +	opts := markdownhtml.RendererOptions{Flags: htmlFlag} +	renderer := markdownhtml.NewRenderer(opts) + +	bs := markdown.Render(doc, renderer) +  	gitList := &templates.GitItemPage{ -		Name:        name, -		Ref:         ref.Name().Short(), -		GitItemBase: &templates.GitItemAboutPage{}, +		Name: name, +		Ref:  ref.Name().Short(), +		GitItemBase: &templates.GitItemAboutPage{ +			About: bs, +		},  	}  	templates.WritePageTemplate(w, gitList)  	return nil diff --git a/pkg/service/git.go b/pkg/service/git.go index 2165abe..6bb6e9e 100644 --- a/pkg/service/git.go +++ b/pkg/service/git.go @@ -128,6 +128,24 @@ func (g *GitService) GetFileContent(name, ref, path string) (string, error) {  	return repo.FileContent(path)  } +func (g *GitService) GetAbout(name string) (string, error) { +	r := g.configRepo.GetByName(name) +	if r == nil { +		return "", RepositoryNotFoundErr +	} + +	repo, err := git.OpenRepository(r.Path) +	if err != nil { +		return "", err +	} +	err = repo.SetRef("") +	if err != nil { +		return "", err +	} + +	return repo.FileContent(r.About) +} +  func (g *GitService) ListTags(name string) ([]*plumbing.Reference, error) {  	r := g.configRepo.GetByName(name)  	if r == nil { diff --git a/scss/main.scss b/scss/main.scss index 107a4c8..c438a90 100644 --- a/scss/main.scss +++ b/scss/main.scss @@ -60,6 +60,12 @@ $utilities: (        center: center,      )    ), +  "margin": ( +    responsive: true, +    property: margin, +    class: m, +    values: map-merge($spacers, (auto: auto)) +  ),    "margin-end": (      responsive: true,      property: margin-right, @@ -114,6 +120,11 @@ body {      overflow-x: auto;  } +pre { +    display: grid; +    overflow-x: auto; +} +  #about {    padding: 0 $spacer $spacer $spacer;    > p:first-child { diff --git a/templates/gititemabout.qtpl b/templates/gititemabout.qtpl index abda2fb..da9c2e9 100644 --- a/templates/gititemabout.qtpl +++ b/templates/gititemabout.qtpl @@ -1,10 +1,13 @@  {% code  type GitItemAboutPage struct { +    About []byte  }  %}  {% func (g *GitItemAboutPage) Nav(name, ref string) %}{%= GitItemNav(name, ref, Readme) %}{% endfunc %}  {% func (g *GitItemAboutPage) GitContent(name, ref string) %} -<h4>About</h4> +<div class="m-2"> +{%z= g.About %} +</div>  {% endfunc %} diff --git a/templates/gititemabout.qtpl.go b/templates/gititemabout.qtpl.go index cd49d2f..e1c1db4 100644 --- a/templates/gititemabout.qtpl.go +++ b/templates/gititemabout.qtpl.go @@ -19,72 +19,79 @@ var (  //line gititemabout.qtpl:2  type GitItemAboutPage struct { +	About []byte  } -//line gititemabout.qtpl:6 +//line gititemabout.qtpl:7  func (g *GitItemAboutPage) StreamNav(qw422016 *qt422016.Writer, name, ref string) { -//line gititemabout.qtpl:6 +//line gititemabout.qtpl:7  	StreamGitItemNav(qw422016, name, ref, Readme) -//line gititemabout.qtpl:6 +//line gititemabout.qtpl:7  } -//line gititemabout.qtpl:6 +//line gititemabout.qtpl:7  func (g *GitItemAboutPage) WriteNav(qq422016 qtio422016.Writer, name, ref string) { -//line gititemabout.qtpl:6 +//line gititemabout.qtpl:7  	qw422016 := qt422016.AcquireWriter(qq422016) -//line gititemabout.qtpl:6 +//line gititemabout.qtpl:7  	g.StreamNav(qw422016, name, ref) -//line gititemabout.qtpl:6 +//line gititemabout.qtpl:7  	qt422016.ReleaseWriter(qw422016) -//line gititemabout.qtpl:6 +//line gititemabout.qtpl:7  } -//line gititemabout.qtpl:6 +//line gititemabout.qtpl:7  func (g *GitItemAboutPage) Nav(name, ref string) string { -//line gititemabout.qtpl:6 +//line gititemabout.qtpl:7  	qb422016 := qt422016.AcquireByteBuffer() -//line gititemabout.qtpl:6 +//line gititemabout.qtpl:7  	g.WriteNav(qb422016, name, ref) -//line gititemabout.qtpl:6 +//line gititemabout.qtpl:7  	qs422016 := string(qb422016.B) -//line gititemabout.qtpl:6 +//line gititemabout.qtpl:7  	qt422016.ReleaseByteBuffer(qb422016) -//line gititemabout.qtpl:6 +//line gititemabout.qtpl:7  	return qs422016 -//line gititemabout.qtpl:6 +//line gititemabout.qtpl:7  } -//line gititemabout.qtpl:8 +//line gititemabout.qtpl:9  func (g *GitItemAboutPage) StreamGitContent(qw422016 *qt422016.Writer, name, ref string) { -//line gititemabout.qtpl:8 +//line gititemabout.qtpl:9  	qw422016.N().S(` -<h4>About</h4> +<div class="m-2">  `) -//line gititemabout.qtpl:10 +//line gititemabout.qtpl:11 +	qw422016.N().Z(g.About) +//line gititemabout.qtpl:11 +	qw422016.N().S(` +</div> +`) +//line gititemabout.qtpl:13  } -//line gititemabout.qtpl:10 +//line gititemabout.qtpl:13  func (g *GitItemAboutPage) WriteGitContent(qq422016 qtio422016.Writer, name, ref string) { -//line gititemabout.qtpl:10 +//line gititemabout.qtpl:13  	qw422016 := qt422016.AcquireWriter(qq422016) -//line gititemabout.qtpl:10 +//line gititemabout.qtpl:13  	g.StreamGitContent(qw422016, name, ref) -//line gititemabout.qtpl:10 +//line gititemabout.qtpl:13  	qt422016.ReleaseWriter(qw422016) -//line gititemabout.qtpl:10 +//line gititemabout.qtpl:13  } -//line gititemabout.qtpl:10 +//line gititemabout.qtpl:13  func (g *GitItemAboutPage) GitContent(name, ref string) string { -//line gititemabout.qtpl:10 +//line gititemabout.qtpl:13  	qb422016 := qt422016.AcquireByteBuffer() -//line gititemabout.qtpl:10 +//line gititemabout.qtpl:13  	g.WriteGitContent(qb422016, name, ref) -//line gititemabout.qtpl:10 +//line gititemabout.qtpl:13  	qs422016 := string(qb422016.B) -//line gititemabout.qtpl:10 +//line gititemabout.qtpl:13  	qt422016.ReleaseByteBuffer(qb422016) -//line gititemabout.qtpl:10 +//line gititemabout.qtpl:13  	return qs422016 -//line gititemabout.qtpl:10 +//line gititemabout.qtpl:13  } diff --git a/templates/gititemlog.qtpl b/templates/gititemlog.qtpl index a28e7ad..3588d32 100644 --- a/templates/gititemlog.qtpl +++ b/templates/gititemlog.qtpl @@ -12,6 +12,7 @@ type GitItemLogPage struct {  <div class="event-list">    {% for _, c := range g.Commits %}    <div class="row event"> +        <div class="col-xxl-2">         {%s TimeFormat(c.Committer.When) %}        </div> diff --git a/templates/gititemlog.qtpl.go b/templates/gititemlog.qtpl.go index 76c2432..b950d15 100644 --- a/templates/gititemlog.qtpl.go +++ b/templates/gititemlog.qtpl.go @@ -69,64 +69,65 @@ func (g *GitItemLogPage) StreamGitContent(qw422016 *qt422016.Writer, name, ref s  //line gititemlog.qtpl:13  		qw422016.N().S(`    <div class="row event"> +        <div class="col-xxl-2">         `) -//line gititemlog.qtpl:16 +//line gititemlog.qtpl:17  		qw422016.E().S(TimeFormat(c.Committer.When)) -//line gititemlog.qtpl:16 +//line gititemlog.qtpl:17  		qw422016.N().S(`        </div>        <div class="col-xxl-7 code-view">         <pre>`) -//line gititemlog.qtpl:19 +//line gititemlog.qtpl:20  		qw422016.E().S(c.Message) -//line gititemlog.qtpl:19 +//line gititemlog.qtpl:20  		qw422016.N().S(`</pre>        </div>        <div class="col-xxl-3">         <small>`) -//line gititemlog.qtpl:22 +//line gititemlog.qtpl:23  		qw422016.E().S(c.Committer.Name) -//line gititemlog.qtpl:22 +//line gititemlog.qtpl:23  		qw422016.N().S(` <`) -//line gititemlog.qtpl:22 +//line gititemlog.qtpl:23  		qw422016.E().S(c.Committer.Email) -//line gititemlog.qtpl:22 +//line gititemlog.qtpl:23  		qw422016.N().S(`></small>        </div>    </div>    `) -//line gititemlog.qtpl:25 +//line gititemlog.qtpl:26  	} -//line gititemlog.qtpl:25 +//line gititemlog.qtpl:26  	qw422016.N().S(`  </div>  `) -//line gititemlog.qtpl:27 +//line gititemlog.qtpl:28  } -//line gititemlog.qtpl:27 +//line gititemlog.qtpl:28  func (g *GitItemLogPage) WriteGitContent(qq422016 qtio422016.Writer, name, ref string) { -//line gititemlog.qtpl:27 +//line gititemlog.qtpl:28  	qw422016 := qt422016.AcquireWriter(qq422016) -//line gititemlog.qtpl:27 +//line gititemlog.qtpl:28  	g.StreamGitContent(qw422016, name, ref) -//line gititemlog.qtpl:27 +//line gititemlog.qtpl:28  	qt422016.ReleaseWriter(qw422016) -//line gititemlog.qtpl:27 +//line gititemlog.qtpl:28  } -//line gititemlog.qtpl:27 +//line gititemlog.qtpl:28  func (g *GitItemLogPage) GitContent(name, ref string) string { -//line gititemlog.qtpl:27 +//line gititemlog.qtpl:28  	qb422016 := qt422016.AcquireByteBuffer() -//line gititemlog.qtpl:27 +//line gititemlog.qtpl:28  	g.WriteGitContent(qb422016, name, ref) -//line gititemlog.qtpl:27 +//line gititemlog.qtpl:28  	qs422016 := string(qb422016.B) -//line gititemlog.qtpl:27 +//line gititemlog.qtpl:28  	qt422016.ReleaseByteBuffer(qb422016) -//line gititemlog.qtpl:27 +//line gititemlog.qtpl:28  	return qs422016 -//line gititemlog.qtpl:27 +//line gititemlog.qtpl:28  } | 
