mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Sky doesn't need the git repo of the mojo repo. R=eseidel@chromium.org Review URL: https://codereview.chromium.org/1059113004
92 lines
2.5 KiB
Go
92 lines
2.5 KiB
Go
// Copyright (c) 2014 The Chromium 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 main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"os"
|
|
"path"
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
type skyHandlerRoot struct {
|
|
root string
|
|
}
|
|
|
|
func skyHandler(root string) http.Handler {
|
|
return &skyHandlerRoot{root}
|
|
}
|
|
|
|
func (handler *skyHandlerRoot) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|
if strings.HasPrefix(r.URL.Path, "/.git") {
|
|
w.WriteHeader(http.StatusNotFound)
|
|
return
|
|
}
|
|
path := path.Join(handler.root, r.URL.Path)
|
|
if strings.HasSuffix(path, ".sky") {
|
|
w.Header().Set("Content-Type", "text/sky")
|
|
}
|
|
w.Header().Set("Cache-Control", "no-cache")
|
|
http.ServeFile(w, r, path)
|
|
}
|
|
|
|
func usage() {
|
|
fmt.Fprintf(os.Stderr, "Usage: sky_server [flags] MOJO_SRC_ROOT PORT\n\n")
|
|
fmt.Fprintf(os.Stderr, "launches a basic http server with mappings into the\n")
|
|
fmt.Fprintf(os.Stderr, "mojo repository for framework/service paths.\n")
|
|
fmt.Fprintf(os.Stderr, "[flags] MUST be before arguments, because go:flag.\n\n")
|
|
flag.PrintDefaults()
|
|
os.Exit(2)
|
|
}
|
|
|
|
func addMapping(from_path string, to_path string) {
|
|
// Print to stderr to it's more obvious what this binary does.
|
|
fmt.Fprintf(os.Stderr, " %s -> %s\n", from_path, to_path)
|
|
http.Handle(from_path, http.StripPrefix(from_path, skyHandler(to_path)))
|
|
}
|
|
|
|
func main() {
|
|
var configuration = flag.String("t", "Release", "The target configuration (i.e. Release or Debug)")
|
|
|
|
flag.Parse()
|
|
flag.Usage = usage
|
|
// The built-in go:flag is awful. It only allows short-name arguments
|
|
// and they *must* be before any unnamed arguments. There are better ones:
|
|
// https://godoc.org/github.com/jessevdk/go-flags
|
|
// but for now we're using raw-go.
|
|
if flag.NArg() != 3 {
|
|
usage()
|
|
}
|
|
|
|
root, _ := filepath.Abs(flag.Arg(0))
|
|
port := flag.Arg(1)
|
|
packageRoot := flag.Arg(2)
|
|
|
|
// genRoot should not be needed once we figure out how mojom generation
|
|
// for sdk users should work.
|
|
genRoot := path.Join(root, "out", *configuration, "gen")
|
|
|
|
fmt.Fprintf(os.Stderr, "Mappings for localhost:%s:\n", port)
|
|
|
|
fmt.Fprintf(os.Stderr, " / -> %s\n", root)
|
|
http.Handle("/", skyHandler(root))
|
|
|
|
fmt.Fprintf(os.Stderr, " /echo_post -> custom echo handler\n")
|
|
http.HandleFunc("/echo_post", func(w http.ResponseWriter, r *http.Request) {
|
|
defer r.Body.Close()
|
|
body, _ := ioutil.ReadAll(r.Body)
|
|
w.Write(body)
|
|
})
|
|
|
|
addMapping("/gen/", genRoot)
|
|
addMapping("/packages/", packageRoot)
|
|
|
|
http.ListenAndServe(":"+port, nil)
|
|
}
|