From 4c6570de8d0b22337eb778639a126b9e585029f4 Mon Sep 17 00:00:00 2001 From: Arvin Schnell Date: Wed, 8 Feb 2023 07:31:13 +0100 Subject: [PATCH] - add option to suppress headers for CSV output --- client/GlobalOptions.cc | 5 ++++- client/GlobalOptions.h | 4 +++- client/cmd-get-config.cc | 7 ++++--- client/cmd-list-configs.cc | 7 ++++--- client/cmd-list.cc | 2 +- client/utils/CsvFormatter.cc | 5 +++-- client/utils/CsvFormatter.h | 6 ++++-- doc/snapper.xml.in | 6 ++++++ testsuite/csv-formatter.cc | 17 ++++++++++++++++- 9 files changed, 45 insertions(+), 14 deletions(-) diff --git a/client/GlobalOptions.cc b/client/GlobalOptions.cc index a939b12b..966c1065 100644 --- a/client/GlobalOptions.cc +++ b/client/GlobalOptions.cc @@ -1,5 +1,5 @@ /* - * Copyright (c) [2019-2020] SUSE LLC + * Copyright (c) [2019-2023] SUSE LLC * * All Rights Reserved. * @@ -48,6 +48,7 @@ namespace snapper + _("\t--csvout\t\t\tSet CSV output format.") + '\n' + _("\t--jsonout\t\t\tSet JSON output format.") + '\n' + _("\t--separator \t\tCharacter separator for CSV output format.") + '\n' + + _("\t--no-headers\t\t\tNo headers for CSV output format.") + '\n' + _("\t--config, -c \t\tSet name of config to use.") + '\n' + _("\t--no-dbus\t\t\tOperate without DBus.") + '\n' + _("\t--root, -r \t\tOperate on target root (works only without DBus).") + '\n' @@ -70,6 +71,7 @@ namespace snapper Option("csvout", no_argument), Option("jsonout", no_argument), Option("separator", required_argument), + Option("no-headers", no_argument), Option("config", required_argument, 'c'), Option("no-dbus", no_argument), Option("root", required_argument, 'r'), @@ -92,6 +94,7 @@ namespace snapper _table_style = table_style_value(opts); _abbreviate = opts.has_option("abbreviate"); _output_format = output_format_value(opts); + _headers = !opts.has_option("no-headers"); _separator = separator_value(opts); _config = config_value(opts); _root = root_value(opts); diff --git a/client/GlobalOptions.h b/client/GlobalOptions.h index 4694dd63..ed7300c6 100644 --- a/client/GlobalOptions.h +++ b/client/GlobalOptions.h @@ -1,5 +1,5 @@ /* - * Copyright (c) [2019-2020] SUSE LLC + * Copyright (c) [2019-2023] SUSE LLC * * All Rights Reserved. * @@ -56,6 +56,7 @@ namespace snapper bool abbreviate() const { return _abbreviate; } OutputFormat output_format() const { return _output_format; } string separator() const { return _separator; } + bool headers() const { return _headers; } string config() const { return _config; } string root() const { return _root; } Ambit ambit() const { return _ambit; } @@ -84,6 +85,7 @@ namespace snapper bool _abbreviate; OutputFormat _output_format; string _separator; + bool _headers; string _config; string _root; Ambit _ambit; diff --git a/client/cmd-get-config.cc b/client/cmd-get-config.cc index 1395ecc1..b6a5a081 100644 --- a/client/cmd-get-config.cc +++ b/client/cmd-get-config.cc @@ -119,9 +119,10 @@ namespace snapper void - output_csv(const vector& columns, const string& separator, ProxySnapper* snapper) + output_csv(const GlobalOptions& global_options, const vector& columns, const string& separator, + ProxySnapper* snapper) { - CsvFormatter formatter(separator); + CsvFormatter formatter(separator, global_options.headers()); for (Column column : columns) formatter.header().push_back(toString(column)); @@ -189,7 +190,7 @@ namespace snapper break; case GlobalOptions::OutputFormat::CSV: - output_csv(columns, global_options.separator(), snapper); + output_csv(global_options, columns, global_options.separator(), snapper); break; case GlobalOptions::OutputFormat::JSON: diff --git a/client/cmd-list-configs.cc b/client/cmd-list-configs.cc index 52ab28a7..699712e2 100644 --- a/client/cmd-list-configs.cc +++ b/client/cmd-list-configs.cc @@ -118,9 +118,10 @@ namespace snapper void - output_csv(const vector& columns, const string& separator, ProxySnappers* snappers) + output_csv(const GlobalOptions& global_options, const vector& columns, const string& separator, + ProxySnappers* snappers) { - CsvFormatter formatter(separator); + CsvFormatter formatter(separator, global_options.headers()); for (Column column : columns) formatter.header().push_back(toString(column)); @@ -195,7 +196,7 @@ namespace snapper break; case GlobalOptions::OutputFormat::CSV: - output_csv(columns, global_options.separator(), snappers); + output_csv(global_options, columns, global_options.separator(), snappers); break; case GlobalOptions::OutputFormat::JSON: diff --git a/client/cmd-list.cc b/client/cmd-list.cc index 3e5500ed..91ba6ba3 100644 --- a/client/cmd-list.cc +++ b/client/cmd-list.cc @@ -634,7 +634,7 @@ namespace snapper { OutputOptions output_options(global_options.utc(), true, false); - CsvFormatter formatter(global_options.separator()); + CsvFormatter formatter(global_options.separator(), global_options.headers()); for (Column column : columns) formatter.header().push_back(toString(column)); diff --git a/client/utils/CsvFormatter.cc b/client/utils/CsvFormatter.cc index fc311e32..5efe6df9 100644 --- a/client/utils/CsvFormatter.cc +++ b/client/utils/CsvFormatter.cc @@ -1,5 +1,5 @@ /* - * Copyright (c) [2019-2020] SUSE LLC + * Copyright (c) [2019-2023] SUSE LLC * * All Rights Reserved. * @@ -38,7 +38,8 @@ namespace snapper ostream& operator<<(ostream& stream, const CsvFormatter& csv_formatter) { - stream << csv_formatter.csv_line(csv_formatter._header); + if (csv_formatter.show_header) + stream << csv_formatter.csv_line(csv_formatter._header); for (const vector& row : csv_formatter._rows) stream << csv_formatter.csv_line(row); diff --git a/client/utils/CsvFormatter.h b/client/utils/CsvFormatter.h index 2245f44a..ae161c24 100644 --- a/client/utils/CsvFormatter.h +++ b/client/utils/CsvFormatter.h @@ -1,5 +1,5 @@ /* - * Copyright (c) [2019-2020] SUSE LLC + * Copyright (c) [2019-2023] SUSE LLC * * All Rights Reserved. * @@ -41,7 +41,8 @@ namespace snapper static const string default_separator; - CsvFormatter(const string& separator) : separator(separator) {} + CsvFormatter(const string& separator, bool show_header) + : separator(separator), show_header(show_header) {} CsvFormatter(const CsvFormatter&) = delete; @@ -65,6 +66,7 @@ namespace snapper string enclose_with_quotes(const string& value) const; const string separator; + const bool show_header; vector _header; vector> _rows; diff --git a/doc/snapper.xml.in b/doc/snapper.xml.in index fce06589..489d2470 100644 --- a/doc/snapper.xml.in +++ b/doc/snapper.xml.in @@ -257,6 +257,12 @@ Specifies the character separator for CSV output format. + + + + Suppress headers for CSV output format. + + diff --git a/testsuite/csv-formatter.cc b/testsuite/csv-formatter.cc index 37fbd27b..c149edf3 100644 --- a/testsuite/csv-formatter.cc +++ b/testsuite/csv-formatter.cc @@ -22,7 +22,7 @@ str(const CsvFormatter& formatter) BOOST_AUTO_TEST_CASE(test1) { - CsvFormatter formatter(";"); + CsvFormatter formatter(";", true); formatter.header() = { "column1", "column2", "column3" }; @@ -38,3 +38,18 @@ BOOST_AUTO_TEST_CASE(test1) BOOST_CHECK_EQUAL(str(formatter), result); } + + +BOOST_AUTO_TEST_CASE(test2) +{ + CsvFormatter formatter(CsvFormatter::default_separator, false); + + formatter.rows() = { + { "value1", "value2" } + }; + + string result = + "value1,value2\n"; + + BOOST_CHECK_EQUAL(str(formatter), result); +} -- 2.47.3