func handler_publish(w http.ResponseWriter, r *http.Request) { json := r.FormValue("pkg") if json == "" { http.Error(w, "Form value pkg is empty!", http.StatusBadRequest) return } // unmarshal PackageMeta from json meta := new(gopm_index.PackageMeta) err := meta.FromJson([]byte(json)) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } // check name uniqueness in the database ctx := appengine.NewContext(r) key := datastore.NewKey(ctx, "PackageMeta", meta.Name, 0, nil) entity := new(gopm_index.PackageMeta) err = datastore.Get(ctx, key, entity) if err == nil { http.Error(w, fmt.Sprintf("The package name '%v' already exists in the index registry.\n", meta.Name), http.StatusInternalServerError) return } if err != datastore.ErrNoSuchEntity { http.Error(w, err.Error(), http.StatusInternalServerError) return } _, err = datastore.Put(ctx, key, meta) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } update_full_index(ctx, w) fmt.Printf("Published a package '%v'\n", meta.Name) }