diff --git a/bee.go b/bee.go index d855f3d..bcf3380 100644 --- a/bee.go +++ b/bee.go @@ -25,7 +25,7 @@ import ( "strings" ) -const version = "1.1.0" +const version = "1.1.1" type Command struct { // Run runs the command. @@ -82,6 +82,7 @@ var commands = []*Command{ cmdBale, cmdVersion, cmdGenerate, + cmdRundocs, } func main() { diff --git a/g.go b/g.go index 9bcf854..5c260eb 100644 --- a/g.go +++ b/g.go @@ -1,3 +1,17 @@ +// Copyright 2013 bee authors +// +// 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 "os" diff --git a/g_docs.go b/g_docs.go index ee3025e..8cae575 100644 --- a/g_docs.go +++ b/g_docs.go @@ -1,3 +1,17 @@ +// Copyright 2013 bee authors +// +// 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 ( diff --git a/rundocs.go b/rundocs.go new file mode 100644 index 0000000..7308ad9 --- /dev/null +++ b/rundocs.go @@ -0,0 +1,140 @@ +// Copyright 2013 bee authors +// +// 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 ( + "archive/zip" + "fmt" + "io" + "log" + "net/http" + "os" + "path/filepath" +) + +var cmdRundocs = &Command{ + UsageLine: "rundocs [-isDownload=true] [-docport=8888]", + Short: "rundocs will run the docs server,default is 8089", + Long: ` +-d meaning will download the docs file from github +-p meaning server the Server on which port, default is 8089 + +`, +} + +const ( + swaggerlink = "https://github.com/beego/swagger/archive/v1.zip" +) + +type docValue string + +func (d *docValue) String() string { + return fmt.Sprint(*d) +} + +func (d *docValue) Set(value string) error { + *d = docValue(value) + return nil +} + +var isDownload docValue +var docport docValue + +func init() { + cmdRundocs.Run = runDocs + cmdRundocs.Flag.Var(&isDownload, "isDownload", "weather download the Swagger Docs") + cmdRundocs.Flag.Var(&docport, "docport", "doc server port") +} + +func runDocs(cmd *Command, args []string) { + if isDownload == "true" { + downloadFromUrl(swaggerlink, "swagger.zip") + err := unzipAndDelete("swagger.zip", "swagger") + if err != nil { + fmt.Println("has err exet unzipAndDelete", err) + } + } + if docport == "" { + docport = "8089" + } + fmt.Println("start the docs server on: http://127.0.0.1:" + docport) + log.Fatal(http.ListenAndServe(":"+string(docport), http.FileServer(http.Dir("swagger")))) +} + +func downloadFromUrl(url, fileName string) { + fmt.Println("Downloading", url, "to", fileName) + + output, err := os.Create(fileName) + if err != nil { + fmt.Println("Error while creating", fileName, "-", err) + return + } + defer output.Close() + + response, err := http.Get(url) + if err != nil { + fmt.Println("Error while downloading", url, "-", err) + return + } + defer response.Body.Close() + + n, err := io.Copy(output, response.Body) + if err != nil { + fmt.Println("Error while downloading", url, "-", err) + return + } + + fmt.Println(n, "bytes downloaded.") +} + +func unzipAndDelete(src, dest string) error { + fmt.Println("start to unzip file from " + src + " to " + dest) + r, err := zip.OpenReader(src) + if err != nil { + return err + } + defer r.Close() + + for _, f := range r.File { + rc, err := f.Open() + if err != nil { + return err + } + defer rc.Close() + + path := filepath.Join(dest, f.Name) + if f.FileInfo().IsDir() { + os.MkdirAll(path, f.Mode()) + } else { + f, err := os.OpenFile( + path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode()) + if err != nil { + return err + } + defer f.Close() + + _, err = io.Copy(f, rc) + if err != nil { + return err + } + } + } + + fmt.Println("Start delete src file " + src) + err = os.RemoveAll(src) + if err != nil { + return err + } + return nil +}