[v2] abicompat: Add prompt message for abnormal operation

Message ID 20211105093828.15377-1-tangmeng@uniontech.com
State New
Headers
Series [v2] abicompat: Add prompt message for abnormal operation |

Commit Message

tangmeng Nov. 5, 2021, 9:38 a.m. UTC
  When using abicompat, if the --redundant option and --no-redundant
option are used at the same time, no error will be prompted, the
actual option will prevail.

This patch provides a error to notify the user that error.

        * tools/abicompat.cc (parse_command_line): Notify the user when --redundant
        and --no-redundant are used at the same time

Signed-off-by: tangmeng <tangmeng@uniontech.com>
---
 tools/abicompat.cc | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)
  

Comments

Dodji Seketeli Nov. 9, 2021, 10:18 a.m. UTC | #1
Hello,

tangmeng <tangmeng@uniontech.com> a écrit:

> When using abicompat, if the --redundant option and --no-redundant
> option are used at the same time, no error will be prompted, the
> actual option will prevail.
>
> This patch provides a error to notify the user that error.
>
>         * tools/abicompat.cc (parse_command_line): Notify the user when --redundant
>         and --no-redundant are used at the same time
>
> Signed-off-by: tangmeng <tangmeng@uniontech.com>

Thanks for the patch!

I have applied a slightly modified version to yours that does
essentially the same thing.  Only minor nits have been picked.  Please
find the applied patch below.

Thanks again!

Cheers,

From 38d883cc7425cc945a8f51fd4cb66e90e2d8d825 Mon Sep 17 00:00:00 2001
From: tangmeng <tangmeng@uniontech.com>
Date: Fri, 5 Nov 2021 17:38:28 +0800
Subject: [PATCH] abicompat: Add prompt message for abnormal operation

When using abicompat, if the --redundant option and --no-redundant
option are used at the same time, no error is prompted and none of the
options have an impact.

This patch emits an error message in that case.

	* tools/abicompat.cc (parse_command_line): Notify the user
	when --redundant and --no-redundant are used at the same time

Signed-off-by: tangmeng <tangmeng@uniontech.com>
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
---
 tools/abicompat.cc | 22 ++++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/tools/abicompat.cc b/tools/abicompat.cc
index cf944a49..addd03a9 100644
--- a/tools/abicompat.cc
+++ b/tools/abicompat.cc
@@ -71,6 +71,8 @@ public:
   bool			list_undefined_symbols_only;
   bool			show_base_names;
   bool			show_redundant;
+  bool			redundant_opt_set;
+  bool			no_redundant_opt_set;
   bool			show_locs;
 
   options(const char* program_name)
@@ -81,6 +83,8 @@ public:
      list_undefined_symbols_only(),
      show_base_names(),
      show_redundant(true),
+     redundant_opt_set(),
+     no_redundant_opt_set(),
      show_locs(true)
   {}
 }; // end struct options
@@ -191,9 +195,15 @@ parse_command_line(int argc, char* argv[], options& opts)
 	  ++i;
 	}
       else if (!strcmp(argv[i], "--redundant"))
-	opts.show_redundant = true;
+        {
+	  opts.show_redundant = true;
+	  opts.redundant_opt_set = true;
+	}
       else if (!strcmp(argv[i], "--no-redundant"))
-	opts.show_redundant = false;
+        {
+  	  opts.show_redundant = false;
+	  opts.no_redundant_opt_set = true;
+	}
       else if (!strcmp(argv[i], "--no-show-locs"))
 	opts.show_locs = false;
       else if (!strcmp(argv[i], "--help")
@@ -645,6 +655,14 @@ main(int argc, char* argv[])
 	<< opts.lib2_path << " will be ignored automatically\n";
     }
 
+  if (opts.redundant_opt_set && opts.no_redundant_opt_set)
+    {
+      emit_prefix(argv[0], cerr)
+        << "ERROR: The \'--redundant\' and '--no-redundant' option are in conflict. "
+	<< "Please select only one option to use.\n";
+      return 1;
+    }
+
   ABG_ASSERT(!opts.app_path.empty());
   if (!abigail::tools_utils::check_file(opts.app_path, cerr, opts.prog_name))
     return abigail::tools_utils::ABIDIFF_ERROR;
  

Patch

diff --git a/tools/abicompat.cc b/tools/abicompat.cc
index cf944a49..de5043ea 100644
--- a/tools/abicompat.cc
+++ b/tools/abicompat.cc
@@ -71,6 +71,8 @@  public:
   bool			list_undefined_symbols_only;
   bool			show_base_names;
   bool			show_redundant;
+  bool			seted_redundant;
+  bool			seted_no_redundant;
   bool			show_locs;
 
   options(const char* program_name)
@@ -191,9 +193,15 @@  parse_command_line(int argc, char* argv[], options& opts)
 	  ++i;
 	}
       else if (!strcmp(argv[i], "--redundant"))
-	opts.show_redundant = true;
+        {
+	  opts.show_redundant = true;
+	  opts.seted_redundant = true;
+	}
       else if (!strcmp(argv[i], "--no-redundant"))
-	opts.show_redundant = false;
+        {
+  	  opts.show_redundant = false;
+	  opts.seted_no_redundant = true;
+	}
       else if (!strcmp(argv[i], "--no-show-locs"))
 	opts.show_locs = false;
       else if (!strcmp(argv[i], "--help")
@@ -645,6 +653,14 @@  main(int argc, char* argv[])
 	<< opts.lib2_path << " will be ignored automatically\n";
     }
 
+  if (opts.seted_redundant && opts.seted_no_redundant)
+    {
+      emit_prefix(argv[0], cerr)
+        << "ERROR: The \'--redundant\' and '--no-redundant' option are in conflict. "
+	<< "Please select only one option to use.\n";
+      return 1;
+    }
+
   ABG_ASSERT(!opts.app_path.empty());
   if (!abigail::tools_utils::check_file(opts.app_path, cerr, opts.prog_name))
     return abigail::tools_utils::ABIDIFF_ERROR;