From a5f83917393dfe7b1af4fc4ba9490b6a07ea43e1 Mon Sep 17 00:00:00 2001 From: kortschak Date: Fri, 27 Jun 2014 09:25:29 +0930 Subject: [PATCH] Re-add main.go and add install instruction Updated .gitignore to alloy cayley to be kept. --- .gitignore | 1 - README.md | 5 +-- cmd/cayley/main.go | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 90 insertions(+), 5 deletions(-) create mode 100644 cmd/cayley/main.go diff --git a/.gitignore b/.gitignore index 0ed1b73..17c43e6 100644 --- a/.gitignore +++ b/.gitignore @@ -2,5 +2,4 @@ main *.test *.peg.go -cayley cayley.cfg diff --git a/README.md b/README.md index d2b2163..b656bee 100644 --- a/README.md +++ b/README.md @@ -52,10 +52,7 @@ Make sure you have the right packages installed. Mostly, this is just Go as a de Now you can clone the repository and build the project. ```bash -git clone git@github.com:google/cayley.git -cd cayley -make deps -make +go get github.com/google/cayley/cmd/cayley ``` And the `cayley` binary will be built and ready. diff --git a/cmd/cayley/main.go b/cmd/cayley/main.go new file mode 100644 index 0000000..153cf76 --- /dev/null +++ b/cmd/cayley/main.go @@ -0,0 +1,89 @@ +// Copyright 2014 The Cayley Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main + +import ( + "flag" + "fmt" + "os" + "runtime" + + "github.com/barakmich/glog" + + "github.com/google/cayley" + "github.com/google/cayley/config" + "github.com/google/cayley/graph" + "github.com/google/cayley/http" +) + +var tripleFile = flag.String("triples", "", "Triple File to load before going to REPL.") +var cpuprofile = flag.String("prof", "", "Output profiling file.") +var queryLanguage = flag.String("query_lang", "gremlin", "Use this parser as the query language.") +var configFile = flag.String("config", "", "Path to an explicit configuration file.") + +func Usage() { + fmt.Println("Cayley is a graph store and graph query layer.\n") + fmt.Println("Usage:") + fmt.Println(" cayley COMMAND [flags]\n") + fmt.Println("Commands:") + fmt.Println(" init\tCreate an empty database.") + fmt.Println(" load\tBulk-load a triple file into the database.") + fmt.Println(" http\tServe an HTTP endpoint on the given host and port.") + fmt.Println(" repl\tDrop into a REPL of the given query language.") + fmt.Println("\nFlags:") + flag.Parse() + flag.PrintDefaults() +} + +func main() { + // No command? It's time for usage. + if len(os.Args) == 1 { + Usage() + os.Exit(1) + } + cmd := os.Args[1] + newargs := make([]string, 0) + newargs = append(newargs, os.Args[0]) + newargs = append(newargs, os.Args[2:]...) + os.Args = newargs + flag.Parse() + var ts graph.TripleStore + cfg := config.ParseConfigFromFlagsAndFile(*configFile) + if os.Getenv("GOMAXPROCS") == "" { + runtime.GOMAXPROCS(runtime.NumCPU()) + glog.Infoln("Setting GOMAXPROCS to", runtime.NumCPU()) + } else { + glog.Infoln("GOMAXPROCS currently", os.Getenv("GOMAXPROCS"), " -- not adjusting") + } + switch cmd { + case "init": + cayley.CayleyInit(cfg, *tripleFile) + case "load": + ts = cayley.OpenTSFromConfig(cfg) + cayley.CayleyLoad(ts, cfg, *tripleFile, false) + ts.Close() + case "repl": + ts = cayley.OpenTSFromConfig(cfg) + cayley.CayleyRepl(ts, *queryLanguage, cfg) + ts.Close() + case "http": + ts = cayley.OpenTSFromConfig(cfg) + http.CayleyHTTP(ts, cfg) + ts.Close() + default: + fmt.Println("No command", cmd) + flag.Usage() + } +}