mirror of
https://github.com/golang/go
synced 2024-11-22 04:44:39 -07:00
dashboard: better ui layout for subrepo status
R=golang-dev, dsymonds CC=golang-dev https://golang.org/cl/5595048
This commit is contained in:
parent
33b6d46afd
commit
1f5f457ba3
@ -53,13 +53,17 @@ func uiHandler(w http.ResponseWriter, r *http.Request) {
|
|||||||
logErr(w, r, err)
|
logErr(w, r, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
builders := commitBuilders(commits)
|
builders := commitBuilders(commits, "")
|
||||||
|
|
||||||
tipState, err := TagState(c, "tip")
|
var tipState *TagState
|
||||||
|
if page == 0 {
|
||||||
|
// only show sub-repo state on first page
|
||||||
|
tipState, err = TagStateByName(c, "tip")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logErr(w, r, err)
|
logErr(w, r, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
p := &Pagination{}
|
p := &Pagination{}
|
||||||
if len(commits) == commitsPerPage {
|
if len(commits) == commitsPerPage {
|
||||||
@ -105,10 +109,10 @@ func goCommits(c appengine.Context, page int) ([]*Commit, os.Error) {
|
|||||||
|
|
||||||
// commitBuilders returns the names of the builders that provided
|
// commitBuilders returns the names of the builders that provided
|
||||||
// Results for the provided commits.
|
// Results for the provided commits.
|
||||||
func commitBuilders(commits []*Commit) []string {
|
func commitBuilders(commits []*Commit, goHash string) []string {
|
||||||
builders := make(map[string]bool)
|
builders := make(map[string]bool)
|
||||||
for _, commit := range commits {
|
for _, commit := range commits {
|
||||||
for _, r := range commit.Results("") {
|
for _, r := range commit.Results(goHash) {
|
||||||
builders[r.Builder] = true
|
builders[r.Builder] = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -123,16 +127,20 @@ func keys(m map[string]bool) (s []string) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// PackageState represents the state of a Package at a tag.
|
// TagState represents the state of all Packages at a Tag.
|
||||||
type PackageState struct {
|
type TagState struct {
|
||||||
*Package
|
Tag *Commit
|
||||||
*Commit
|
Packages []*PackageState
|
||||||
Results []*Result
|
|
||||||
OK bool
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TagState fetches the results for all Go subrepos at the specified tag.
|
// PackageState represents the state of a Package at a Tag.
|
||||||
func TagState(c appengine.Context, name string) ([]*PackageState, os.Error) {
|
type PackageState struct {
|
||||||
|
Package *Package
|
||||||
|
Commit *Commit
|
||||||
|
}
|
||||||
|
|
||||||
|
// TagStateByName fetches the results for all Go subrepos at the specified Tag.
|
||||||
|
func TagStateByName(c appengine.Context, name string) (*TagState, os.Error) {
|
||||||
tag, err := GetTag(c, name)
|
tag, err := GetTag(c, name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -141,29 +149,26 @@ func TagState(c appengine.Context, name string) ([]*PackageState, os.Error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
var states []*PackageState
|
var st TagState
|
||||||
for _, pkg := range pkgs {
|
for _, pkg := range pkgs {
|
||||||
commit, err := pkg.LastCommit(c)
|
com, err := pkg.LastCommit(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Warningf("%v: no Commit found: %v", pkg, err)
|
c.Warningf("%v: no Commit found: %v", pkg, err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
results := commit.Results(tag.Hash)
|
st.Packages = append(st.Packages, &PackageState{pkg, com})
|
||||||
ok := len(results) > 0
|
|
||||||
for _, r := range results {
|
|
||||||
ok = ok && r.OK
|
|
||||||
}
|
}
|
||||||
states = append(states, &PackageState{
|
st.Tag, err = tag.Commit(c)
|
||||||
pkg, commit, results, ok,
|
if err != nil {
|
||||||
})
|
return nil, err
|
||||||
}
|
}
|
||||||
return states, nil
|
return &st, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type uiTemplateData struct {
|
type uiTemplateData struct {
|
||||||
Commits []*Commit
|
Commits []*Commit
|
||||||
Builders []string
|
Builders []string
|
||||||
TipState []*PackageState
|
TipState *TagState
|
||||||
Pagination *Pagination
|
Pagination *Pagination
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
background: #eee;
|
background: #eee;
|
||||||
}
|
}
|
||||||
h2 {
|
h2 {
|
||||||
margin-top: 10px;
|
margin-top: 20px;
|
||||||
}
|
}
|
||||||
.build, .packages {
|
.build, .packages {
|
||||||
margin: 5px;
|
margin: 5px;
|
||||||
@ -136,39 +136,70 @@
|
|||||||
<p>No commits to display. Hm.</p>
|
<p>No commits to display. Hm.</p>
|
||||||
{{end}}
|
{{end}}
|
||||||
|
|
||||||
{{if $.TipState}}
|
{{with $.TipState}}
|
||||||
<h2>Other packages</h2>
|
{{$goHash := .Tag.Hash}}
|
||||||
|
<h2>
|
||||||
|
Sub-repositories at tip
|
||||||
|
<small>(<a href="{{repoURL .Tag.Hash ""}}">{{shortHash .Tag.Hash}}</a>)</small>
|
||||||
|
</h2>
|
||||||
|
|
||||||
<table class="packages">
|
<table class="build">
|
||||||
|
<colgroup class="col-package"></colgroup>
|
||||||
|
<colgroup class="col-hash"></colgroup>
|
||||||
|
{{range $.Builders | builderSpans}}
|
||||||
|
<colgroup class="col-result" span="{{.N}}"></colgroup>
|
||||||
|
{{end}}
|
||||||
|
<colgroup class="col-user"></colgroup>
|
||||||
|
<colgroup class="col-time"></colgroup>
|
||||||
|
<colgroup class="col-desc"></colgroup>
|
||||||
<tr>
|
<tr>
|
||||||
<th>State</th>
|
<!-- extra row to make alternating colors use dark for first result -->
|
||||||
<th>Package</th>
|
|
||||||
<th> </th>
|
|
||||||
</tr>
|
</tr>
|
||||||
{{range $state := $.TipState}}
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<th></th>
|
||||||
{{if .Results}}
|
<th></th>
|
||||||
<img src="/static/status_{{if .OK}}good{{else}}alert{{end}}.gif" />
|
{{range $.Builders | builderSpans}}
|
||||||
|
<th colspan="{{.N}}">{{.OS}}</th>
|
||||||
|
{{end}}
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
{{range $.Builders}}
|
||||||
|
<th class="result arch" title="{{.}}">{{builderArchShort .}}</th>
|
||||||
|
{{end}}
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
{{range $pkg := .Packages}}
|
||||||
|
<tr class="commit">
|
||||||
|
<td><a title="{{.Package.Path}}">{{.Package.Name}}</a></td>
|
||||||
|
<td class="hash">
|
||||||
|
{{$h := $pkg.Commit.Hash}}
|
||||||
|
<a href="{{repoURL $h $pkg.Commit.PackagePath}}">{{shortHash $h}}</a>
|
||||||
|
</td>
|
||||||
|
{{range $.Builders}}
|
||||||
|
<td class="result">
|
||||||
|
{{with $pkg.Commit.Result . $goHash}}
|
||||||
|
{{if .OK}}
|
||||||
|
<span class="ok">ok</span>
|
||||||
|
{{else}}
|
||||||
|
<a href="/log/{{.LogHash}}" class="fail">fail</a>
|
||||||
|
{{end}}
|
||||||
{{else}}
|
{{else}}
|
||||||
|
|
||||||
{{end}}
|
{{end}}
|
||||||
</td>
|
</td>
|
||||||
<td><a title="{{.Package.Path}}">{{.Package.Name}}</a></td>
|
|
||||||
<td>
|
|
||||||
{{range .Results}}
|
|
||||||
<div>
|
|
||||||
{{$h := $state.Commit.Hash}}
|
|
||||||
<a href="{{repoURL $h $state.Commit.PackagePath}}">{{shortHash $h}}</a>
|
|
||||||
{{if .OK}}
|
|
||||||
ok
|
|
||||||
{{else}}
|
|
||||||
<a href="/log/{{.LogHash}}" class="fail">failed</a>
|
|
||||||
{{end}}
|
{{end}}
|
||||||
on {{.Builder}}/<a href="{{repoURL .GoHash ""}}">{{shortHash .GoHash}}</a>
|
{{with $pkg.Commit}}
|
||||||
</a></div>
|
<td class="user" title="{{.User}}">{{shortUser .User}}</td>
|
||||||
|
<td class="time">{{.Time.Time.Format "Mon 02 Jan 15:04"}}</td>
|
||||||
|
<td class="desc" title="{{.Desc}}">{{shortDesc .Desc}}</td>
|
||||||
{{end}}
|
{{end}}
|
||||||
</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
{{end}}
|
{{end}}
|
||||||
</table>
|
</table>
|
||||||
|
Loading…
Reference in New Issue
Block a user