cerrado @ 77f5ad1047dc2ae72cd616dc2acc839ea38d881f

feat: Add last commit information
  1diff --git a/pkg/service/git.go b/pkg/service/git.go
  2index 2d00715f57ab9553c54a3d02a88bb8feb34cb817..773d335d0d1694bf104f94455ccc6943dce9b07f 100644
  3--- a/pkg/service/git.go
  4+++ b/pkg/service/git.go
  5@@ -15,11 +15,11 @@ )
  6 
  7 type (
  8 	Repository struct {
  9-		Name           string
 10-		Description    string
 11-		Public         bool
 12-		LastCommitDate string
 13-		Ref            string
 14+		Name        string
 15+		Description string
 16+		Public      bool
 17+		LastCommit  *object.Commit
 18+		Ref         string
 19 	}
 20 
 21 	GitService struct {
 22@@ -70,11 +70,11 @@ 			continue
 23 		}
 24 
 25 		repos = append(repos, &Repository{
 26-			Name:           r.Name,
 27-			Description:    r.Description,
 28-			Public:         r.Public,
 29-			LastCommitDate: obj.Author.When.Format(timeFormat),
 30-			Ref:            head.Name().Short(),
 31+			Name:        r.Name,
 32+			Description: r.Description,
 33+			Public:      r.Public,
 34+			LastCommit:  obj,
 35+			Ref:         head.Name().Short(),
 36 		})
 37 	}
 38 
 39diff --git a/templates/gitlist.qtpl b/templates/gitlist.qtpl
 40index fc047ebf4a7f8946462124d017d6d9def0c9f76c..4f25fc674af9952f5c95f91baedce34301e0c19e 100644
 41--- a/templates/gitlist.qtpl
 42+++ b/templates/gitlist.qtpl
 43@@ -1,10 +1,21 @@
 44 {% import "git.gabrielgio.me/cerrado/pkg/service" %}
 45 {% import "context" %}
 46+{% import "strings" %}
 47 
 48 {% code
 49 type GitListPage struct {
 50     Respositories []*service.Repository
 51     About []byte
 52+}
 53+%}
 54+
 55+
 56+{% code func firstLine(text string) string {
 57+    lines := strings.Split(text, "\n")
 58+    if len(lines) > 0 {
 59+        return lines[0]
 60+    }
 61+    return ""
 62 }
 63 %}
 64 
 65@@ -28,6 +39,10 @@           </div>
 66         </div>
 67         </hr>
 68         <p>{%s r.Description %}</p>
 69+        <p style="background: #dadada">
 70+            <a title="{%s r.LastCommit.Hash.String() %}" href="/{%s r.Name %}/commit/{%s r.LastCommit.Hash.String() %}/">{%s r.LastCommit.Hash.String()[0:8] %}</a> - 
 71+            <a title="{%s r.LastCommit.Author.Email %}">{%s r.LastCommit.Author.Name %}</a> - 
 72+            {%s firstLine(r.LastCommit.Message) %}</p>
 73         <p>
 74           <a href="/{%s r.Name %}/log/{%s r.Ref %}/">log</a>
 75           <a href="/{%s r.Name %}/tree/{%s r.Ref %}/">tree</a>
 76diff --git a/templates/gitlist.qtpl.go b/templates/gitlist.qtpl.go
 77index 07e5567039df5840d9c40d821cc6d60c88bec6b0..f3df84f80a4dac96623865d413e62b51598d25aa 100644
 78--- a/templates/gitlist.qtpl.go
 79+++ b/templates/gitlist.qtpl.go
 80@@ -10,172 +10,216 @@
 81 //line templates/gitlist.qtpl:2
 82 import "context"
 83 
 84-//line templates/gitlist.qtpl:4
 85+//line templates/gitlist.qtpl:3
 86+import "strings"
 87+
 88+//line templates/gitlist.qtpl:5
 89 import (
 90 	qtio422016 "io"
 91 
 92 	qt422016 "github.com/valyala/quicktemplate"
 93 )
 94 
 95-//line templates/gitlist.qtpl:4
 96+//line templates/gitlist.qtpl:5
 97 var (
 98 	_ = qtio422016.Copy
 99 	_ = qt422016.AcquireByteBuffer
100 )
101 
102-//line templates/gitlist.qtpl:5
103+//line templates/gitlist.qtpl:6
104 type GitListPage struct {
105 	Respositories []*service.Repository
106 	About         []byte
107 }
108 
109-//line templates/gitlist.qtpl:11
110+//line templates/gitlist.qtpl:13
111+func firstLine(text string) string {
112+	lines := strings.Split(text, "\n")
113+	if len(lines) > 0 {
114+		return lines[0]
115+	}
116+	return ""
117+}
118+
119+//line templates/gitlist.qtpl:22
120 func (p *GitListPage) StreamTitle(qw422016 *qt422016.Writer, ctx context.Context) {
121-//line templates/gitlist.qtpl:11
122+//line templates/gitlist.qtpl:22
123 	qw422016.N().S(`Git | List`)
124-//line templates/gitlist.qtpl:11
125+//line templates/gitlist.qtpl:22
126 }
127 
128-//line templates/gitlist.qtpl:11
129+//line templates/gitlist.qtpl:22
130 func (p *GitListPage) WriteTitle(qq422016 qtio422016.Writer, ctx context.Context) {
131-//line templates/gitlist.qtpl:11
132+//line templates/gitlist.qtpl:22
133 	qw422016 := qt422016.AcquireWriter(qq422016)
134-//line templates/gitlist.qtpl:11
135+//line templates/gitlist.qtpl:22
136 	p.StreamTitle(qw422016, ctx)
137-//line templates/gitlist.qtpl:11
138+//line templates/gitlist.qtpl:22
139 	qt422016.ReleaseWriter(qw422016)
140-//line templates/gitlist.qtpl:11
141+//line templates/gitlist.qtpl:22
142 }
143 
144-//line templates/gitlist.qtpl:11
145+//line templates/gitlist.qtpl:22
146 func (p *GitListPage) Title(ctx context.Context) string {
147-//line templates/gitlist.qtpl:11
148+//line templates/gitlist.qtpl:22
149 	qb422016 := qt422016.AcquireByteBuffer()
150-//line templates/gitlist.qtpl:11
151+//line templates/gitlist.qtpl:22
152 	p.WriteTitle(qb422016, ctx)
153-//line templates/gitlist.qtpl:11
154+//line templates/gitlist.qtpl:22
155 	qs422016 := string(qb422016.B)
156-//line templates/gitlist.qtpl:11
157+//line templates/gitlist.qtpl:22
158 	qt422016.ReleaseByteBuffer(qb422016)
159-//line templates/gitlist.qtpl:11
160+//line templates/gitlist.qtpl:22
161 	return qs422016
162-//line templates/gitlist.qtpl:11
163+//line templates/gitlist.qtpl:22
164 }
165 
166-//line templates/gitlist.qtpl:13
167+//line templates/gitlist.qtpl:24
168 func (p *GitListPage) StreamNavbar(qw422016 *qt422016.Writer, ctx context.Context) {
169-//line templates/gitlist.qtpl:13
170+//line templates/gitlist.qtpl:24
171 	StreamNavbar(qw422016, ctx, Git)
172-//line templates/gitlist.qtpl:13
173+//line templates/gitlist.qtpl:24
174 }
175 
176-//line templates/gitlist.qtpl:13
177+//line templates/gitlist.qtpl:24
178 func (p *GitListPage) WriteNavbar(qq422016 qtio422016.Writer, ctx context.Context) {
179-//line templates/gitlist.qtpl:13
180+//line templates/gitlist.qtpl:24
181 	qw422016 := qt422016.AcquireWriter(qq422016)
182-//line templates/gitlist.qtpl:13
183+//line templates/gitlist.qtpl:24
184 	p.StreamNavbar(qw422016, ctx)
185-//line templates/gitlist.qtpl:13
186+//line templates/gitlist.qtpl:24
187 	qt422016.ReleaseWriter(qw422016)
188-//line templates/gitlist.qtpl:13
189+//line templates/gitlist.qtpl:24
190 }
191 
192-//line templates/gitlist.qtpl:13
193+//line templates/gitlist.qtpl:24
194 func (p *GitListPage) Navbar(ctx context.Context) string {
195-//line templates/gitlist.qtpl:13
196+//line templates/gitlist.qtpl:24
197 	qb422016 := qt422016.AcquireByteBuffer()
198-//line templates/gitlist.qtpl:13
199+//line templates/gitlist.qtpl:24
200 	p.WriteNavbar(qb422016, ctx)
201-//line templates/gitlist.qtpl:13
202+//line templates/gitlist.qtpl:24
203 	qs422016 := string(qb422016.B)
204-//line templates/gitlist.qtpl:13
205+//line templates/gitlist.qtpl:24
206 	qt422016.ReleaseByteBuffer(qb422016)
207-//line templates/gitlist.qtpl:13
208+//line templates/gitlist.qtpl:24
209 	return qs422016
210-//line templates/gitlist.qtpl:13
211+//line templates/gitlist.qtpl:24
212 }
213 
214-//line templates/gitlist.qtpl:15
215+//line templates/gitlist.qtpl:26
216 func (p *GitListPage) StreamContent(qw422016 *qt422016.Writer, ctx context.Context) {
217-//line templates/gitlist.qtpl:15
218+//line templates/gitlist.qtpl:26
219 	qw422016.N().S(`
220 <div class="row">
221   <div class="col-md-6 order-last order-md-first">
222     <div class="event-list">
223       `)
224-//line templates/gitlist.qtpl:19
225+//line templates/gitlist.qtpl:30
226 	for _, r := range p.Respositories {
227-//line templates/gitlist.qtpl:19
228+//line templates/gitlist.qtpl:30
229 		qw422016.N().S(`
230       <div class="event">
231         <div class="row">
232           <div class="col-md">
233               <a href="/`)
234-//line templates/gitlist.qtpl:23
235+//line templates/gitlist.qtpl:34
236 		qw422016.E().S(r.Name)
237-//line templates/gitlist.qtpl:23
238+//line templates/gitlist.qtpl:34
239 		qw422016.N().S(`/">`)
240-//line templates/gitlist.qtpl:23
241+//line templates/gitlist.qtpl:34
242 		qw422016.E().S(r.Name)
243-//line templates/gitlist.qtpl:23
244+//line templates/gitlist.qtpl:34
245 		qw422016.N().S(`</a>
246           </div>
247           <div class="col-md text-md-end">
248             <small>`)
249-//line templates/gitlist.qtpl:26
250+//line templates/gitlist.qtpl:37
251 		if !r.Public {
252-//line templates/gitlist.qtpl:26
253+//line templates/gitlist.qtpl:37
254 			qw422016.N().S(`private`)
255-//line templates/gitlist.qtpl:26
256+//line templates/gitlist.qtpl:37
257 		}
258-//line templates/gitlist.qtpl:26
259+//line templates/gitlist.qtpl:37
260 		qw422016.N().S(`</small>
261           </div>
262         </div>
263         </hr>
264         <p>`)
265-//line templates/gitlist.qtpl:30
266+//line templates/gitlist.qtpl:41
267 		qw422016.E().S(r.Description)
268-//line templates/gitlist.qtpl:30
269+//line templates/gitlist.qtpl:41
270+		qw422016.N().S(`</p>
271+        <p style="background: #dadada">
272+            <a title="`)
273+//line templates/gitlist.qtpl:43
274+		qw422016.E().S(r.LastCommit.Hash.String())
275+//line templates/gitlist.qtpl:43
276+		qw422016.N().S(`" href="/`)
277+//line templates/gitlist.qtpl:43
278+		qw422016.E().S(r.Name)
279+//line templates/gitlist.qtpl:43
280+		qw422016.N().S(`/commit/`)
281+//line templates/gitlist.qtpl:43
282+		qw422016.E().S(r.LastCommit.Hash.String())
283+//line templates/gitlist.qtpl:43
284+		qw422016.N().S(`/">`)
285+//line templates/gitlist.qtpl:43
286+		qw422016.E().S(r.LastCommit.Hash.String()[0:8])
287+//line templates/gitlist.qtpl:43
288+		qw422016.N().S(`</a> - 
289+            <a title="`)
290+//line templates/gitlist.qtpl:44
291+		qw422016.E().S(r.LastCommit.Author.Email)
292+//line templates/gitlist.qtpl:44
293+		qw422016.N().S(`">`)
294+//line templates/gitlist.qtpl:44
295+		qw422016.E().S(r.LastCommit.Author.Name)
296+//line templates/gitlist.qtpl:44
297+		qw422016.N().S(`</a> - 
298+            `)
299+//line templates/gitlist.qtpl:45
300+		qw422016.E().S(firstLine(r.LastCommit.Message))
301+//line templates/gitlist.qtpl:45
302 		qw422016.N().S(`</p>
303         <p>
304           <a href="/`)
305-//line templates/gitlist.qtpl:32
306+//line templates/gitlist.qtpl:47
307 		qw422016.E().S(r.Name)
308-//line templates/gitlist.qtpl:32
309+//line templates/gitlist.qtpl:47
310 		qw422016.N().S(`/log/`)
311-//line templates/gitlist.qtpl:32
312+//line templates/gitlist.qtpl:47
313 		qw422016.E().S(r.Ref)
314-//line templates/gitlist.qtpl:32
315+//line templates/gitlist.qtpl:47
316 		qw422016.N().S(`/">log</a>
317           <a href="/`)
318-//line templates/gitlist.qtpl:33
319+//line templates/gitlist.qtpl:48
320 		qw422016.E().S(r.Name)
321-//line templates/gitlist.qtpl:33
322+//line templates/gitlist.qtpl:48
323 		qw422016.N().S(`/tree/`)
324-//line templates/gitlist.qtpl:33
325+//line templates/gitlist.qtpl:48
326 		qw422016.E().S(r.Ref)
327-//line templates/gitlist.qtpl:33
328+//line templates/gitlist.qtpl:48
329 		qw422016.N().S(`/">tree</a>
330           <a href="/`)
331-//line templates/gitlist.qtpl:34
332+//line templates/gitlist.qtpl:49
333 		qw422016.E().S(r.Name)
334-//line templates/gitlist.qtpl:34
335+//line templates/gitlist.qtpl:49
336 		qw422016.N().S(`/refs/">refs</a>
337         </p>
338       </div>
339       `)
340-//line templates/gitlist.qtpl:37
341+//line templates/gitlist.qtpl:52
342 	}
343-//line templates/gitlist.qtpl:37
344+//line templates/gitlist.qtpl:52
345 	qw422016.N().S(`
346     </div>
347   </div>
348   <div id="about" class="col-md-4 order-first order-md-last">
349     `)
350-//line templates/gitlist.qtpl:41
351+//line templates/gitlist.qtpl:56
352 	qw422016.N().Z(p.About)
353-//line templates/gitlist.qtpl:41
354+//line templates/gitlist.qtpl:56
355 	qw422016.N().S(`
356     <div class="alert alert-warning text-center" role="alert">
357         This project is under development, things may be broken or incomplete.
358@@ -183,65 +227,65 @@     </div>
359   </div>
360 </div>
361 `)
362-//line templates/gitlist.qtpl:47
363+//line templates/gitlist.qtpl:62
364 }
365 
366-//line templates/gitlist.qtpl:47
367+//line templates/gitlist.qtpl:62
368 func (p *GitListPage) WriteContent(qq422016 qtio422016.Writer, ctx context.Context) {
369-//line templates/gitlist.qtpl:47
370+//line templates/gitlist.qtpl:62
371 	qw422016 := qt422016.AcquireWriter(qq422016)
372-//line templates/gitlist.qtpl:47
373+//line templates/gitlist.qtpl:62
374 	p.StreamContent(qw422016, ctx)
375-//line templates/gitlist.qtpl:47
376+//line templates/gitlist.qtpl:62
377 	qt422016.ReleaseWriter(qw422016)
378-//line templates/gitlist.qtpl:47
379+//line templates/gitlist.qtpl:62
380 }
381 
382-//line templates/gitlist.qtpl:47
383+//line templates/gitlist.qtpl:62
384 func (p *GitListPage) Content(ctx context.Context) string {
385-//line templates/gitlist.qtpl:47
386+//line templates/gitlist.qtpl:62
387 	qb422016 := qt422016.AcquireByteBuffer()
388-//line templates/gitlist.qtpl:47
389+//line templates/gitlist.qtpl:62
390 	p.WriteContent(qb422016, ctx)
391-//line templates/gitlist.qtpl:47
392+//line templates/gitlist.qtpl:62
393 	qs422016 := string(qb422016.B)
394-//line templates/gitlist.qtpl:47
395+//line templates/gitlist.qtpl:62
396 	qt422016.ReleaseByteBuffer(qb422016)
397-//line templates/gitlist.qtpl:47
398+//line templates/gitlist.qtpl:62
399 	return qs422016
400-//line templates/gitlist.qtpl:47
401+//line templates/gitlist.qtpl:62
402 }
403 
404-//line templates/gitlist.qtpl:49
405+//line templates/gitlist.qtpl:64
406 func (p *GitListPage) StreamScript(qw422016 *qt422016.Writer, ctx context.Context) {
407-//line templates/gitlist.qtpl:49
408+//line templates/gitlist.qtpl:64
409 	qw422016.N().S(`
410 `)
411-//line templates/gitlist.qtpl:50
412+//line templates/gitlist.qtpl:65
413 }
414 
415-//line templates/gitlist.qtpl:50
416+//line templates/gitlist.qtpl:65
417 func (p *GitListPage) WriteScript(qq422016 qtio422016.Writer, ctx context.Context) {
418-//line templates/gitlist.qtpl:50
419+//line templates/gitlist.qtpl:65
420 	qw422016 := qt422016.AcquireWriter(qq422016)
421-//line templates/gitlist.qtpl:50
422+//line templates/gitlist.qtpl:65
423 	p.StreamScript(qw422016, ctx)
424-//line templates/gitlist.qtpl:50
425+//line templates/gitlist.qtpl:65
426 	qt422016.ReleaseWriter(qw422016)
427-//line templates/gitlist.qtpl:50
428+//line templates/gitlist.qtpl:65
429 }
430 
431-//line templates/gitlist.qtpl:50
432+//line templates/gitlist.qtpl:65
433 func (p *GitListPage) Script(ctx context.Context) string {
434-//line templates/gitlist.qtpl:50
435+//line templates/gitlist.qtpl:65
436 	qb422016 := qt422016.AcquireByteBuffer()
437-//line templates/gitlist.qtpl:50
438+//line templates/gitlist.qtpl:65
439 	p.WriteScript(qb422016, ctx)
440-//line templates/gitlist.qtpl:50
441+//line templates/gitlist.qtpl:65
442 	qs422016 := string(qb422016.B)
443-//line templates/gitlist.qtpl:50
444+//line templates/gitlist.qtpl:65
445 	qt422016.ReleaseByteBuffer(qb422016)
446-//line templates/gitlist.qtpl:50
447+//line templates/gitlist.qtpl:65
448 	return qs422016
449-//line templates/gitlist.qtpl:50
450+//line templates/gitlist.qtpl:65
451 }