]> Cypherpunks repositories - gostls13.git/commitdiff
dashboard: add sub-repositories to init list
authorAndrew Gerrand <adg@golang.org>
Mon, 30 Jan 2012 00:59:06 +0000 (11:59 +1100)
committerAndrew Gerrand <adg@golang.org>
Mon, 30 Jan 2012 00:59:06 +0000 (11:59 +1100)
dashboard: add Kind to Package struct
dashboard: add kind parameter to /packages handler

R=rsc, bsiegert, rogpeppe
CC=golang-dev
https://golang.org/cl/5572062

misc/dashboard/app/build/build.go
misc/dashboard/app/build/handler.go
misc/dashboard/app/build/init.go [new file with mode: 0644]
misc/dashboard/app/build/test.go
misc/dashboard/app/build/ui.go

index 175812a3788f7586d1ae5f3da24dbd9ae74776a0..8dbefe9d38ed2a338aafb80b57e58538fc8a8e46 100644 (file)
@@ -22,6 +22,7 @@ const maxDatastoreStringLen = 500
 
 // A Package describes a package that is listed on the dashboard.
 type Package struct {
+       Kind    string // "subrepo", "external", or empty for the main Go tree
        Name    string
        Path    string // (empty for the main Go tree)
        NextNum int    // Num of the next head Commit
@@ -276,10 +277,17 @@ func GetTag(c appengine.Context, tag string) (*Tag, os.Error) {
        return t, nil
 }
 
-// Packages returns all non-Go packages.
-func Packages(c appengine.Context) ([]*Package, os.Error) {
+// Packages returns packages of the specified kind.
+// Kind must be one of "external" or "subrepo".
+func Packages(c appengine.Context, kind string) ([]*Package, os.Error) {
+       switch kind {
+       case "external", "subrepo":
+       default:
+               return nil, os.NewError(`kind must be one of "external" or "subrepo"`)
+       }
        var pkgs []*Package
-       for t := datastore.NewQuery("Package").Run(c); ; {
+       q := datastore.NewQuery("Package").Filter("Kind=", kind)
+       for t := q.Run(c); ; {
                pkg := new(Package)
                if _, err := t.Next(pkg); err == datastore.Done {
                        break
index b3e62ad467d45cc90f6f78f70b0a048a1ac9e173..9dcf128dc30f939317995072b114f9be6df2387c 100644 (file)
@@ -18,11 +18,6 @@ import (
 
 const commitsPerPage = 30
 
-// defaultPackages specifies the Package records to be created by initHandler.
-var defaultPackages = []*Package{
-       &Package{Name: "Go"},
-}
-
 // commitHandler retrieves commit data or records a new commit.
 //
 // For GET requests it returns a Commit value for the specified
@@ -217,14 +212,15 @@ func buildTodo(c appengine.Context, builder, packagePath, goHash string) (interf
 // packagesHandler returns a list of the non-Go Packages monitored
 // by the dashboard.
 func packagesHandler(r *http.Request) (interface{}, os.Error) {
+       kind := r.FormValue("kind")
        c := appengine.NewContext(r)
        now := cache.Now(c)
-       const key = "build-packages"
+       key := "build-packages-" + kind
        var p []*Package
        if cache.Get(r, now, key, &p) {
                return p, nil
        }
-       p, err := Packages(c)
+       p, err := Packages(c, kind)
        if err != nil {
                return nil, err
        }
@@ -355,25 +351,6 @@ func AuthHandler(h dashHandler) http.HandlerFunc {
        }
 }
 
-func initHandler(w http.ResponseWriter, r *http.Request) {
-       // TODO(adg): devise a better way of bootstrapping new packages
-       c := appengine.NewContext(r)
-       defer cache.Tick(c)
-       for _, p := range defaultPackages {
-               if err := datastore.Get(c, p.Key(c), new(Package)); err == nil {
-                       continue
-               } else if err != datastore.ErrNoSuchEntity {
-                       logErr(w, r, err)
-                       return
-               }
-               if _, err := datastore.Put(c, p.Key(c), p); err != nil {
-                       logErr(w, r, err)
-                       return
-               }
-       }
-       fmt.Fprint(w, "OK")
-}
-
 func keyHandler(w http.ResponseWriter, r *http.Request) {
        builder := r.FormValue("builder")
        if builder == "" {
diff --git a/misc/dashboard/app/build/init.go b/misc/dashboard/app/build/init.go
new file mode 100644 (file)
index 0000000..58c5382
--- /dev/null
@@ -0,0 +1,57 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package build
+
+import (
+       "fmt"
+       "http"
+
+       "appengine"
+       "appengine/datastore"
+       "cache"
+)
+
+// defaultPackages specifies the Package records to be created by initHandler.
+var defaultPackages = []*Package{
+       &Package{Name: "Go", Kind: "go"},
+}
+
+// subRepos specifies the Go project sub-repositories.
+var subRepos = []string{
+       "codereview",
+       "crypto",
+       "image",
+       "net",
+}
+
+// Put subRepos into defaultPackages.
+func init() {
+       for _, name := range subRepos {
+               p := &Package{
+                       Kind: "subrepo",
+                       Name: "go." + name,
+                       Path: "code.google.com/p/go." + name,
+               }
+               defaultPackages = append(defaultPackages, p)
+       }
+}
+
+func initHandler(w http.ResponseWriter, r *http.Request) {
+       c := appengine.NewContext(r)
+       defer cache.Tick(c)
+       for _, p := range defaultPackages {
+               if err := datastore.Get(c, p.Key(c), new(Package)); err == nil {
+                       continue
+               } else if err != datastore.ErrNoSuchEntity {
+                       logErr(w, r, err)
+                       return
+               }
+               if _, err := datastore.Put(c, p.Key(c), p); err != nil {
+                       logErr(w, r, err)
+                       return
+               }
+       }
+       fmt.Fprint(w, "OK")
+}
index a923969bc02b3fc0e9c92462ba0e6f099190788d..f22eac1a498a5792f562cd8243fc5bb0dd7b1e25 100644 (file)
@@ -34,7 +34,7 @@ var testEntityKinds = []string{
 
 const testPkg = "code.google.com/p/go.test"
 
-var testPackage = &Package{Name: "Test", Path: testPkg}
+var testPackage = &Package{Name: "Test", Kind: "subrepo", Path: testPkg}
 
 var testPackages = []*Package{
        &Package{Name: "Go", Path: ""},
@@ -61,7 +61,7 @@ var testRequests = []struct {
        res  interface{}
 }{
        // Packages
-       {"/packages", nil, nil, []*Package{testPackage}},
+       {"/packages?kind=subrepo", nil, nil, []*Package{testPackage}},
 
        // Go repo
        {"/commit", nil, tCommit("0001", "0000"), nil},
index 032fdbd84ee885952acbf626d77920b4ce430f2d..37a150063398011654e5822868c268e7f66f151b 100644 (file)
@@ -131,13 +131,13 @@ type PackageState struct {
        OK      bool
 }
 
-// TagState fetches the results for all non-Go packages at the specified tag.
+// TagState fetches the results for all Go subrepos at the specified tag.
 func TagState(c appengine.Context, name string) ([]*PackageState, os.Error) {
        tag, err := GetTag(c, name)
        if err != nil {
                return nil, err
        }
-       pkgs, err := Packages(c)
+       pkgs, err := Packages(c, "subrepo")
        if err != nil {
                return nil, err
        }