From 6acb29efd77a92a9c96aa76a7a82764f31fe0525 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sun, 14 Sep 2025 00:23:12 +0000 Subject: [PATCH] Fix yaml output single quote (#814) Fix #659 Reviewed-on: https://gitea.com/gitea/tea/pulls/814 --- modules/print/table.go | 12 +++++++----- modules/print/table_test.go | 21 +++++++++++++++++++++ 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/modules/print/table.go b/modules/print/table.go index 54e7bde..322088a 100644 --- a/modules/print/table.go +++ b/modules/print/table.go @@ -104,15 +104,17 @@ func (t *table) fprint(f io.Writer, output string) { } // outputTable prints structured data as table -func outputTable(f io.Writer, headers []string, values [][]string) { +func outputTable(f io.Writer, headers []string, values [][]string) error { table := tablewriter.NewWriter(f) if len(headers) > 0 { table.Header(headers) } for _, value := range values { - table.Append(value) + if err := table.Append(value); err != nil { + return err + } } - table.Render() + return table.Render() } // outputSimple prints structured data as space delimited value @@ -145,9 +147,9 @@ func outputYaml(f io.Writer, headers []string, values [][]string) { for j, val := range value { intVal, _ := strconv.Atoi(val) if strconv.Itoa(intVal) == val { - fmt.Fprintf(f, " %s: %s\n", headers[j], val) + fmt.Fprintf(f, " %s: %s\n", headers[j], val) } else { - fmt.Fprintf(f, " %s: '%s'\n", headers[j], val) + fmt.Fprintf(f, " %s: '%s'\n", headers[j], strings.ReplaceAll(val, "'", "''")) } } } diff --git a/modules/print/table_test.go b/modules/print/table_test.go index 060e5b8..42c94a3 100644 --- a/modules/print/table_test.go +++ b/modules/print/table_test.go @@ -48,4 +48,25 @@ func TestPrint(t *testing.T) { assert.EqualValues(t, "\\abc", result[4].A) assert.EqualValues(t, "'def\\", result[4].B) } + + buf.Reset() + + tData.fprint(buf, "yaml") + + assert.Equal(t, `- + A: 'new a' + B: 'some bbbb' +- + A: 'AAAAA' + B: 'b2' +- + A: '"abc' + B: '"def' +- + A: '''abc' + B: 'de''f' +- + A: '\abc' + B: '''def\' +`, buf.String()) }