cmd/utils.go
author Mikael Berthe <mikael@lilotux.net>
Sun, 14 May 2017 10:52:22 +0200
changeset 135 55b4a119c7c6
parent 111 863b61d682e1
child 146 2c8c8ba13f50
permissions -rw-r--r--
Update settings - Add setting default_theme - Rename output into default_output - Fix color setting (viper sometimes turns it into a boolean)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
80
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     1
// Copyright © 2017 Mikael Berthe <mikael@lilotux.net>
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     2
//
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     3
// Licensed under the MIT license.
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     4
// Please see the LICENSE file is this directory.
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     5
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     6
package cmd
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     7
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     8
import (
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     9
	"fmt"
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    10
	"io/ioutil"
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    11
	"os"
111
863b61d682e1 Experimental external command implementation
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
    12
	"os/exec"
82
9ac2281c07d7 Add 'template_directory' setting
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    13
	"path/filepath"
9ac2281c07d7 Add 'template_directory' setting
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    14
	"strings"
80
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    15
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    16
	"github.com/pkg/errors"
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    17
	"github.com/spf13/cobra"
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    18
	"github.com/spf13/viper"
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    19
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    20
	"github.com/McKael/madonctl/printer"
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    21
)
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    22
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    23
func checkOutputFormat(cmd *cobra.Command, args []string) error {
135
55b4a119c7c6 Update settings
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
    24
	of := outputFormat
55b4a119c7c6 Update settings
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
    25
	if of == "" {
55b4a119c7c6 Update settings
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
    26
		of = viper.GetString("default_output")
55b4a119c7c6 Update settings
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
    27
	}
80
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    28
	switch of {
85
a4464c0b0c36 Add theme support
Mikael Berthe <mikael@lilotux.net>
parents: 83
diff changeset
    29
	case "", "plain", "json", "yaml", "template", "theme":
80
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    30
		return nil // Accepted
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    31
	}
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    32
	return errors.Errorf("output format '%s' not supported", of)
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    33
}
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    34
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    35
// getOutputFormat return the requested output format, defaulting to "plain".
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    36
func getOutputFormat() string {
135
55b4a119c7c6 Update settings
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
    37
	of := outputFormat
80
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    38
	if of == "" {
135
55b4a119c7c6 Update settings
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
    39
		of = viper.GetString("default_output")
55b4a119c7c6 Update settings
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
    40
		if of == "" {
55b4a119c7c6 Update settings
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
    41
			of = "plain"
55b4a119c7c6 Update settings
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
    42
		}
80
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    43
	}
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    44
	// Override format if a template is provided
85
a4464c0b0c36 Add theme support
Mikael Berthe <mikael@lilotux.net>
parents: 83
diff changeset
    45
	if of == "plain" {
80
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    46
		// If the format is plain and there is a template option,
85
a4464c0b0c36 Add theme support
Mikael Berthe <mikael@lilotux.net>
parents: 83
diff changeset
    47
		// set the format to "template".  Same for "theme".
a4464c0b0c36 Add theme support
Mikael Berthe <mikael@lilotux.net>
parents: 83
diff changeset
    48
		if outputTemplate != "" || outputTemplateFile != "" {
a4464c0b0c36 Add theme support
Mikael Berthe <mikael@lilotux.net>
parents: 83
diff changeset
    49
			of = "template"
a4464c0b0c36 Add theme support
Mikael Berthe <mikael@lilotux.net>
parents: 83
diff changeset
    50
		} else if outputTheme != "" {
a4464c0b0c36 Add theme support
Mikael Berthe <mikael@lilotux.net>
parents: 83
diff changeset
    51
			of = "theme"
a4464c0b0c36 Add theme support
Mikael Berthe <mikael@lilotux.net>
parents: 83
diff changeset
    52
		}
80
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    53
	}
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    54
	return of
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    55
}
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    56
110
57843255fd1a Refactor printers
Mikael Berthe <mikael@lilotux.net>
parents: 91
diff changeset
    57
type mcPrinter struct {
57843255fd1a Refactor printers
Mikael Berthe <mikael@lilotux.net>
parents: 91
diff changeset
    58
	printer.ResourcePrinter
57843255fd1a Refactor printers
Mikael Berthe <mikael@lilotux.net>
parents: 91
diff changeset
    59
	command string
57843255fd1a Refactor printers
Mikael Berthe <mikael@lilotux.net>
parents: 91
diff changeset
    60
}
57843255fd1a Refactor printers
Mikael Berthe <mikael@lilotux.net>
parents: 91
diff changeset
    61
