Merge branch 'feature/cat' into 'master'

Feature/cat

Initial implementation of cat. So far, this only parses from the command line. I'll add in parsing from input frames once we work out some pipe merging issues.

See merge request !3
This commit is contained in:
Ian Adam Naval 2014-09-25 11:18:26 -04:00
commit 1fc595e559
2 changed files with 61 additions and 0 deletions

6
cat.go Normal file
View File

@ -0,0 +1,6 @@
package jsh
type CatOutput struct {
Output string
Files []string
}

55
cat/main.go Normal file
View File

@ -0,0 +1,55 @@
package main
import (
"flag"
"fmt"
"io/ioutil"
"jsh"
)
func catFiles(queue chan *jsh.JshFrame) {
// Get all of the non-flags. The rest were processed by the main function
fileNames := flag.Args()
for _, fileName := range fileNames {
file, err := ioutil.ReadFile(fileName)
var jshFrame jsh.JshFrame
// If there's an error, output an error frame to the queue and continue
if err != nil {
errText := make(map[string]string)
errText[fileName] = fmt.Sprintf("%s", err.Error())
jshFrame = jsh.JshFrame{"", errText}
queue <- &jshFrame
continue
}
// Put the file contents into a frame and send them to the output
output := jsh.CatOutput{}
output.Files = []string{fileName}
output.Output = string(file)
jshFrame = jsh.JshFrame{output, ""}
queue <- &jshFrame
}
}
func runJsonMode() {
queue := make(chan *jsh.JshFrame)
done := make(chan bool)
go jsh.OutputFrames(queue, done)
catFiles(queue)
close(queue)
<-done
}
func main() {
// TODO: Support more flags
jsonModePtr := flag.Bool("json", false, "whether to use json mode for input and output")
flag.Parse()
if !*jsonModePtr {
fmt.Printf("%s", jsh.FallbackWithArgs("cat", flag.Args()))
} else {
runJsonMode()
}
}