cmd/utils.go
changeset 111 863b61d682e1
parent 110 57843255fd1a
child 135 55b4a119c7c6
equal deleted inserted replaced
110:57843255fd1a 111:863b61d682e1
     7 
     7 
     8 import (
     8 import (
     9 	"fmt"
     9 	"fmt"
    10 	"io/ioutil"
    10 	"io/ioutil"
    11 	"os"
    11 	"os"
       
    12 	"os/exec"
    12 	"path/filepath"
    13 	"path/filepath"
    13 	"strings"
    14 	"strings"
    14 
    15 
    15 	"github.com/pkg/errors"
    16 	"github.com/pkg/errors"
    16 	"github.com/spf13/cobra"
    17 	"github.com/spf13/cobra"
    87 		}
    88 		}
    88 	}
    89 	}
    89 	var mcrp mcPrinter
    90 	var mcrp mcPrinter
    90 	p, err := printer.NewPrinter(of, opt)
    91 	p, err := printer.NewPrinter(of, opt)
    91 	if err != nil {
    92 	if err != nil {
    92 		return mcrp, err
    93 		return &mcrp, err
    93 	}
    94 	}
    94 	mcrp.ResourcePrinter = p
    95 	mcrp.ResourcePrinter = p
    95 	return mcrp, nil
    96 	return &mcrp, nil
    96 }
    97 }
    97 
    98 
    98 func readTemplate(name, templateDir string) ([]byte, error) {
    99 func readTemplate(name, templateDir string) ([]byte, error) {
    99 	if strings.HasPrefix(name, "/") || strings.HasPrefix(name, "./") || strings.HasPrefix(name, "../") {
   100 	if strings.HasPrefix(name, "/") || strings.HasPrefix(name, "./") || strings.HasPrefix(name, "../") {
   100 		return ioutil.ReadFile(name)
   101 		return ioutil.ReadFile(name)
   139 
   140 
   140 func errPrint(format string, a ...interface{}) (n int, err error) {
   141 func errPrint(format string, a ...interface{}) (n int, err error) {
   141 	return fmt.Fprintf(os.Stderr, format+"\n", a...)
   142 	return fmt.Fprintf(os.Stderr, format+"\n", a...)
   142 }
   143 }
   143 
   144 
   144 func (mcp mcPrinter) printObj(obj interface{}) error {
   145 func (mcp *mcPrinter) printObj(obj interface{}) error {
   145 	return mcp.PrintObj(obj, nil, "")
   146 	if mcp.command == "" {
       
   147 		return mcp.PrintObj(obj, nil, "")
       
   148 	}
       
   149 
       
   150 	cmd := exec.Command(mcp.command)
       
   151 	stdin, err := cmd.StdinPipe()
       
   152 	if err != nil {
       
   153 		return err
       
   154 	}
       
   155 	err = mcp.PrintObj(obj, stdin, "")
       
   156 	stdin.Close()
       
   157 
       
   158 	if err != nil {
       
   159 		return err
       
   160 	}
       
   161 
       
   162 	out, err := cmd.CombinedOutput()
       
   163 	if len(out) > 0 {
       
   164 		errPrint("Command output: %s", string(out))
       
   165 	}
       
   166 	if err != nil {
       
   167 		return errors.Wrap(err, "external command failed")
       
   168 	}
       
   169 
       
   170 	return nil
   146 }
   171 }
   147 
   172 
   148 func (mcp mcPrinter) setCommand(cmd string) {
   173 func (mcp *mcPrinter) setCommand(cmd string) {
   149 	mcp.command = cmd
   174 	mcp.command = cmd
   150 }
   175 }