57843255fd1a Refactor printers
Mikael Berthe <mikael@lilotux.net>
parents: 91
diff changeset
    62
type mcResourcePrinter interface {
57843255fd1a Refactor printers
Mikael Berthe <mikael@lilotux.net>
parents: 91
diff changeset
    63
	printer.ResourcePrinter
57843255fd1a Refactor printers
Mikael Berthe <mikael@lilotux.net>
parents: 91
diff changeset
    64
	printObj(interface{}) error
57843255fd1a Refactor printers
Mikael Berthe <mikael@lilotux.net>
parents: 91
diff changeset
    65
	setCommand(string)
57843255fd1a Refactor printers
Mikael Berthe <mikael@lilotux.net>
parents: 91
diff changeset
    66
}
57843255fd1a Refactor printers
Mikael Berthe <mikael@lilotux.net>
parents: 91
diff changeset
    67
80
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    68
// getPrinter returns a resource printer for the requested output format.
110
57843255fd1a Refactor printers
Mikael Berthe <mikael@lilotux.net>
parents: 91
diff changeset
    69
func getPrinter() (mcResourcePrinter, error) {
83
57afac822019 Use a map for ResourcePrinter options
Mikael Berthe <mikael@lilotux.net>
parents: 82
diff changeset
    70
	opt := make(printer.Options)
80
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    71
	of := getOutputFormat()
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    72
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    73
	// Initialize color mode
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    74
	switch viper.GetString("color") {
135
55b4a119c7c6 Update settings
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
    75
	case "on", "true", "yes", "force":
89
3758bb5f0979 ResourcePrinter (templates): Use options to pass color_mode
Mikael Berthe <mikael@lilotux.net>
parents: 85
diff changeset
    76
		opt["color_mode"] = "on"
135
55b4a119c7c6 Update settings
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
    77
	case "off", "false", "no":
89
3758bb5f0979 ResourcePrinter (templates): Use options to pass color_mode
Mikael Berthe <mikael@lilotux.net>
parents: 85
diff changeset
    78
		opt["color_mode"] = "off"
3758bb5f0979 ResourcePrinter (templates): Use options to pass color_mode
Mikael Berthe <mikael@lilotux.net>
parents: 85
diff changeset
    79
	default:
3758bb5f0979 ResourcePrinter (templates): Use options to pass color_mode
Mikael Berthe <mikael@lilotux.net>
parents: 85
diff changeset
    80
		opt["color_mode"] = "auto"
80
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    81
	}
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    82
85
a4464c0b0c36 Add theme support
Mikael Berthe <mikael@lilotux.net>
parents: 83
diff changeset
    83
	if of == "theme" {
135
55b4a119c7c6 Update settings
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
    84
		if outputTheme != "" {
55b4a119c7c6 Update settings
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
    85
			opt["name"] = outputTheme
55b4a119c7c6 Update settings
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
    86
		} else {
55b4a119c7c6 Update settings
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
    87
			opt["name"] = viper.GetString("default_theme")
55b4a119c7c6 Update settings
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
    88
		}
85
a4464c0b0c36 Add theme support
Mikael Berthe <mikael@lilotux.net>
parents: 83
diff changeset
    89
		opt["template_directory"] = viper.GetString("template_directory")
a4464c0b0c36 Add theme support
Mikael Berthe <mikael@lilotux.net>
parents: 83
diff changeset
    90
	} else if of == "template" {
83
57afac822019 Use a map for ResourcePrinter options
Mikael Berthe <mikael@lilotux.net>
parents: 82
diff changeset
    91
		opt["template"] = outputTemplate
80
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    92
		if outputTemplateFile != "" {
82
9ac2281c07d7 Add 'template_directory' setting
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    93
			tmpl, err := readTemplate(outputTemplateFile, viper.GetString("template_directory"))
80
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    94
			if err != nil {
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    95
				return nil, err
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    96
			}
83
57afac822019 Use a map for ResourcePrinter options
Mikael Berthe <mikael@lilotux.net>
parents: 82
diff changeset
    97
			opt["template"] = string(tmpl)
80
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    98
		}
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    99
	}
110
57843255fd1a Refactor printers
Mikael Berthe <mikael@lilotux.net>
parents: 91
diff changeset
   100
	var mcrp mcPrinter
57843255fd1a Refactor printers
Mikael Berthe <mikael@lilotux.net>
parents: 91
diff changeset
   101
	p, err := printer.NewPrinter(of, opt)
57843255fd1a Refactor printers
Mikael Berthe <mikael@lilotux.net>
parents: 91
diff changeset
   102
	if err != nil {
111
863b61d682e1 Experimental external command implementation
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   103
		return &mcrp, err
110
57843255fd1a Refactor printers
Mikael Berthe <mikael@lilotux.net>
parents: 91
diff changeset
   104
	}
57843255fd1a Refactor printers
Mikael Berthe <mikael@lilotux.net>
parents: 91
diff changeset
   105
	mcrp.ResourcePrinter = p
111
863b61d682e1 Experimental external command implementation
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   106
	return &mcrp, nil
80
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   107
}
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   108
82
9ac2281c07d7 Add 'template_directory' setting
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
   109
