mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-09-05 19:21:37 +00:00
Clean up output handling in hack/e2e.go
Dovetail stdout/stderr and remove escaping for TAP.
This commit is contained in:
47
hack/e2e.go
47
hack/e2e.go
@@ -277,8 +277,8 @@ func Test() bool {
|
|||||||
// call the returned anonymous function to stop.
|
// call the returned anonymous function to stop.
|
||||||
func runBashUntil(stepName string, cmd *exec.Cmd) func() {
|
func runBashUntil(stepName string, cmd *exec.Cmd) func() {
|
||||||
log.Printf("Running in background: %v", stepName)
|
log.Printf("Running in background: %v", stepName)
|
||||||
stdout, stderr := bytes.NewBuffer(nil), bytes.NewBuffer(nil)
|
output := bytes.NewBuffer(nil)
|
||||||
cmd.Stdout, cmd.Stderr = stdout, stderr
|
cmd.Stdout, cmd.Stderr = output, output
|
||||||
if err := cmd.Start(); err != nil {
|
if err := cmd.Start(); err != nil {
|
||||||
log.Printf("Unable to start '%v': '%v'", stepName, err)
|
log.Printf("Unable to start '%v': '%v'", stepName, err)
|
||||||
return func() {}
|
return func() {}
|
||||||
@@ -287,7 +287,7 @@ func runBashUntil(stepName string, cmd *exec.Cmd) func() {
|
|||||||
cmd.Process.Signal(os.Interrupt)
|
cmd.Process.Signal(os.Interrupt)
|
||||||
headerprefix := stepName + " "
|
headerprefix := stepName + " "
|
||||||
lineprefix := " "
|
lineprefix := " "
|
||||||
printBashOutputs(headerprefix, lineprefix, string(stdout.Bytes()), string(stderr.Bytes()), false)
|
printBashOutputs(headerprefix, lineprefix, string(output.Bytes()), false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -327,44 +327,11 @@ func finishRunning(stepName string, cmd *exec.Cmd) bool {
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
func printBashOutputs(headerprefix, lineprefix, stdout, stderr string, escape bool) {
|
func printBashOutputs(headerprefix, lineprefix, output string, escape bool) {
|
||||||
// The |'s (plus appropriate prefixing) are to make this look
|
if output != "" {
|
||||||
// "YAMLish" to the Jenkins TAP plugin:
|
fmt.Printf("%voutput: |\n", headerprefix)
|
||||||
// https://wiki.jenkins-ci.org/display/JENKINS/TAP+Plugin
|
printPrefixedLines(lineprefix, output)
|
||||||
if stdout != "" {
|
|
||||||
fmt.Printf("%vstdout: |\n", headerprefix)
|
|
||||||
if escape {
|
|
||||||
stdout = escapeOutput(stdout)
|
|
||||||
}
|
|
||||||
printPrefixedLines(lineprefix, stdout)
|
|
||||||
}
|
}
|
||||||
if stderr != "" {
|
|
||||||
fmt.Printf("%vstderr: |\n", headerprefix)
|
|
||||||
if escape {
|
|
||||||
stderr = escapeOutput(stderr)
|
|
||||||
}
|
|
||||||
printPrefixedLines(lineprefix, stderr)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Escape stdout/stderr so the Jenkins YAMLish parser doesn't barf on
|
|
||||||
// it. This escaping is crude (it masks all colons as something humans
|
|
||||||
// will hopefully see as a colon, for instance), but it should get the
|
|
||||||
// job done without pulling in a whole YAML package.
|
|
||||||
func escapeOutput(s string) (out string) {
|
|
||||||
for _, r := range s {
|
|
||||||
switch {
|
|
||||||
case r == '\n':
|
|
||||||
out += string(r)
|
|
||||||
case !strconv.IsPrint(r):
|
|
||||||
out += " "
|
|
||||||
case r == ':':
|
|
||||||
out += "\ua789" // "꞉", modifier letter colon
|
|
||||||
default:
|
|
||||||
out += string(r)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func printPrefixedLines(prefix, s string) {
|
func printPrefixedLines(prefix, s string) {
|
||||||
|
Reference in New Issue
Block a user