]> git.ipfire.org Git - thirdparty/snapper.git/commitdiff
- add option to suppress headers for CSV output 782/head
authorArvin Schnell <aschnell@suse.de>
Wed, 8 Feb 2023 06:31:13 +0000 (07:31 +0100)
committerArvin Schnell <aschnell@suse.de>
Wed, 8 Feb 2023 06:33:31 +0000 (07:33 +0100)
client/GlobalOptions.cc
client/GlobalOptions.h
client/cmd-get-config.cc
client/cmd-list-configs.cc
client/cmd-list.cc
client/utils/CsvFormatter.cc
client/utils/CsvFormatter.h
doc/snapper.xml.in
testsuite/csv-formatter.cc

index a939b12bb94ae77ea3919dfe8a1183f08a16d4cc..966c1065955854940cf22b34f14a11ac8ca20bcb 100644 (file)
@@ -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 <separator>\t\tCharacter separator for CSV output format.") + '\n'
+           + _("\t--no-headers\t\t\tNo headers for CSV output format.") + '\n'
            + _("\t--config, -c <name>\t\tSet name of config to use.") + '\n'
            + _("\t--no-dbus\t\t\tOperate without DBus.") + '\n'
            + _("\t--root, -r <path>\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);
index 4694dd631a3c91c36bac13fa7cb99d6ae667e31b..ed7300c6cf5700a83ef41bdef3bef858f046ed18 100644 (file)
@@ -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;
index 1395ecc1fbe4bea4281bb823442c22440bbe5511..b6a5a081c7197c1602da5ab5a1370b1c36420f25 100644 (file)
@@ -119,9 +119,10 @@ namespace snapper
 
 
        void
-       output_csv(const vector<Column>& columns, const string& separator, ProxySnapper* snapper)
+       output_csv(const GlobalOptions& global_options, const vector<Column>& 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:
index 52ab28a798ca300a5acbed891cc11477bc2cad06..699712e2731ba45737eb81c18d030606b3f3ad81 100644 (file)
@@ -118,9 +118,10 @@ namespace snapper
 
 
        void
-       output_csv(const vector<Column>& columns, const string& separator, ProxySnappers* snappers)
+       output_csv(const GlobalOptions& global_options, const vector<Column>& 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:
index 3e5500edcd06523cea6e33b156bd20afbeeaaf61..91ba6ba31ef904fe404c504388da4b3834193bce 100644 (file)
@@ -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));
index fc311e321cf39355f1f8c1bdde4175faed8ee843..5efe6df9296a987bb2f9a38f176967cca7aa09ef 100644 (file)
@@ -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<string>& row : csv_formatter._rows)
            stream << csv_formatter.csv_line(row);
index 2245f44a4fba6566c7ee50fef59ec3264b1a730c..ae161c2420cf160705c4bacb734290fee07cfa2d 100644 (file)
@@ -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<string> _header;
        vector<vector<string>> _rows;
index fce065890aafd124fda77e42937194752f4e6e77..489d2470e4172902a4d04ce3ff703342fef8baf1 100644 (file)
          <para>Specifies the character separator for CSV output format.</para>
        </listitem>
       </varlistentry>
+      <varlistentry>
+       <term><option>--no-headers</option></term>
+       <listitem>
+         <para>Suppress headers for CSV output format.</para>
+       </listitem>
+      </varlistentry>
       <varlistentry>
        <term><option>-c, --config <replaceable>name</replaceable></option></term>
        <listitem>
index 37fbd27be6b1df0af62e5086f9af5d289fb8a49a..c149edf396feddf8ef548a6f66bd5fc82135c1c1 100644 (file)
@@ -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);
+}