func readTemplate(name, templateDir string) ([]byte, error) {
9ac2281c07d7 Add 'template_directory' setting
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
   110
	if strings.HasPrefix(name, "/") || strings.HasPrefix(name, "./") || strings.HasPrefix(name, "../") {
9ac2281c07d7 Add 'template_directory' setting
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
   111
		return ioutil.ReadFile(name)
9ac2281c07d7 Add 'template_directory' setting
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
   112
	}
9ac2281c07d7 Add 'template_directory' setting
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
   113
9ac2281c07d7 Add 'template_directory' setting
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
   114
	if templateDir != "" {
9ac2281c07d7 Add 'template_directory' setting
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
   115
		// If the template file can be found in the template directory,
9ac2281c07d7 Add 'template_directory' setting
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
   116
		// use this file.
9ac2281c07d7 Add 'template_directory' setting
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
   117
		fullName := filepath.Join(templateDir, name)
9ac2281c07d7 Add 'template_directory' setting
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
   118
		if fileExists(fullName) {
9ac2281c07d7 Add 'template_directory' setting
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
   119
			name = fullName
9ac2281c07d7 Add 'template_directory' setting
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
   120
		}
9ac2281c07d7 Add 'template_directory' setting
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
   121
	}
9ac2281c07d7 Add 'template_directory' setting
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
   122
9ac2281c07d7 Add 'template_directory' setting
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
   123
	return ioutil.ReadFile(name)
9ac2281c07d7 Add 'template_directory' setting
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
   124
}
9ac2281c07d7 Add 'template_directory' setting
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
   125
91
02312ccc1fd3 Add shell completion for theme flag
Mikael Berthe <mikael@lilotux.net>
parents: 89
diff changeset
   126
func getThemes() ([]string, error) {
02312ccc1fd3 Add shell completion for theme flag
Mikael Berthe <mikael@lilotux.net>
parents: 89
diff changeset
   127
	templDir := viper.GetString("template_directory")
02312ccc1fd3 Add shell completion for theme flag
Mikael Berthe <mikael@lilotux.net>
parents: 89
diff changeset
   128
	if templDir == "" {
02312ccc1fd3 Add shell completion for theme flag
Mikael Berthe <mikael@lilotux.net>
parents: 89
diff changeset
   129
		return nil, errors.New("template_directory not defined")
02312ccc1fd3 Add shell completion for theme flag
Mikael Berthe <mikael@lilotux.net>
parents: 89
diff changeset
   130
	}
02312ccc1fd3 Add shell completion for theme flag
Mikael Berthe <mikael@lilotux.net>
parents: 89
diff changeset
   131
	files, err := ioutil.ReadDir(filepath.Join(templDir, "themes"))
02312ccc1fd3 Add shell completion for theme flag
Mikael Berthe <mikael@lilotux.net>
parents: 89
diff changeset
   132
	if err != nil {
02312ccc1fd3 Add shell completion for theme flag
Mikael Berthe <mikael@lilotux.net>
parents: 89
diff changeset
   133
		return nil, errors.Wrap(err, "cannot read theme directory")
02312ccc1fd3 Add shell completion for theme flag
Mikael Berthe <mikael@lilotux.net>
parents: 89
diff changeset
   134
	}
02312ccc1fd3 Add shell completion for theme flag
Mikael Berthe <mikael@lilotux.net>
parents: 89
diff changeset
   135
	var tl []string
02312ccc1fd3 Add shell completion for theme flag
Mikael Berthe <mikael@lilotux.net>
parents: 89
diff changeset
   136
	for _, f := range files {
02312ccc1fd3 Add shell completion for theme flag
Mikael Berthe <mikael@lilotux.net>
parents: 89
diff changeset
   137
		if f.IsDir() {
02312ccc1fd3 Add shell completion for theme flag
Mikael Berthe <mikael@lilotux.net>
parents: 89
diff changeset
   138
			tl = append(tl, f.Name())
02312ccc1fd3 Add shell completion for theme flag
Mikael Berthe <mikael@lilotux.net>
parents: 89
diff changeset
   139
		}
02312ccc1fd3 Add shell completion for theme flag
Mikael Berthe <mikael@lilotux.net>
parents: 89
diff changeset
   140
	}
02312ccc1fd3 Add shell completion for theme flag
Mikael Berthe <mikael@lilotux.net>
parents: 89
diff changeset
   141
	return tl, nil
02312ccc1fd3 Add shell completion for theme flag
Mikael Berthe <mikael@lilotux.net>
parents: 89
diff changeset
   142
}
02312ccc1fd3 Add shell completion for theme flag
Mikael Berthe <mikael@lilotux.net>
parents: 89
diff changeset
   143
