summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/mattermost/rsc/appfs/appfile/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/mattermost/rsc/appfs/appfile/main.go')
-rw-r--r--vendor/github.com/mattermost/rsc/appfs/appfile/main.go156
1 files changed, 156 insertions, 0 deletions
diff --git a/vendor/github.com/mattermost/rsc/appfs/appfile/main.go b/vendor/github.com/mattermost/rsc/appfs/appfile/main.go
new file mode 100644
index 000000000..6d77df9aa
--- /dev/null
+++ b/vendor/github.com/mattermost/rsc/appfs/appfile/main.go
@@ -0,0 +1,156 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// appfile is a command-line interface to an appfs file system.
+package main
+
+import (
+ "flag"
+ "fmt"
+ "io/ioutil"
+ "log"
+ "os"
+
+ "github.com/mattermost/rsc/appfs/client"
+ "github.com/mattermost/rsc/keychain"
+)
+
+var c client.Client
+
+func init() {
+ flag.StringVar(&c.Host, "h", "localhost:8080", "app serving host")
+ flag.StringVar(&c.User, "u", "", "user name")
+ flag.StringVar(&c.Password, "p", "", "password")
+}
+
+func usage() {
+ fmt.Fprintf(os.Stderr, "usage: appfile [-h host] cmd args...\n")
+ fmt.Fprintf(os.Stderr, "\n")
+ fmt.Fprintf(os.Stderr, "Commands are:\n")
+ for _, c := range cmd {
+ fmt.Fprintf(os.Stderr, "\t%s\n", c.name)
+ }
+ os.Exit(2)
+}
+
+func main() {
+ flag.Usage = usage
+ flag.Parse()
+ args := flag.Args()
+ if len(args) == 0 {
+ usage()
+ }
+
+ if c.Password == "" {
+ var err error
+ c.User, c.Password, err = keychain.UserPasswd(c.Host, "")
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "unable to obtain user and password: %s\n", err)
+ os.Exit(2)
+ }
+ }
+
+ name, args := args[0], args[1:]
+ for _, c := range cmd {
+ if name == c.name {
+ switch c.arg {
+ case 0, 1:
+ if len(args) != c.arg {
+ if c.arg == 0 {
+ fmt.Fprintf(os.Stderr, "%s takes no arguments\n", name)
+ os.Exit(2)
+ }
+ fmt.Fprintf(os.Stderr, "%s requires 1 argument\n", name)
+ os.Exit(2)
+ }
+ case 2:
+ if len(args) == 0 {
+ fmt.Fprintf(os.Stderr, "%s requires at least 1 argument\n", name)
+ os.Exit(2)
+ }
+ }
+ c.fn(args)
+ return
+ }
+ }
+ fmt.Fprintf(os.Stderr, "unknown command %s\n", name)
+ os.Exit(2)
+}
+
+var cmd = []struct {
+ name string
+ fn func([]string)
+ arg int
+}{
+ {"mkdir", mkdir, 2},
+ {"write", write, 1},
+ {"read", read, 2},
+ {"mkfs", mkfs, 0},
+ {"stat", stat, 2},
+}
+
+func mkdir(args []string) {
+ for _, name := range args {
+ if err := c.Create(name, true); err != nil {
+ log.Printf("mkdir %s: %v", name, err)
+ }
+ }
+}
+
+func write(args []string) {
+ name := args[0]
+ data, err := ioutil.ReadAll(os.Stdin)
+ if err != nil {
+ log.Printf("reading stdin: %v", err)
+ return
+ }
+ c.Create(name, false)
+ if err := c.Write(name, data); err != nil {
+ log.Printf("write %s: %v", name, err)
+ }
+}
+
+func read(args []string) {
+ for _, name := range args {
+ fi, err := c.Stat(name)
+ if err != nil {
+ log.Printf("stat %s: %v", name, err)
+ continue
+ }
+ if fi.IsDir {
+ dirs, err := c.ReadDir(name)
+ if err != nil {
+ log.Printf("read %s: %v", name, err)
+ continue
+ }
+ for _, fi := range dirs {
+ fmt.Printf("%+v\n", *fi)
+ }
+ } else {
+ data, err := c.Read(name)
+ if err != nil {
+ log.Printf("read %s: %v", name, err)
+ continue
+ }
+ os.Stdout.Write(data)
+ }
+ }
+}
+
+func mkfs([]string) {
+ if err := c.Mkfs(); err != nil {
+ log.Printf("mkfs: %v", err)
+ }
+}
+
+func stat(args []string) {
+ for _, name := range args {
+ fi, err := c.Stat(name)
+ if err != nil {
+ log.Printf("stat %s: %v", name, err)
+ continue
+ }
+ fmt.Printf("%+v\n", *fi)
+ }
+}