diff options
Diffstat (limited to 'vendor/github.com/GeertJohan/go.rice')
24 files changed, 0 insertions, 2378 deletions
diff --git a/vendor/github.com/GeertJohan/go.rice/LICENSE b/vendor/github.com/GeertJohan/go.rice/LICENSE deleted file mode 100644 index 8b4409d7..00000000 --- a/vendor/github.com/GeertJohan/go.rice/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2013, Geert-Johan Riemer -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file diff --git a/vendor/github.com/GeertJohan/go.rice/appended.go b/vendor/github.com/GeertJohan/go.rice/appended.go deleted file mode 100644 index a986a0c5..00000000 --- a/vendor/github.com/GeertJohan/go.rice/appended.go +++ /dev/null @@ -1,138 +0,0 @@ -package rice - -import ( - "archive/zip" - "log" - "os" - "path/filepath" - "strings" - "time" - - "github.com/daaku/go.zipexe" - "github.com/kardianos/osext" -) - -// appendedBox defines an appended box -type appendedBox struct { - Name string // box name - Files map[string]*appendedFile // appended files (*zip.File) by full path -} - -type appendedFile struct { - zipFile *zip.File - dir bool - dirInfo *appendedDirInfo - children []*appendedFile - content []byte -} - -// appendedBoxes is a public register of appendes boxes -var appendedBoxes = make(map[string]*appendedBox) - -func init() { - // find if exec is appended - thisFile, err := osext.Executable() - if err != nil { - return // not appended or cant find self executable - } - closer, rd, err := zipexe.OpenCloser(thisFile) - if err != nil { - return // not appended - } - defer closer.Close() - - for _, f := range rd.File { - // get box and file name from f.Name - fileParts := strings.SplitN(strings.TrimLeft(filepath.ToSlash(f.Name), "/"), "/", 2) - boxName := fileParts[0] - var fileName string - if len(fileParts) > 1 { - fileName = fileParts[1] - } - - // find box or create new one if doesn't exist - box := appendedBoxes[boxName] - if box == nil { - box = &appendedBox{ - Name: boxName, - Files: make(map[string]*appendedFile), - } - appendedBoxes[boxName] = box - } - - // create and add file to box - af := &appendedFile{ - zipFile: f, - } - if f.Comment == "dir" { - af.dir = true - af.dirInfo = &appendedDirInfo{ - name: filepath.Base(af.zipFile.Name), - //++ TODO: use zip modtime when that is set correctly: af.zipFile.ModTime() - time: time.Now(), - } - } else { - // this is a file, we need it's contents so we can create a bytes.Reader when the file is opened - // make a new byteslice - af.content = make([]byte, af.zipFile.FileInfo().Size()) - // ignore reading empty files from zip (empty file still is a valid file to be read though!) - if len(af.content) > 0 { - // open io.ReadCloser - rc, err := af.zipFile.Open() - if err != nil { - af.content = nil // this will cause an error when the file is being opened or seeked (which is good) - // TODO: it's quite blunt to just log this stuff. but this is in init, so rice.Debug can't be changed yet.. - log.Printf("error opening appended file %s: %v", af.zipFile.Name, err) - } else { - _, err = rc.Read(af.content) - rc.Close() - if err != nil { - af.content = nil // this will cause an error when the file is being opened or seeked (which is good) - // TODO: it's quite blunt to just log this stuff. but this is in init, so rice.Debug can't be changed yet.. - log.Printf("error reading data for appended file %s: %v", af.zipFile.Name, err) - } - } - } - } - - // add appendedFile to box file list - box.Files[fileName] = af - - // add to parent dir (if any) - dirName := filepath.Dir(fileName) - if dirName == "." { - dirName = "" - } - if fileName != "" { // don't make box root dir a child of itself - if dir := box.Files[dirName]; dir != nil { - dir.children = append(dir.children, af) - } - } - } -} - -// implements os.FileInfo. -// used for Readdir() -type appendedDirInfo struct { - name string - time time.Time -} - -func (adi *appendedDirInfo) Name() string { - return adi.name -} -func (adi *appendedDirInfo) Size() int64 { - return 0 -} -func (adi *appendedDirInfo) Mode() os.FileMode { - return os.ModeDir -} -func (adi *appendedDirInfo) ModTime() time.Time { - return adi.time -} -func (adi *appendedDirInfo) IsDir() bool { - return true -} -func (adi *appendedDirInfo) Sys() interface{} { - return nil -} diff --git a/vendor/github.com/GeertJohan/go.rice/box.go b/vendor/github.com/GeertJohan/go.rice/box.go deleted file mode 100644 index 71482e24..00000000 --- a/vendor/github.com/GeertJohan/go.rice/box.go +++ /dev/null @@ -1,337 +0,0 @@ -package rice - -import ( - "bytes" - "errors" - "fmt" - "io/ioutil" - "os" - "path/filepath" - "runtime" - "strings" - "time" - - "github.com/GeertJohan/go.rice/embedded" -) - -// Box abstracts a directory for resources/files. -// It can either load files from disk, or from embedded code (when `rice --embed` was ran). -type Box struct { - name string - absolutePath string - embed *embedded.EmbeddedBox - appendd *appendedBox -} - -var defaultLocateOrder = []LocateMethod{LocateEmbedded, LocateAppended, LocateFS} - -func findBox(name string, order []LocateMethod) (*Box, error) { - b := &Box{name: name} - - // no support for absolute paths since gopath can be different on different machines. - // therefore, required box must be located relative to package requiring it. - if filepath.IsAbs(name) { - return nil, errors.New("given name/path is absolute") - } - - var err error - for _, method := range order { - switch method { - case LocateEmbedded: - if embed := embedded.EmbeddedBoxes[name]; embed != nil { - b.embed = embed - return b, nil - } - - case LocateAppended: - appendedBoxName := strings.Replace(name, `/`, `-`, -1) - if appendd := appendedBoxes[appendedBoxName]; appendd != nil { - b.appendd = appendd - return b, nil - } - - case LocateFS: - // resolve absolute directory path - err := b.resolveAbsolutePathFromCaller() - if err != nil { - continue - } - // check if absolutePath exists on filesystem - info, err := os.Stat(b.absolutePath) - if err != nil { - continue - } - // check if absolutePath is actually a directory - if !info.IsDir() { - err = errors.New("given name/path is not a directory") - continue - } - return b, nil - case LocateWorkingDirectory: - // resolve absolute directory path - err := b.resolveAbsolutePathFromWorkingDirectory() - if err != nil { - continue - } - // check if absolutePath exists on filesystem - info, err := os.Stat(b.absolutePath) - if err != nil { - continue - } - // check if absolutePath is actually a directory - if !info.IsDir() { - err = errors.New("given name/path is not a directory") - continue - } - return b, nil - } - } - - if err == nil { - err = fmt.Errorf("could not locate box %q", name) - } - - return nil, err -} - -// FindBox returns a Box instance for given name. -// When the given name is a relative path, it's base path will be the calling pkg/cmd's source root. -// When the given name is absolute, it's absolute. derp. -// Make sure the path doesn't contain any sensitive information as it might be placed into generated go source (embedded). -func FindBox(name string) (*Box, error) { - return findBox(name, defaultLocateOrder) -} - -// MustFindBox returns a Box instance for given name, like FindBox does. -// It does not return an error, instead it panics when an error occurs. -func MustFindBox(name string) *Box { - box, err := findBox(name, defaultLocateOrder) - if err != nil { - panic(err) - } - return box -} - -// This is injected as a mutable function literal so that we can mock it out in -// tests and return a fixed test file. -var resolveAbsolutePathFromCaller = func(name string, nStackFrames int) (string, error) { - _, callingGoFile, _, ok := runtime.Caller(nStackFrames) - if !ok { - return "", errors.New("couldn't find caller on stack") - } - - // resolve to proper path - pkgDir := filepath.Dir(callingGoFile) - // fix for go cover - const coverPath = "_test/_obj_test" - if !filepath.IsAbs(pkgDir) { - if i := strings.Index(pkgDir, coverPath); i >= 0 { - pkgDir = pkgDir[:i] + pkgDir[i+len(coverPath):] // remove coverPath - pkgDir = filepath.Join(os.Getenv("GOPATH"), "src", pkgDir) // make absolute - } - } - return filepath.Join(pkgDir, name), nil -} - -func (b *Box) resolveAbsolutePathFromCaller() error { - path, err := resolveAbsolutePathFromCaller(b.name, 4) - if err != nil { - return err - } - b.absolutePath = path - return nil - -} - -func (b *Box) resolveAbsolutePathFromWorkingDirectory() error { - path, err := os.Getwd() - if err != nil { - return err - } - b.absolutePath = filepath.Join(path, b.name) - return nil -} - -// IsEmbedded indicates wether this box was embedded into the application -func (b *Box) IsEmbedded() bool { - return b.embed != nil -} - -// IsAppended indicates wether this box was appended to the application -func (b *Box) IsAppended() bool { - return b.appendd != nil -} - -// Time returns how actual the box is. -// When the box is embedded, it's value is saved in the embedding code. -// When the box is live, this methods returns time.Now() -func (b *Box) Time() time.Time { - if b.IsEmbedded() { - return b.embed.Time - } - - //++ TODO: return time for appended box - - return time.Now() -} - -// Open opens a File from the box -// If there is an error, it will be of type *os.PathError. -func (b *Box) Open(name string) (*File, error) { - if Debug { - fmt.Printf("Open(%s)\n", name) - } - - if b.IsEmbedded() { - if Debug { - fmt.Println("Box is embedded") - } - - // trim prefix (paths are relative to box) - name = strings.TrimLeft(name, "/") - if Debug { - fmt.Printf("Trying %s\n", name) - } - - // search for file - ef := b.embed.Files[name] - if ef == nil { - if Debug { - fmt.Println("Didn't find file in embed") - } - // file not found, try dir - ed := b.embed.Dirs[name] - if ed == nil { - if Debug { - fmt.Println("Didn't find dir in embed") - } - // dir not found, error out - return nil, &os.PathError{ - Op: "open", - Path: name, - Err: os.ErrNotExist, - } - } - if Debug { - fmt.Println("Found dir. Returning virtual dir") - } - vd := newVirtualDir(ed) - return &File{virtualD: vd}, nil - } - - // box is embedded - if Debug { - fmt.Println("Found file. Returning virtual file") - } - vf := newVirtualFile(ef) - return &File{virtualF: vf}, nil - } - - if b.IsAppended() { - // trim prefix (paths are relative to box) - name = strings.TrimLeft(name, "/") - - // search for file - appendedFile := b.appendd.Files[name] - if appendedFile == nil { - return nil, &os.PathError{ - Op: "open", - Path: name, - Err: os.ErrNotExist, - } - } - - // create new file - f := &File{ - appendedF: appendedFile, - } - - // if this file is a directory, we want to be able to read and seek - if !appendedFile.dir { - // looks like malformed data in zip, error now - if appendedFile.content == nil { - return nil, &os.PathError{ - Op: "open", - Path: "name", - Err: errors.New("error reading data from zip file"), - } - } - // create new bytes.Reader - f.appendedFileReader = bytes.NewReader(appendedFile.content) - } - - // all done - return f, nil - } - - // perform os open - if Debug { - fmt.Printf("Using os.Open(%s)", filepath.Join(b.absolutePath, name)) - } - file, err := os.Open(filepath.Join(b.absolutePath, name)) - if err != nil { - return nil, err - } - return &File{realF: file}, nil -} - -// Bytes returns the content of the file with given name as []byte. -func (b *Box) Bytes(name string) ([]byte, error) { - file, err := b.Open(name) - if err != nil { - return nil, err - } - defer file.Close() - - content, err := ioutil.ReadAll(file) - if err != nil { - return nil, err - } - - return content, nil -} - -// MustBytes returns the content of the file with given name as []byte. -// panic's on error. -func (b *Box) MustBytes(name string) []byte { - bts, err := b.Bytes(name) - if err != nil { - panic(err) - } - return bts -} - -// String returns the content of the file with given name as string. -func (b *Box) String(name string) (string, error) { - // check if box is embedded, optimized fast path - if b.IsEmbedded() { - // find file in embed - ef := b.embed.Files[name] - if ef == nil { - return "", os.ErrNotExist - } - // return as string - return ef.Content, nil - } - - bts, err := b.Bytes(name) - if err != nil { - return "", err - } - return string(bts), nil -} - -// MustString returns the content of the file with given name as string. -// panic's on error. -func (b *Box) MustString(name string) string { - str, err := b.String(name) - if err != nil { - panic(err) - } - return str -} - -// Name returns the name of the box -func (b *Box) Name() string { - return b.name -} diff --git a/vendor/github.com/GeertJohan/go.rice/config.go b/vendor/github.com/GeertJohan/go.rice/config.go deleted file mode 100644 index 45eb398f..00000000 --- a/vendor/github.com/GeertJohan/go.rice/config.go +++ /dev/null @@ -1,39 +0,0 @@ -package rice - -// LocateMethod defines how a box is located. -type LocateMethod int - -const ( - LocateFS = LocateMethod(iota) // Locate on the filesystem according to package path. - LocateAppended // Locate boxes appended to the executable. - LocateEmbedded // Locate embedded boxes. - LocateWorkingDirectory // Locate on the binary working directory -) - -// Config allows customizing the box lookup behavior. -type Config struct { - // LocateOrder defines the priority order that boxes are searched for. By - // default, the package global FindBox searches for embedded boxes first, - // then appended boxes, and then finally boxes on the filesystem. That - // search order may be customized by provided the ordered list here. Leaving - // out a particular method will omit that from the search space. For - // example, []LocateMethod{LocateEmbedded, LocateAppended} will never search - // the filesystem for boxes. - LocateOrder []LocateMethod -} - -// FindBox searches for boxes using the LocateOrder of the config. -func (c *Config) FindBox(boxName string) (*Box, error) { - return findBox(boxName, c.LocateOrder) -} - -// MustFindBox searches for boxes using the LocateOrder of the config, like -// FindBox does. It does not return an error, instead it panics when an error -// occurs. -func (c *Config) MustFindBox(boxName string) *Box { - box, err := findBox(boxName, c.LocateOrder) - if err != nil { - panic(err) - } - return box -} diff --git a/vendor/github.com/GeertJohan/go.rice/debug.go b/vendor/github.com/GeertJohan/go.rice/debug.go deleted file mode 100644 index 2e68c842..00000000 --- a/vendor/github.com/GeertJohan/go.rice/debug.go +++ /dev/null @@ -1,4 +0,0 @@ -package rice - -// Debug can be set to true to enable debugging. -var Debug = false diff --git a/vendor/github.com/GeertJohan/go.rice/embedded.go b/vendor/github.com/GeertJohan/go.rice/embedded.go deleted file mode 100644 index 4f03fe1f..00000000 --- a/vendor/github.com/GeertJohan/go.rice/embedded.go +++ /dev/null @@ -1,90 +0,0 @@ -package rice - -import ( - "os" - "time" - - "github.com/GeertJohan/go.rice/embedded" -) - -// re-type to make exported methods invisible to user (godoc) -// they're not required for the user -// embeddedDirInfo implements os.FileInfo -type embeddedDirInfo embedded.EmbeddedDir - -// Name returns the base name of the directory -// (implementing os.FileInfo) -func (ed *embeddedDirInfo) Name() string { - return ed.Filename -} - -// Size always returns 0 -// (implementing os.FileInfo) -func (ed *embeddedDirInfo) Size() int64 { - return 0 -} - -// Mode returns the file mode bits -// (implementing os.FileInfo) -func (ed *embeddedDirInfo) Mode() os.FileMode { - return os.FileMode(0555 | os.ModeDir) // dr-xr-xr-x -} - -// ModTime returns the modification time -// (implementing os.FileInfo) -func (ed *embeddedDirInfo) ModTime() time.Time { - return ed.DirModTime -} - -// IsDir returns the abbreviation for Mode().IsDir() (always true) -// (implementing os.FileInfo) -func (ed *embeddedDirInfo) IsDir() bool { - return true -} - -// Sys returns the underlying data source (always nil) -// (implementing os.FileInfo) -func (ed *embeddedDirInfo) Sys() interface{} { - return nil -} - -// re-type to make exported methods invisible to user (godoc) -// they're not required for the user -// embeddedFileInfo implements os.FileInfo -type embeddedFileInfo embedded.EmbeddedFile - -// Name returns the base name of the file -// (implementing os.FileInfo) -func (ef *embeddedFileInfo) Name() string { - return ef.Filename -} - -// Size returns the length in bytes for regular files; system-dependent for others -// (implementing os.FileInfo) -func (ef *embeddedFileInfo) Size() int64 { - return int64(len(ef.Content)) -} - -// Mode returns the file mode bits -// (implementing os.FileInfo) -func (ef *embeddedFileInfo) Mode() os.FileMode { - return os.FileMode(0555) // r-xr-xr-x -} - -// ModTime returns the modification time -// (implementing os.FileInfo) -func (ef *embeddedFileInfo) ModTime() time.Time { - return ef.FileModTime -} - -// IsDir returns the abbreviation for Mode().IsDir() (always false) -// (implementing os.FileInfo) -func (ef *embeddedFileInfo) IsDir() bool { - return false -} - -// Sys returns the underlying data source (always nil) -// (implementing os.FileInfo) -func (ef *embeddedFileInfo) Sys() interface{} { - return nil -} diff --git a/vendor/github.com/GeertJohan/go.rice/embedded/embedded.go b/vendor/github.com/GeertJohan/go.rice/embedded/embedded.go deleted file mode 100644 index bba8e588..00000000 --- a/vendor/github.com/GeertJohan/go.rice/embedded/embedded.go +++ /dev/null @@ -1,80 +0,0 @@ -// Package embedded defines embedded data types that are shared between the go.rice package and generated code. -package embedded - -import ( - "fmt" - "path/filepath" - "strings" - "time" -) - -const ( - EmbedTypeGo = 0 - EmbedTypeSyso = 1 -) - -// EmbeddedBox defines an embedded box -type EmbeddedBox struct { - Name string // box name - Time time.Time // embed time - EmbedType int // kind of embedding - Files map[string]*EmbeddedFile // ALL embedded files by full path - Dirs map[string]*EmbeddedDir // ALL embedded dirs by full path -} - -// Link creates the ChildDirs and ChildFiles links in all EmbeddedDir's -func (e *EmbeddedBox) Link() { - for path, ed := range e.Dirs { - fmt.Println(path) - ed.ChildDirs = make([]*EmbeddedDir, 0) - ed.ChildFiles = make([]*EmbeddedFile, 0) - } - for path, ed := range e.Dirs { - parentDirpath, _ := filepath.Split(path) - if strings.HasSuffix(parentDirpath, "/") { - parentDirpath = parentDirpath[:len(parentDirpath)-1] - } - parentDir := e.Dirs[parentDirpath] - if parentDir == nil { - panic("parentDir `" + parentDirpath + "` is missing in embedded box") - } - parentDir.ChildDirs = append(parentDir.ChildDirs, ed) - } - for path, ef := range e.Files { - dirpath, _ := filepath.Split(path) - if strings.HasSuffix(dirpath, "/") { - dirpath = dirpath[:len(dirpath)-1] - } - dir := e.Dirs[dirpath] - if dir == nil { - panic("dir `" + dirpath + "` is missing in embedded box") - } - dir.ChildFiles = append(dir.ChildFiles, ef) - } -} - -// EmbeddedDir is instanced in the code generated by the rice tool and contains all necicary information about an embedded file -type EmbeddedDir struct { - Filename string - DirModTime time.Time - ChildDirs []*EmbeddedDir // direct childs, as returned by virtualDir.Readdir() - ChildFiles []*EmbeddedFile // direct childs, as returned by virtualDir.Readdir() -} - -// EmbeddedFile is instanced in the code generated by the rice tool and contains all necicary information about an embedded file -type EmbeddedFile struct { - Filename string // filename - FileModTime time.Time - Content string -} - -// EmbeddedBoxes is a public register of embedded boxes -var EmbeddedBoxes = make(map[string]*EmbeddedBox) - -// RegisterEmbeddedBox registers an EmbeddedBox -func RegisterEmbeddedBox(name string, box *EmbeddedBox) { - if _, exists := EmbeddedBoxes[name]; exists { - panic(fmt.Sprintf("EmbeddedBox with name `%s` exists already", name)) - } - EmbeddedBoxes[name] = box -} diff --git a/vendor/github.com/GeertJohan/go.rice/example/example.go b/vendor/github.com/GeertJohan/go.rice/example/example.go deleted file mode 100644 index 68f189f3..00000000 --- a/vendor/github.com/GeertJohan/go.rice/example/example.go +++ /dev/null @@ -1,69 +0,0 @@ -package main - -import ( - "encoding/hex" - "fmt" - "log" - "net/http" - "os" - "text/template" - - "github.com/GeertJohan/go.rice" - "github.com/davecgh/go-spew/spew" -) - -func main() { - conf := rice.Config{ - LocateOrder: []rice.LocateMethod{rice.LocateEmbedded, rice.LocateAppended, rice.LocateFS}, - } - box, err := conf.FindBox("example-files") - if err != nil { - log.Fatalf("error opening rice.Box: %s\n", err) - } - // spew.Dump(box) - - contentString, err := box.String("file.txt") - if err != nil { - log.Fatalf("could not read file contents as string: %s\n", err) - } - log.Printf("Read some file contents as string:\n%s\n", contentString) - - contentBytes, err := box.Bytes("file.txt") - if err != nil { - log.Fatalf("could not read file contents as byteSlice: %s\n", err) - } - log.Printf("Read some file contents as byteSlice:\n%s\n", hex.Dump(contentBytes)) - - file, err := box.Open("file.txt") - if err != nil { - log.Fatalf("could not open file: %s\n", err) - } - spew.Dump(file) - - // find/create a rice.Box - templateBox, err := rice.FindBox("example-templates") - if err != nil { - log.Fatal(err) - } - // get file contents as string - templateString, err := templateBox.String("message.tmpl") - if err != nil { - log.Fatal(err) - } - // parse and execute the template - tmplMessage, err := template.New("message").Parse(templateString) - if err != nil { - log.Fatal(err) - } - tmplMessage.Execute(os.Stdout, map[string]string{"Message": "Hello, world!"}) - - http.Handle("/", http.FileServer(box.HTTPBox())) - go func() { - fmt.Println("Serving files on :8080, press ctrl-C to exit") - err := http.ListenAndServe(":8080", nil) - if err != nil { - log.Fatalf("error serving files: %v", err) - } - }() - select {} -} diff --git a/vendor/github.com/GeertJohan/go.rice/file.go b/vendor/github.com/GeertJohan/go.rice/file.go deleted file mode 100644 index 606a1885..00000000 --- a/vendor/github.com/GeertJohan/go.rice/file.go +++ /dev/null @@ -1,144 +0,0 @@ -package rice - -import ( - "bytes" - "errors" - "os" - "path/filepath" -) - -// File implements the io.Reader, io.Seeker, io.Closer and http.File interfaces -type File struct { - // File abstracts file methods so the user doesn't see the difference between rice.virtualFile, rice.virtualDir and os.File - // TODO: maybe use internal File interface and four implementations: *os.File, appendedFile, virtualFile, virtualDir - - // real file on disk - realF *os.File - - // when embedded (go) - virtualF *virtualFile - virtualD *virtualDir - - // when appended (zip) - appendedF *appendedFile - appendedFileReader *bytes.Reader - // TODO: is appendedFileReader subject of races? Might need a lock here.. -} - -// Close is like (*os.File).Close() -// Visit http://golang.org/pkg/os/#File.Close for more information -func (f *File) Close() error { - if f.appendedF != nil { - if f.appendedFileReader == nil { - return errors.New("already closed") - } - f.appendedFileReader = nil - return nil - } - if f.virtualF != nil { - return f.virtualF.close() - } - if f.virtualD != nil { - return f.virtualD.close() - } - return f.realF.Close() -} - -// Stat is like (*os.File).Stat() -// Visit http://golang.org/pkg/os/#File.Stat for more information -func (f *File) Stat() (os.FileInfo, error) { - if f.appendedF != nil { - if f.appendedF.dir { - return f.appendedF.dirInfo, nil - } - if f.appendedFileReader == nil { - return nil, errors.New("file is closed") - } - return f.appendedF.zipFile.FileInfo(), nil - } - if f.virtualF != nil { - return f.virtualF.stat() - } - if f.virtualD != nil { - return f.virtualD.stat() - } - return f.realF.Stat() -} - -// Readdir is like (*os.File).Readdir() -// Visit http://golang.org/pkg/os/#File.Readdir for more information -func (f *File) Readdir(count int) ([]os.FileInfo, error) { - if f.appendedF != nil { - if f.appendedF.dir { - fi := make([]os.FileInfo, 0, len(f.appendedF.children)) - for _, childAppendedFile := range f.appendedF.children { - if childAppendedFile.dir { - fi = append(fi, childAppendedFile.dirInfo) - } else { - fi = append(fi, childAppendedFile.zipFile.FileInfo()) - } - } - return fi, nil - } - //++ TODO: is os.ErrInvalid the correct error for Readdir on file? - return nil, os.ErrInvalid - } - if f.virtualF != nil { - return f.virtualF.readdir(count) - } - if f.virtualD != nil { - return f.virtualD.readdir(count) - } - return f.realF.Readdir(count) -} - -// Read is like (*os.File).Read() -// Visit http://golang.org/pkg/os/#File.Read for more information -func (f *File) Read(bts []byte) (int, error) { - if f.appendedF != nil { - if f.appendedFileReader == nil { - return 0, &os.PathError{ - Op: "read", - Path: filepath.Base(f.appendedF.zipFile.Name), - Err: errors.New("file is closed"), - } - } - if f.appendedF.dir { - return 0, &os.PathError{ - Op: "read", - Path: filepath.Base(f.appendedF.zipFile.Name), - Err: errors.New("is a directory"), - } - } - return f.appendedFileReader.Read(bts) - } - if f.virtualF != nil { - return f.virtualF.read(bts) - } - if f.virtualD != nil { - return f.virtualD.read(bts) - } - return f.realF.Read(bts) -} - -// Seek is like (*os.File).Seek() -// Visit http://golang.org/pkg/os/#File.Seek for more information -func (f *File) Seek(offset int64, whence int) (int64, error) { - if f.appendedF != nil { - if f.appendedFileReader == nil { - return 0, &os.PathError{ - Op: "seek", - Path: filepath.Base(f.appendedF.zipFile.Name), - Err: errors.New("file is closed"), - } - } - return f.appendedFileReader.Seek(offset, whence) - } - if f.virtualF != nil { - return f.virtualF.seek(offset, whence) - } - if f.virtualD != nil { - return f.virtualD.seek(offset, whence) - } - return f.realF.Seek(offset, whence) -} diff --git a/vendor/github.com/GeertJohan/go.rice/http.go b/vendor/github.com/GeertJohan/go.rice/http.go deleted file mode 100644 index 3a61f0e1..00000000 --- a/vendor/github.com/GeertJohan/go.rice/http.go +++ /dev/null @@ -1,21 +0,0 @@ -package rice - -import ( - "net/http" -) - -// HTTPBox implements http.FileSystem which allows the use of Box with a http.FileServer. -// e.g.: http.Handle("/", http.FileServer(rice.MustFindBox("http-files").HTTPBox())) -type HTTPBox struct { - *Box -} - -// HTTPBox creates a new HTTPBox from an existing Box -func (b *Box) HTTPBox() *HTTPBox { - return &HTTPBox{b} -} - -// Open returns a File using the http.File interface -func (hb *HTTPBox) Open(name string) (http.File, error) { - return hb.Box.Open(name) -} diff --git a/vendor/github.com/GeertJohan/go.rice/rice/append.go b/vendor/github.com/GeertJohan/go.rice/rice/append.go deleted file mode 100644 index ae3d95fd..00000000 --- a/vendor/github.com/GeertJohan/go.rice/rice/append.go +++ /dev/null @@ -1,172 +0,0 @@ -package main - -import ( - "archive/zip" - "fmt" - "go/build" - "io" - "os" - "os/exec" - "path/filepath" - "runtime" - "strings" - "time" - - "github.com/daaku/go.zipexe" -) - -func operationAppend(pkgs []*build.Package) { - if runtime.GOOS == "windows" { - _, err := exec.LookPath("zip") - if err != nil { - fmt.Println("#### WARNING ! ####") - fmt.Println("`rice append` is known not to work under windows because the `zip` command is not available. Please let me know if you got this to work (and how).") - } - } - - // MARKED FOR DELETION - // This is actually not required, the append command now has the option --exec required. - // // check if package is a command - // if !pkg.IsCommand() { - // fmt.Println("Error: can not append to non-main package. Please follow instructions at github.com/GeertJohan/go.rice") - // os.Exit(1) - // } - - // create tmp zipfile - tmpZipfileName := filepath.Join(os.TempDir(), fmt.Sprintf("ricebox-%d-%s.zip", time.Now().Unix(), randomString(10))) - verbosef("Will create tmp zipfile: %s\n", tmpZipfileName) - tmpZipfile, err := os.Create(tmpZipfileName) - if err != nil { - fmt.Printf("Error creating tmp zipfile: %s\n", err) - os.Exit(1) - } - defer func() { - tmpZipfile.Close() - os.Remove(tmpZipfileName) - }() - - // find abs path for binary file - binfileName, err := filepath.Abs(flags.Append.Executable) - if err != nil { - fmt.Printf("Error finding absolute path for executable to append: %s\n", err) - os.Exit(1) - } - verbosef("Will append to file: %s\n", binfileName) - - // check that command doesn't already have zip appended - if rd, _ := zipexe.Open(binfileName); rd != nil { - fmt.Printf("Cannot append to already appended executable. Please remove %s and build a fresh one.\n", binfileName) - os.Exit(1) - } - - // open binfile - binfile, err := os.OpenFile(binfileName, os.O_WRONLY, os.ModeAppend) - if err != nil { - fmt.Printf("Error: unable to open executable file: %s\n", err) - os.Exit(1) - } - - // create zip.Writer - zipWriter := zip.NewWriter(tmpZipfile) - - for _, pkg := range pkgs { - // find boxes for this command - boxMap := findBoxes(pkg) - - // notify user when no calls to rice.FindBox are made (is this an error and therefore os.Exit(1) ? - if len(boxMap) == 0 { - fmt.Printf("no calls to rice.FindBox() or rice.MustFindBox() found in import path `%s`\n", pkg.ImportPath) - continue - } - - verbosef("\n") - - for boxname := range boxMap { - appendedBoxName := strings.Replace(boxname, `/`, `-`, -1) - - // walk box path's and insert files - boxPath := filepath.Clean(filepath.Join(pkg.Dir, boxname)) - filepath.Walk(boxPath, func(path string, info os.FileInfo, err error) error { - if info == nil { - fmt.Printf("Error: box \"%s\" not found on disk\n", path) - os.Exit(1) - } - // create zipFilename - zipFileName := filepath.Join(appendedBoxName, strings.TrimPrefix(path, boxPath)) - // write directories as empty file with comment "dir" - if info.IsDir() { - _, err := zipWriter.CreateHeader(&zip.FileHeader{ - Name: zipFileName, - Comment: "dir", - }) - if err != nil { - fmt.Printf("Error creating dir in tmp zip: %s\n", err) - os.Exit(1) - } - return nil - } - - // create zipFileWriter - zipFileHeader, err := zip.FileInfoHeader(info) - if err != nil { - fmt.Printf("Error creating zip FileHeader: %v\n", err) - os.Exit(1) - } - zipFileHeader.Name = zipFileName - zipFileWriter, err := zipWriter.CreateHeader(zipFileHeader) - if err != nil { - fmt.Printf("Error creating file in tmp zip: %s\n", err) - os.Exit(1) - } - srcFile, err := os.Open(path) - if err != nil { - fmt.Printf("Error opening file to append: %s\n", err) - os.Exit(1) - } - _, err = io.Copy(zipFileWriter, srcFile) - if err != nil { - fmt.Printf("Error copying file contents to zip: %s\n", err) - os.Exit(1) - } - srcFile.Close() - - return nil - }) - } - } - - err = zipWriter.Close() - if err != nil { - fmt.Printf("Error closing tmp zipfile: %s\n", err) - os.Exit(1) - } - - err = tmpZipfile.Sync() - if err != nil { - fmt.Printf("Error syncing tmp zipfile: %s\n", err) - os.Exit(1) - } - _, err = tmpZipfile.Seek(0, 0) - if err != nil { - fmt.Printf("Error seeking tmp zipfile: %s\n", err) - os.Exit(1) - } - _, err = binfile.Seek(0, 2) - if err != nil { - fmt.Printf("Error seeking bin file: %s\n", err) - os.Exit(1) - } - - _, err = io.Copy(binfile, tmpZipfile) - if err != nil { - fmt.Printf("Error appending zipfile to executable: %s\n", err) - os.Exit(1) - } - - zipA := exec.Command("zip", "-A", binfileName) - err = zipA.Run() - if err != nil { - fmt.Printf("Error setting zip offset: %s\n", err) - os.Exit(1) - } -} diff --git a/vendor/github.com/GeertJohan/go.rice/rice/clean.go b/vendor/github.com/GeertJohan/go.rice/rice/clean.go deleted file mode 100644 index 6155c064..00000000 --- a/vendor/github.com/GeertJohan/go.rice/rice/clean.go +++ /dev/null @@ -1,33 +0,0 @@ -package main - -import ( - "fmt" - "go/build" - "os" - "path/filepath" - "strings" -) - -func operationClean(pkg *build.Package) { - filepath.Walk(pkg.Dir, func(filename string, info os.FileInfo, err error) error { - if err != nil { - fmt.Printf("error walking pkg dir to clean files: %v\n", err) - os.Exit(1) - } - if info.IsDir() { - return nil - } - verbosef("checking file '%s'\n", filename) - if filepath.Base(filename) == "rice-box.go" || - strings.HasSuffix(filename, ".rice-box.go") || - strings.HasSuffix(filename, ".rice-box.syso") { - err := os.Remove(filename) - if err != nil { - fmt.Printf("error removing file (%s): %s\n", filename, err) - os.Exit(-1) - } - verbosef("removed file '%s'\n", filename) - } - return nil - }) -} diff --git a/vendor/github.com/GeertJohan/go.rice/rice/embed-go.go b/vendor/github.com/GeertJohan/go.rice/rice/embed-go.go deleted file mode 100644 index c5a0e9e8..00000000 --- a/vendor/github.com/GeertJohan/go.rice/rice/embed-go.go +++ /dev/null @@ -1,158 +0,0 @@ -package main - -import ( - "bytes" - "fmt" - "go/build" - "go/format" - "io" - "io/ioutil" - "log" - "os" - "path/filepath" - "strings" -) - -const boxFilename = "rice-box.go" - -func operationEmbedGo(pkg *build.Package) { - - boxMap := findBoxes(pkg) - - // notify user when no calls to rice.FindBox are made (is this an error and therefore os.Exit(1) ? - if len(boxMap) == 0 { - fmt.Println("no calls to rice.FindBox() found") - return - } - - verbosef("\n") - var boxes []*boxDataType - - for boxname := range boxMap { - // find path and filename for this box - boxPath := filepath.Join(pkg.Dir, boxname) - - // Check to see if the path for the box is a symbolic link. If so, simply - // box what the symbolic link points to. Note: the filepath.Walk function - // will NOT follow any nested symbolic links. This only handles the case - // where the root of the box is a symbolic link. - symPath, serr := os.Readlink(boxPath) - if serr == nil { - boxPath = symPath - } - - // verbose info - verbosef("embedding box '%s' to '%s'\n", boxname, boxFilename) - - // read box metadata - boxInfo, ierr := os.Stat(boxPath) - if ierr != nil { - fmt.Printf("Error: unable to access box at %s\n", boxPath) - os.Exit(1) - } - - // create box datastructure (used by template) - box := &boxDataType{ - BoxName: boxname, - UnixNow: boxInfo.ModTime().Unix(), - Files: make([]*fileDataType, 0), - Dirs: make(map[string]*dirDataType), - } - - if !boxInfo.IsDir() { - fmt.Printf("Error: Box %s must point to a directory but points to %s instead\n", - boxname, boxPath) - os.Exit(1) - } - - // fill box datastructure with file data - filepath.Walk(boxPath, func(path string, info os.FileInfo, err error) error { - if err != nil { - fmt.Printf("error walking box: %s\n", err) - os.Exit(1) - } - - filename := strings.TrimPrefix(path, boxPath) - filename = strings.Replace(filename, "\\", "/", -1) - filename = strings.TrimPrefix(filename, "/") - if info.IsDir() { - dirData := &dirDataType{ - Identifier: "dir" + nextIdentifier(), - FileName: filename, - ModTime: info.ModTime().Unix(), - ChildFiles: make([]*fileDataType, 0), - ChildDirs: make([]*dirDataType, 0), - } - verbosef("\tincludes dir: '%s'\n", dirData.FileName) - box.Dirs[dirData.FileName] = dirData - - // add tree entry (skip for root, it'll create a recursion) - if dirData.FileName != "" { - pathParts := strings.Split(dirData.FileName, "/") - parentDir := box.Dirs[strings.Join(pathParts[:len(pathParts)-1], "/")] - parentDir.ChildDirs = append(parentDir.ChildDirs, dirData) - } - } else { - fileData := &fileDataType{ - Identifier: "file" + nextIdentifier(), - FileName: filename, - ModTime: info.ModTime().Unix(), - } - verbosef("\tincludes file: '%s'\n", fileData.FileName) - fileData.Content, err = ioutil.ReadFile(path) - if err != nil { - fmt.Printf("error reading file content while walking box: %s\n", err) - os.Exit(1) - } - box.Files = append(box.Files, fileData) - - // add tree entry - pathParts := strings.Split(fileData.FileName, "/") - parentDir := box.Dirs[strings.Join(pathParts[:len(pathParts)-1], "/")] - if parentDir == nil { - fmt.Printf("Error: parent of %s is not within the box\n", path) - os.Exit(1) - } - parentDir.ChildFiles = append(parentDir.ChildFiles, fileData) - } - return nil - }) - boxes = append(boxes, box) - - } - - embedSourceUnformated := bytes.NewBuffer(make([]byte, 0)) - - // execute template to buffer - err := tmplEmbeddedBox.Execute( - embedSourceUnformated, - embedFileDataType{pkg.Name, boxes}, - ) - if err != nil { - log.Printf("error writing embedded box to file (template execute): %s\n", err) - os.Exit(1) - } - - // format the source code - embedSource, err := format.Source(embedSourceUnformated.Bytes()) - if err != nil { - log.Printf("error formatting embedSource: %s\n", err) - os.Exit(1) - } - - // create go file for box - boxFile, err := os.Create(filepath.Join(pkg.Dir, boxFilename)) - if err != nil { - log.Printf("error creating embedded box file: %s\n", err) - os.Exit(1) - } - defer boxFile.Close() - - // write source to file - _, err = io.Copy(boxFile, bytes.NewBuffer(embedSource)) - if err != nil { - log.Printf("error writing embedSource to file: %s\n", err) - os.Exit(1) - } - -} diff --git a/vendor/github.com/GeertJohan/go.rice/rice/embed-syso.go b/vendor/github.com/GeertJohan/go.rice/rice/embed-syso.go deleted file mode 100644 index beef3ea7..00000000 --- a/vendor/github.com/GeertJohan/go.rice/rice/embed-syso.go +++ /dev/null @@ -1,204 +0,0 @@ -package main - -import ( - "bytes" - "encoding/gob" - "fmt" - "go/build" - "io" - "io/ioutil" - "os" - "path/filepath" - "regexp" - "strings" - "text/template" - - "github.com/GeertJohan/go.rice/embedded" - "github.com/akavel/rsrc/coff" -) - -type sizedReader struct { - *bytes.Reader -} - -func (s sizedReader) Size() int64 { - return int64(s.Len()) -} - -var tmplEmbeddedSysoHelper *template.Template - -func init() { - var err error - tmplEmbeddedSysoHelper, err = template.New("embeddedSysoHelper").Parse(`package {{.Package}} -// ############# GENERATED CODE ##################### -// ## This file was generated by the rice tool. -// ## Do not edit unless you know what you're doing. -// ################################################## - -// extern char _bricebox_{{.Symname}}[], _ericebox_{{.Symname}}; -// int get_{{.Symname}}_length() { -// return &_ericebox_{{.Symname}} - _bricebox_{{.Symname}}; -// } -import "C" -import ( - "bytes" - "encoding/gob" - "github.com/GeertJohan/go.rice/embedded" - "unsafe" -) - -func init() { - ptr := unsafe.Pointer(&C._bricebox_{{.Symname}}) - bts := C.GoBytes(ptr, C.get_{{.Symname}}_length()) - embeddedBox := &embedded.EmbeddedBox{} - err := gob.NewDecoder(bytes.NewReader(bts)).Decode(embeddedBox) - if err != nil { - panic("error decoding embedded box: "+err.Error()) - } - embeddedBox.Link() - embedded.RegisterEmbeddedBox(embeddedBox.Name, embeddedBox) -}`) - if err != nil { - panic("could not parse template embeddedSysoHelper: " + err.Error()) - } -} - -type embeddedSysoHelperData struct { - Package string - Symname string -} - -func operationEmbedSyso(pkg *build.Package) { - - regexpSynameReplacer := regexp.MustCompile(`[^a-z0-9_]`) - - boxMap := findBoxes(pkg) - - // notify user when no calls to rice.FindBox are made (is this an error and therefore os.Exit(1) ? - if len(boxMap) == 0 { - fmt.Println("no calls to rice.FindBox() found") - return - } - - verbosef("\n") - - for boxname := range boxMap { - // find path and filename for this box - boxPath := filepath.Join(pkg.Dir, boxname) - boxFilename := strings.Replace(boxname, "/", "-", -1) - boxFilename = strings.Replace(boxFilename, "..", "back", -1) - boxFilename = strings.Replace(boxFilename, ".", "-", -1) - - // verbose info - verbosef("embedding box '%s'\n", boxname) - verbosef("\tto file %s\n", boxFilename) - - // read box metadata - boxInfo, ierr := os.Stat(boxPath) - if ierr != nil { - fmt.Printf("Error: unable to access box at %s\n", boxPath) - os.Exit(1) - } - - // create box datastructure (used by template) - box := &embedded.EmbeddedBox{ - Name: boxname, - Time: boxInfo.ModTime(), - EmbedType: embedded.EmbedTypeSyso, - Files: make(map[string]*embedded.EmbeddedFile), - Dirs: make(map[string]*embedded.EmbeddedDir), - } - - // fill box datastructure with file data - filepath.Walk(boxPath, func(path string, info os.FileInfo, err error) error { - if err != nil { - fmt.Printf("error walking box: %s\n", err) - os.Exit(1) - } - - filename := strings.TrimPrefix(path, boxPath) - filename = strings.Replace(filename, "\\", "/", -1) - filename = strings.TrimPrefix(filename, "/") - if info.IsDir() { - embeddedDir := &embedded.EmbeddedDir{ - Filename: filename, - DirModTime: info.ModTime(), - } - verbosef("\tincludes dir: '%s'\n", embeddedDir.Filename) - box.Dirs[embeddedDir.Filename] = embeddedDir - - // add tree entry (skip for root, it'll create a recursion) - if embeddedDir.Filename != "" { - pathParts := strings.Split(embeddedDir.Filename, "/") - parentDir := box.Dirs[strings.Join(pathParts[:len(pathParts)-1], "/")] - parentDir.ChildDirs = append(parentDir.ChildDirs, embeddedDir) - } - } else { - embeddedFile := &embedded.EmbeddedFile{ - Filename: filename, - FileModTime: info.ModTime(), - Content: "", - } - verbosef("\tincludes file: '%s'\n", embeddedFile.Filename) - contentBytes, err := ioutil.ReadFile(path) - if err != nil { - fmt.Printf("error reading file content while walking box: %s\n", err) - os.Exit(1) - } - embeddedFile.Content = string(contentBytes) - box.Files[embeddedFile.Filename] = embeddedFile - } - return nil - }) - - // encode embedded box to gob file - boxGobBuf := &bytes.Buffer{} - err := gob.NewEncoder(boxGobBuf).Encode(box) - if err != nil { - fmt.Printf("error encoding box to gob: %v\n", err) - os.Exit(1) - } - - verbosef("gob-encoded embeddedBox is %d bytes large\n", boxGobBuf.Len()) - - // write coff - symname := regexpSynameReplacer.ReplaceAllString(boxname, "_") - createCoffSyso(boxname, symname, "386", boxGobBuf.Bytes()) - createCoffSyso(boxname, symname, "amd64", boxGobBuf.Bytes()) - - // write go - sysoHelperData := embeddedSysoHelperData{ - Package: pkg.Name, - Symname: symname, - } - fileSysoHelper, err := os.Create(boxFilename + ".rice-box.go") - if err != nil { - fmt.Printf("error creating syso helper: %v\n", err) - os.Exit(1) - } - err = tmplEmbeddedSysoHelper.Execute(fileSysoHelper, sysoHelperData) - if err != nil { - fmt.Printf("error executing tmplEmbeddedSysoHelper: %v\n", err) - os.Exit(1) - } - } -} - -func createCoffSyso(boxFilename string, symname string, arch string, data []byte) { - boxCoff := coff.NewRDATA() - switch arch { - case "386": - case "amd64": - boxCoff.FileHeader.Machine = 0x8664 - default: - panic("invalid arch") - } - boxCoff.AddData("_bricebox_"+symname, sizedReader{bytes.NewReader(data)}) - boxCoff.AddData("_ericebox_"+symname, io.NewSectionReader(strings.NewReader("\000\000"), 0, 2)) // TODO: why? copied from rsrc, which copied it from as-generated - boxCoff.Freeze() - err := writeCoff(boxCoff, boxFilename+"_"+arch+".rice-box.syso") - if err != nil { - fmt.Printf("error writing %s coff/.syso: %v\n", arch, err) - os.Exit(1) - } -} diff --git a/vendor/github.com/GeertJohan/go.rice/rice/find.go b/vendor/github.com/GeertJohan/go.rice/rice/find.go deleted file mode 100644 index 6d78eeaa..00000000 --- a/vendor/github.com/GeertJohan/go.rice/rice/find.go +++ /dev/null @@ -1,150 +0,0 @@ -package main - -import ( - "fmt" - "go/ast" - "go/build" - "go/parser" - "go/token" - "os" - "path/filepath" - "strings" -) - -func badArgument(fileset *token.FileSet, p token.Pos) { - pos := fileset.Position(p) - filename := pos.Filename - base, err := os.Getwd() - if err == nil { - rpath, perr := filepath.Rel(base, pos.Filename) - if perr == nil { - filename = rpath - } - } - msg := fmt.Sprintf("%s:%d: Error: found call to rice.FindBox, "+ - "but argument must be a string literal.\n", filename, pos.Line) - fmt.Println(msg) - os.Exit(1) -} - -func findBoxes(pkg *build.Package) map[string]bool { - // create map of boxes to embed - var boxMap = make(map[string]bool) - - // create one list of files for this package - filenames := make([]string, 0, len(pkg.GoFiles)+len(pkg.CgoFiles)) - filenames = append(filenames, pkg.GoFiles...) - filenames = append(filenames, pkg.CgoFiles...) - - // loop over files, search for rice.FindBox(..) calls - for _, filename := range filenames { - // find full filepath - fullpath := filepath.Join(pkg.Dir, filename) - if strings.HasSuffix(filename, "rice-box.go") { - // Ignore *.rice-box.go files - verbosef("skipping file %q\n", fullpath) - continue - } - verbosef("scanning file %q\n", fullpath) - - fset := token.NewFileSet() - f, err := parser.ParseFile(fset, fullpath, nil, 0) - if err != nil { - fmt.Println(err) - os.Exit(1) - } - - var riceIsImported bool - ricePkgName := "rice" - for _, imp := range f.Imports { - if strings.HasSuffix(imp.Path.Value, "go.rice\"") { - if imp.Name != nil { - ricePkgName = imp.Name.Name - } - riceIsImported = true - break - } - } - if !riceIsImported { - // Rice wasn't imported, so we won't find a box. - continue - } - if ricePkgName == "_" { - // Rice pkg is unnamed, so we won't find a box. - continue - } - - // Inspect AST, looking for calls to (Must)?FindBox. - // First parameter of the func must be a basic literal. - // Identifiers won't be resolved. - var nextIdentIsBoxFunc bool - var nextBasicLitParamIsBoxName bool - var boxCall token.Pos - var variableToRemember string - var validVariablesForBoxes map[string]bool = make(map[string]bool) - - ast.Inspect(f, func(node ast.Node) bool { - if node == nil { - return false - } - switch x := node.(type) { - // this case fixes the var := func() style assignments, not assignments to vars declared separately from the assignment. - case *ast.AssignStmt: - var assign = node.(*ast.AssignStmt) - name, found := assign.Lhs[0].(*ast.Ident) - if found { - variableToRemember = name.Name - composite, first := assign.Rhs[0].(*ast.CompositeLit) - if first { - riceSelector, second := composite.Type.(*ast.SelectorExpr) - - if second { - callCorrect := riceSelector.Sel.Name == "Config" - packageName, third := riceSelector.X.(*ast.Ident) - - if third && callCorrect && packageName.Name == ricePkgName { - validVariablesForBoxes[name.Name] = true - verbosef("\tfound variable, saving to scan for boxes: %q\n", name.Name) - } - } - } - } - case *ast.Ident: - if nextIdentIsBoxFunc || ricePkgName == "." { - nextIdentIsBoxFunc = false - if x.Name == "FindBox" || x.Name == "MustFindBox" { - nextBasicLitParamIsBoxName = true - boxCall = x.Pos() - } - } else { - if x.Name == ricePkgName || validVariablesForBoxes[x.Name] { - nextIdentIsBoxFunc = true - } - } - case *ast.BasicLit: - if nextBasicLitParamIsBoxName { - if x.Kind == token.STRING { - nextBasicLitParamIsBoxName = false - // trim "" or `` - name := x.Value[1 : len(x.Value)-1] - boxMap[name] = true - verbosef("\tfound box %q\n", name) - } else { - badArgument(fset, boxCall) - } - } - - default: - if nextIdentIsBoxFunc { - nextIdentIsBoxFunc = false - } - if nextBasicLitParamIsBoxName { - badArgument(fset, boxCall) - } - } - return true - }) - } - - return boxMap -} diff --git a/vendor/github.com/GeertJohan/go.rice/rice/flags.go b/vendor/github.com/GeertJohan/go.rice/rice/flags.go deleted file mode 100644 index 167fea80..00000000 --- a/vendor/github.com/GeertJohan/go.rice/rice/flags.go +++ /dev/null @@ -1,80 +0,0 @@ -package main - -import ( - "fmt" - "go/build" - "os" - - goflags "github.com/jessevdk/go-flags" // rename import to `goflags` (file scope) so we can use `var flags` (package scope) -) - -// flags -var flags struct { - Verbose bool `long:"verbose" short:"v" description:"Show verbose debug information"` - ImportPaths []string `long:"import-path" short:"i" description:"Import path(s) to use. Using PWD when left empty. Specify multiple times for more import paths to append"` - - Append struct { - Executable string `long:"exec" description:"Executable to append" required:"true"` - } `command:"append"` - - EmbedGo struct{} `command:"embed-go" alias:"embed"` - EmbedSyso struct{} `command:"embed-syso"` - Clean struct{} `command:"clean"` -} - -// flags parser -var flagsParser *goflags.Parser - -// initFlags parses the given flags. -// when the user asks for help (-h or --help): the application exists with status 0 -// when unexpected flags is given: the application exits with status 1 -func parseArguments() { - // create flags parser in global var, for flagsParser.Active.Name (operation) - flagsParser = goflags.NewParser(&flags, goflags.Default) - - // parse flags - args, err := flagsParser.Parse() - if err != nil { - // assert the err to be a flags.Error - flagError := err.(*goflags.Error) - if flagError.Type == goflags.ErrHelp { - // user asked for help on flags. - // program can exit successfully - os.Exit(0) - } - if flagError.Type == goflags.ErrUnknownFlag { - fmt.Println("Use --help to view available options.") - os.Exit(1) - } - if flagError.Type == goflags.ErrRequired { - os.Exit(1) - } - fmt.Printf("Error parsing flags: %s\n", err) - os.Exit(1) - } - - // error on left-over arguments - if len(args) > 0 { - fmt.Printf("Unexpected arguments: %s\nUse --help to view available options.", args) - os.Exit(1) - } - - // default ImportPath to pwd when not set - if len(flags.ImportPaths) == 0 { - pwd, err := os.Getwd() - if err != nil { - fmt.Printf("error getting pwd: %s\n", err) - os.Exit(1) - } - verbosef("using pwd as import path\n") - // find non-absolute path for this pwd - pkg, err := build.ImportDir(pwd, build.FindOnly) - if err != nil { - fmt.Printf("error using current directory as import path: %s\n", err) - os.Exit(1) - } - flags.ImportPaths = append(flags.ImportPaths, pkg.ImportPath) - verbosef("using import paths: %s\n", flags.ImportPaths) - return - } -} diff --git a/vendor/github.com/GeertJohan/go.rice/rice/identifier.go b/vendor/github.com/GeertJohan/go.rice/rice/identifier.go deleted file mode 100644 index 445ee7da..00000000 --- a/vendor/github.com/GeertJohan/go.rice/rice/identifier.go +++ /dev/null @@ -1,14 +0,0 @@ -package main - -import ( - "strconv" - - "github.com/GeertJohan/go.incremental" -) - -var identifierCount incremental.Uint64 - -func nextIdentifier() string { - num := identifierCount.Next() - return strconv.FormatUint(num, 36) // 0123456789abcdefghijklmnopqrstuvwxyz -} diff --git a/vendor/github.com/GeertJohan/go.rice/rice/main.go b/vendor/github.com/GeertJohan/go.rice/rice/main.go deleted file mode 100644 index 7bac5fa3..00000000 --- a/vendor/github.com/GeertJohan/go.rice/rice/main.go +++ /dev/null @@ -1,68 +0,0 @@ -package main - -import ( - "fmt" - "go/build" - "log" - "os" -) - -func main() { - // parser arguments - parseArguments() - - // find package for path - var pkgs []*build.Package - for _, importPath := range flags.ImportPaths { - pkg := pkgForPath(importPath) - pkgs = append(pkgs, pkg) - } - - // switch on the operation to perform - switch flagsParser.Active.Name { - case "embed", "embed-go": - for _, pkg := range pkgs { - operationEmbedGo(pkg) - } - case "embed-syso": - log.Println("WARNING: embedding .syso is experimental..") - for _, pkg := range pkgs { - operationEmbedSyso(pkg) - } - case "append": - operationAppend(pkgs) - case "clean": - for _, pkg := range pkgs { - operationClean(pkg) - } - } - - // all done - verbosef("\n") - verbosef("rice finished successfully\n") -} - -// helper function to get *build.Package for given path -func pkgForPath(path string) *build.Package { - // get pwd for relative imports - pwd, err := os.Getwd() - if err != nil { - fmt.Printf("error getting pwd (required for relative imports): %s\n", err) - os.Exit(1) - } - - // read full package information - pkg, err := build.Import(path, pwd, 0) - if err != nil { - fmt.Printf("error reading package: %s\n", err) - os.Exit(1) - } - - return pkg -} - -func verbosef(format string, stuff ...interface{}) { - if flags.Verbose { - log.Printf(format, stuff...) - } -} diff --git a/vendor/github.com/GeertJohan/go.rice/rice/templates.go b/vendor/github.com/GeertJohan/go.rice/rice/templates.go deleted file mode 100644 index 02561ca0..00000000 --- a/vendor/github.com/GeertJohan/go.rice/rice/templates.go +++ /dev/null @@ -1,98 +0,0 @@ -package main - -import ( - "fmt" - "os" - "text/template" -) - -var tmplEmbeddedBox *template.Template - -func init() { - var err error - - // parse embedded box template - tmplEmbeddedBox, err = template.New("embeddedBox").Parse(`package {{.Package}} - -import ( - "github.com/GeertJohan/go.rice/embedded" - "time" -) - -{{range .Boxes}} -func init() { - - // define files - {{range .Files}}{{.Identifier}} := &embedded.EmbeddedFile{ - Filename: ` + "`" + `{{.FileName}}` + "`" + `, - FileModTime: time.Unix({{.ModTime}}, 0), - Content: string({{.Content | printf "%q"}}), - } - {{end}} - - // define dirs - {{range .Dirs}}{{.Identifier}} := &embedded.EmbeddedDir{ - Filename: ` + "`" + `{{.FileName}}` + "`" + `, - DirModTime: time.Unix({{.ModTime}}, 0), - ChildFiles: []*embedded.EmbeddedFile{ - {{range .ChildFiles}}{{.Identifier}}, // {{.FileName}} - {{end}} - }, - } - {{end}} - - // link ChildDirs - {{range .Dirs}}{{.Identifier}}.ChildDirs = []*embedded.EmbeddedDir{ - {{range .ChildDirs}}{{.Identifier}}, // {{.FileName}} - {{end}} - } - {{end}} - - // register embeddedBox - embedded.RegisterEmbeddedBox(` + "`" + `{{.BoxName}}` + "`" + `, &embedded.EmbeddedBox{ - Name: ` + "`" + `{{.BoxName}}` + "`" + `, - Time: time.Unix({{.UnixNow}}, 0), - Dirs: map[string]*embedded.EmbeddedDir{ - {{range .Dirs}}"{{.FileName}}": {{.Identifier}}, - {{end}} - }, - Files: map[string]*embedded.EmbeddedFile{ - {{range .Files}}"{{.FileName}}": {{.Identifier}}, - {{end}} - }, - }) -} -{{end}}`) - if err != nil { - fmt.Printf("error parsing embedded box template: %s\n", err) - os.Exit(-1) - } -} - -type embedFileDataType struct { - Package string - Boxes []*boxDataType -} - -type boxDataType struct { - BoxName string - UnixNow int64 - Files []*fileDataType - Dirs map[string]*dirDataType -} - -type fileDataType struct { - Identifier string - FileName string - Content []byte - ModTime int64 -} - -type dirDataType struct { - Identifier string - FileName string - Content []byte - ModTime int64 - ChildDirs []*dirDataType - ChildFiles []*fileDataType -} diff --git a/vendor/github.com/GeertJohan/go.rice/rice/util.go b/vendor/github.com/GeertJohan/go.rice/rice/util.go deleted file mode 100644 index c9ed4b0a..00000000 --- a/vendor/github.com/GeertJohan/go.rice/rice/util.go +++ /dev/null @@ -1,22 +0,0 @@ -package main - -import ( - "math/rand" - "time" -) - -// randomString generates a pseudo-random alpha-numeric string with given length. -func randomString(length int) string { - rand.Seed(time.Now().UnixNano()) - k := make([]rune, length) - for i := 0; i < length; i++ { - c := rand.Intn(35) - if c < 10 { - c += 48 // numbers (0-9) (0+48 == 48 == '0', 9+48 == 57 == '9') - } else { - c += 87 // lower case alphabets (a-z) (10+87 == 97 == 'a', 35+87 == 122 = 'z') - } - k[i] = rune(c) - } - return string(k) -} diff --git a/vendor/github.com/GeertJohan/go.rice/rice/writecoff.go b/vendor/github.com/GeertJohan/go.rice/rice/writecoff.go deleted file mode 100644 index 0c12c0ff..00000000 --- a/vendor/github.com/GeertJohan/go.rice/rice/writecoff.go +++ /dev/null @@ -1,42 +0,0 @@ -package main - -import ( - "fmt" - "os" - "reflect" - - "github.com/akavel/rsrc/binutil" - "github.com/akavel/rsrc/coff" -) - -// copied from github.com/akavel/rsrc -// LICENSE: MIT -// Copyright 2013-2014 The rsrc Authors. (https://github.com/akavel/rsrc/blob/master/AUTHORS) -func writeCoff(coff *coff.Coff, fnameout string) error { - out, err := os.Create(fnameout) - if err != nil { - return err - } - defer out.Close() - w := binutil.Writer{W: out} - - // write the resulting file to disk - binutil.Walk(coff, func(v reflect.Value, path string) error { - if binutil.Plain(v.Kind()) { - w.WriteLE(v.Interface()) - return nil - } - vv, ok := v.Interface().(binutil.SizedReader) - if ok { - w.WriteFromSized(vv) - return binutil.WALK_SKIP - } - return nil - }) - - if w.Err != nil { - return fmt.Errorf("Error writing output file: %s", w.Err) - } - - return nil -} diff --git a/vendor/github.com/GeertJohan/go.rice/sort.go b/vendor/github.com/GeertJohan/go.rice/sort.go deleted file mode 100644 index cd83c658..00000000 --- a/vendor/github.com/GeertJohan/go.rice/sort.go +++ /dev/null @@ -1,19 +0,0 @@ -package rice - -import "os" - -// SortByName allows an array of os.FileInfo objects -// to be easily sorted by filename using sort.Sort(SortByName(array)) -type SortByName []os.FileInfo - -func (f SortByName) Len() int { return len(f) } -func (f SortByName) Less(i, j int) bool { return f[i].Name() < f[j].Name() } -func (f SortByName) Swap(i, j int) { f[i], f[j] = f[j], f[i] } - -// SortByModified allows an array of os.FileInfo objects -// to be easily sorted by modified date using sort.Sort(SortByModified(array)) -type SortByModified []os.FileInfo - -func (f SortByModified) Len() int { return len(f) } -func (f SortByModified) Less(i, j int) bool { return f[i].ModTime().Unix() > f[j].ModTime().Unix() } -func (f SortByModified) Swap(i, j int) { f[i], f[j] = f[j], f[i] } diff --git a/vendor/github.com/GeertJohan/go.rice/virtual.go b/vendor/github.com/GeertJohan/go.rice/virtual.go deleted file mode 100644 index 50bff167..00000000 --- a/vendor/github.com/GeertJohan/go.rice/virtual.go +++ /dev/null @@ -1,252 +0,0 @@ -package rice - -import ( - "errors" - "io" - "os" - "path/filepath" - "sort" - - "github.com/GeertJohan/go.rice/embedded" -) - -//++ TODO: IDEA: merge virtualFile and virtualDir, this decreases work done by rice.File - -// Error indicating some function is not implemented yet (but available to satisfy an interface) -var ErrNotImplemented = errors.New("not implemented yet") - -// virtualFile is a 'stateful' virtual file. -// virtualFile wraps an *EmbeddedFile for a call to Box.Open() and virtualizes 'read cursor' (offset) and 'closing'. -// virtualFile is only internally visible and should be exposed through rice.File -type virtualFile struct { - *embedded.EmbeddedFile // the actual embedded file, embedded to obtain methods - offset int64 // read position on the virtual file - closed bool // closed when true -} - -// create a new virtualFile for given EmbeddedFile -func newVirtualFile(ef *embedded.EmbeddedFile) *virtualFile { - vf := &virtualFile{ - EmbeddedFile: ef, - offset: 0, - closed: false, - } - return vf -} - -//++ TODO check for nil pointers in all these methods. When so: return os.PathError with Err: os.ErrInvalid - -func (vf *virtualFile) close() error { - if vf.closed { - return &os.PathError{ - Op: "close", - Path: vf.EmbeddedFile.Filename, - Err: errors.New("already closed"), - } - } - vf.EmbeddedFile = nil - vf.closed = true - return nil -} - -func (vf *virtualFile) stat() (os.FileInfo, error) { - if vf.closed { - return nil, &os.PathError{ - Op: "stat", - Path: vf.EmbeddedFile.Filename, - Err: errors.New("bad file descriptor"), - } - } - return (*embeddedFileInfo)(vf.EmbeddedFile), nil -} - -func (vf *virtualFile) readdir(count int) ([]os.FileInfo, error) { - if vf.closed { - return nil, &os.PathError{ - Op: "readdir", - Path: vf.EmbeddedFile.Filename, - Err: errors.New("bad file descriptor"), - } - } - //TODO: return proper error for a readdir() call on a file - return nil, ErrNotImplemented -} - -func (vf *virtualFile) read(bts []byte) (int, error) { - if vf.closed { - return 0, &os.PathError{ - Op: "read", - Path: vf.EmbeddedFile.Filename, - Err: errors.New("bad file descriptor"), - } - } - - end := vf.offset + int64(len(bts)) - - if end >= int64(len(vf.Content)) { - // end of file, so return what we have + EOF - n := copy(bts, vf.Content[vf.offset:]) - vf.offset = 0 - return n, io.EOF - } - - n := copy(bts, vf.Content[vf.offset:end]) - vf.offset += int64(n) - return n, nil - -} - -func (vf *virtualFile) seek(offset int64, whence int) (int64, error) { - if vf.closed { - return 0, &os.PathError{ - Op: "seek", - Path: vf.EmbeddedFile.Filename, - Err: errors.New("bad file descriptor"), - } - } - var e error - - //++ TODO: check if this is correct implementation for seek - switch whence { - case os.SEEK_SET: - //++ check if new offset isn't out of bounds, set e when it is, then break out of switch - vf.offset = offset - case os.SEEK_CUR: - //++ check if new offset isn't out of bounds, set e when it is, then break out of switch - vf.offset += offset - case os.SEEK_END: - //++ check if new offset isn't out of bounds, set e when it is, then break out of switch - vf.offset = int64(len(vf.EmbeddedFile.Content)) - offset - } - - if e != nil { - return 0, &os.PathError{ - Op: "seek", - Path: vf.Filename, - Err: e, - } - } - - return vf.offset, nil -} - -// virtualDir is a 'stateful' virtual directory. -// virtualDir wraps an *EmbeddedDir for a call to Box.Open() and virtualizes 'closing'. -// virtualDir is only internally visible and should be exposed through rice.File -type virtualDir struct { - *embedded.EmbeddedDir - offset int // readdir position on the directory - closed bool -} - -// create a new virtualDir for given EmbeddedDir -func newVirtualDir(ed *embedded.EmbeddedDir) *virtualDir { - vd := &virtualDir{ - EmbeddedDir: ed, - offset: 0, - closed: false, - } - return vd -} - -func (vd *virtualDir) close() error { - //++ TODO: needs sync mutex? - if vd.closed { - return &os.PathError{ - Op: "close", - Path: vd.EmbeddedDir.Filename, - Err: errors.New("already closed"), - } - } - vd.closed = true - return nil -} - -func (vd *virtualDir) stat() (os.FileInfo, error) { - if vd.closed { - return nil, &os.PathError{ - Op: "stat", - Path: vd.EmbeddedDir.Filename, - Err: errors.New("bad file descriptor"), - } - } - return (*embeddedDirInfo)(vd.EmbeddedDir), nil -} - -func (vd *virtualDir) readdir(n int) (fi []os.FileInfo, err error) { - - if vd.closed { - return nil, &os.PathError{ - Op: "readdir", - Path: vd.EmbeddedDir.Filename, - Err: errors.New("bad file descriptor"), - } - } - - // Build up the array of our contents - var files []os.FileInfo - - // Add the child directories - for _, child := range vd.ChildDirs { - child.Filename = filepath.Base(child.Filename) - files = append(files, (*embeddedDirInfo)(child)) - } - - // Add the child files - for _, child := range vd.ChildFiles { - child.Filename = filepath.Base(child.Filename) - files = append(files, (*embeddedFileInfo)(child)) - } - - // Sort it by filename (lexical order) - sort.Sort(SortByName(files)) - - // Return all contents if that's what is requested - if n <= 0 { - vd.offset = 0 - return files, nil - } - - // If user has requested past the end of our list - // return what we can and send an EOF - if vd.offset+n >= len(files) { - offset := vd.offset - vd.offset = 0 - return files[offset:], io.EOF - } - - offset := vd.offset - vd.offset += n - return files[offset : offset+n], nil - -} - -func (vd *virtualDir) read(bts []byte) (int, error) { - if vd.closed { - return 0, &os.PathError{ - Op: "read", - Path: vd.EmbeddedDir.Filename, - Err: errors.New("bad file descriptor"), - } - } - return 0, &os.PathError{ - Op: "read", - Path: vd.EmbeddedDir.Filename, - Err: errors.New("is a directory"), - } -} - -func (vd *virtualDir) seek(offset int64, whence int) (int64, error) { - if vd.closed { - return 0, &os.PathError{ - Op: "seek", - Path: vd.EmbeddedDir.Filename, - Err: errors.New("bad file descriptor"), - } - } - return 0, &os.PathError{ - Op: "seek", - Path: vd.Filename, - Err: errors.New("is a directory"), - } -} diff --git a/vendor/github.com/GeertJohan/go.rice/walk.go b/vendor/github.com/GeertJohan/go.rice/walk.go deleted file mode 100644 index 3042aeab..00000000 --- a/vendor/github.com/GeertJohan/go.rice/walk.go +++ /dev/null @@ -1,122 +0,0 @@ -package rice - -import ( - "os" - "path/filepath" - "sort" - "strings" -) - -// Walk is like filepath.Walk() -// Visit http://golang.org/pkg/path/filepath/#Walk for more information -func (b *Box) Walk(path string, walkFn filepath.WalkFunc) error { - - pathFile, err := b.Open(path) - if err != nil { - return err - } - defer pathFile.Close() - - pathInfo, err := pathFile.Stat() - if err != nil { - return err - } - - if b.IsAppended() || b.IsEmbedded() { - return b.walk(path, pathInfo, walkFn) - } - - // We don't have any embedded or appended box so use live filesystem mode - return filepath.Walk(b.absolutePath+string(os.PathSeparator)+path, func(path string, info os.FileInfo, err error) error { - - // Strip out the box name from the returned paths - path = strings.TrimPrefix(path, b.absolutePath+string(os.PathSeparator)) - return walkFn(path, info, err) - - }) - -} - -// walk recursively descends path. -// See walk() in $GOROOT/src/pkg/path/filepath/path.go -func (b *Box) walk(path string, info os.FileInfo, walkFn filepath.WalkFunc) error { - - err := walkFn(path, info, nil) - if err != nil { - if info.IsDir() && err == filepath.SkipDir { - return nil - } - return err - } - - if !info.IsDir() { - return nil - } - - names, err := b.readDirNames(path) - if err != nil { - return walkFn(path, info, err) - } - - for _, name := range names { - - filename := filepath.Join(path, name) - fileObject, err := b.Open(filename) - if err != nil { - return err - } - defer fileObject.Close() - - fileInfo, err := fileObject.Stat() - if err != nil { - if err := walkFn(filename, fileInfo, err); err != nil && err != filepath.SkipDir { - return err - } - } else { - err = b.walk(filename, fileInfo, walkFn) - if err != nil { - if !fileInfo.IsDir() || err != filepath.SkipDir { - return err - } - } - } - } - - return nil - -} - -// readDirNames reads the directory named by path and returns a sorted list of directory entries. -// See readDirNames() in $GOROOT/pkg/path/filepath/path.go -func (b *Box) readDirNames(path string) ([]string, error) { - - f, err := b.Open(path) - if err != nil { - return nil, err - } - defer f.Close() - - stat, err := f.Stat() - if err != nil { - return nil, err - } - - if !stat.IsDir() { - return nil, nil - } - - infos, err := f.Readdir(0) - if err != nil { - return nil, err - } - - var names []string - - for _, info := range infos { - names = append(names, info.Name()) - } - - sort.Strings(names) - return names, nil - -} |