82
9ac2281c07d7 Add 'template_directory' setting
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
   144
func fileExists(filename string) bool {
9ac2281c07d7 Add 'template_directory' setting
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
   145
	if _, err := os.Stat(filename); err != nil {
9ac2281c07d7 Add 'template_directory' setting
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
   146
		return false
9ac2281c07d7 Add 'template_directory' setting
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
   147
	}
9ac2281c07d7 Add 'template_directory' setting
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
   148
	return true
9ac2281c07d7 Add 'template_directory' setting
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
   149
}
9ac2281c07d7 Add 'template_directory' setting
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
   150
80
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   151
func errPrint(format string, a ...interface{}) (n int, err error) {
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   152
	return fmt.Fprintf(os.Stderr, format+"\n", a...)
7f3e2577ed85 Add cmd/utils.go
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   153
}
110
57843255fd1a Refactor printers
Mikael Berthe <mikael@lilotux.net>
parents: 91
diff changeset
   154
111
863b61d682e1 Experimental external command implementation
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   155
func (mcp *mcPrinter) printObj(obj interface{}) error {
863b61d682e1 Experimental external command implementation
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   156
	if mcp.command == "" {
863b61d682e1 Experimental external command implementation
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   157
		return mcp.PrintObj(obj, nil, "")
863b61d682e1 Experimental external command implementation
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   158
	}
863b61d682e1 Experimental external command implementation
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   159
863b61d682e1 Experimental external command implementation
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   160
	cmd := exec.Command(mcp.command)
863b61d682e1 Experimental external command implementation
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   161
	stdin, err := cmd.StdinPipe()
863b61d682e1 Experimental external command implementation
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   162
	if err != nil {
863b61d682e1 Experimental external command implementation
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   163
		return err
863b61d682e1 Experimental external command implementation
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   164
	}
863b61d682e1 Experimental external command implementation
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   165
	err = mcp.PrintObj(obj, stdin, "")
863b61d682e1 Experimental external command implementation
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   166
	stdin.Close()
863b61d682e1 Experimental external command implementation
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   167
863b61d682e1 Experimental external command implementation
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   168
	if err != nil {
863b61d682e1 Experimental external command implementation
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   169
		return err
863b61d682e1 Experimental external command implementation
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   170
	}
863b61d682e1 Experimental external command implementation
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   171
863b61d682e1 Experimental external command implementation
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   172
	out, err := cmd.CombinedOutput()
863b61d682e1 Experimental external command implementation
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   173
	if len(out) > 0 {
863b61d682e1 Experimental external command implementation
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   174
		errPrint("Command output: %s", string(out))
863b61d682e1 Experimental external command implementation
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   175
	}
863b61d682e1 Experimental external command implementation
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   176
	if err != nil {
863b61d682e1 Experimental external command implementation
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   177
		return errors.Wrap(err, "external command failed")
863b61d682e1 Experimental external command implementation
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   178
	}
863b61d682e1 Experimental external command implementation
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   179
863b61d682e1 Experimental external command implementation
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   180
	return nil
110
57843255fd1a Refactor printers
Mikael Berthe <mikael@lilotux.net>
parents: 91
diff changeset
   181
}
57843255fd1a Refactor printers
Mikael Berthe <mikael@lilotux.net>
parents: 91
diff changeset
   182
111
863b61d682e1 Experimental external command implementation
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   183
func (mcp *mcPrinter) setCommand(cmd string) {
110
57843255fd1a Refactor printers
Mikael Berthe <mikael@lilotux.net>
parents: 91
diff changeset
   184
	mcp.command = cmd
57843255fd1a Refactor printers
Mikael Berthe <mikael@lilotux.net>
parents: 91
diff changeset
   185
}