[lvm-devel] [PATCH 2/2] lvm.c: Add return value lvm shell prompt

Tony Asleson tasleson at redhat.com
Fri Jan 8 21:37:17 UTC 2016


lvm shell will print messages to stderr when the command completes
successfully.  Thus there is no simple way to know if things executed
OK as you cannot use the absence of stderr as success.  This patch
adds a return code to the prompt when STDIN is *not* a tty so you
cal tell if the previous command completed successfully.

An example:

[0] lvm> pvs
  PV         VG   Fmt  Attr PSize  PFree
  /dev/sdb        lvm2 ---  36.00g 36.00g
  /dev/sdc        lvm2 ---  36.00g 36.00g
  /dev/sdd        lvm2 ---  36.00g 36.00g
  /dev/sde        lvm2 ---  36.00g 36.00g
[0] lvm> vgs doesnotexist
  Volume group "doesnotexist" not found
  Cannot process volume group doesnotexist
[5] lvm>

Signed-off-by: Tony Asleson <tasleson at redhat.com>
---
 tools/lvm.c |   13 ++++++++++++-
 1 files changed, 12 insertions(+), 1 deletions(-)

diff --git a/tools/lvm.c b/tools/lvm.c
index 2f3b911..89ef8d3 100644
--- a/tools/lvm.c
+++ b/tools/lvm.c
@@ -215,6 +215,7 @@ int lvm_shell(struct cmd_context *cmd, struct cmdline_context *cmdline)
 	char *input = NULL, *args[MAX_ARGS], **argv;
 	int tty = 0;
 	fetch_line_fp get_next_line = _fetchline;
+	char prompt[32];
 
 	tty = isatty(STDIN_FILENO);
 
@@ -223,6 +224,7 @@ int lvm_shell(struct cmd_context *cmd, struct cmdline_context *cmdline)
 		rl_attempted_completion_function = (rl_completion_func_t *) _completion;
 		_read_history(cmd);
 		get_next_line = readline;
+		snprintf(prompt, sizeof(prompt), "lvm> ");
 	}
 
 	_cmdline = cmdline;
@@ -230,7 +232,12 @@ int lvm_shell(struct cmd_context *cmd, struct cmdline_context *cmdline)
 	_cmdline->interactive = 1;
 	while (1) {
 		free(input);
-		input = get_next_line("lvm> ");
+
+		if (!tty) {
+			snprintf(prompt, sizeof(prompt), "[%d] lvm> ", ret);
+		}
+
+		input = get_next_line(prompt);
 
 		/* EOF */
 		if (!input) {
@@ -283,6 +290,10 @@ int lvm_shell(struct cmd_context *cmd, struct cmdline_context *cmdline)
 
 		if (tty)
 			_write_history();
+
+		/* Zero ret if all was good */
+		if (ret == ECMD_PROCESSED)
+			ret = 0;
 	}
 
 	free(input);
-- 
1.7.1




More information about the lvm-devel mailing list