| // 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. |
| |
| // +build appengine |
| |
| package build |
| |
| import ( |
| "fmt" |
| "net/http" |
| |
| "appengine" |
| "appengine/datastore" |
| "cache" |
| ) |
| |
| // defaultPackages specifies the Package records to be created by initHandler. |
| var defaultPackages = []*Package{ |
| {Name: "Go", Kind: "go"}, |
| } |
| |
| // subRepos specifies the Go project sub-repositories. |
| var subRepos = []string{ |
| "blog", |
| "codereview", |
| "crypto", |
| "exp", |
| "image", |
| "net", |
| "talks", |
| "tools", |
| } |
| |
| // 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 { |
| err := datastore.Get(c, p.Key(c), new(Package)) |
| if _, ok := err.(*datastore.ErrFieldMismatch); ok { |
| // Some fields have been removed, so it's okay to ignore this error. |
| err = nil |
| } |
| if 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") |
| } |