mirror of
https://github.com/libguestfs/libguestfs.git
synced 2026-03-21 22:53:37 +00:00
fish: Allow '-' prefix on command line to override exit on error (RHBZ#578407).
Allow -cmd on the command line to mean that normal exit on error behaviour is overridden, ie. we will not exit. This allows you to do: guestfish -- command : -command : command with the second command allowing errors. (Note that '--' is required to stop getopt parsing -command as an option). Also this fixes the remote case which is what the original bug report was about.
This commit is contained in:
15
fish/fish.c
15
fish/fish.c
@@ -768,6 +768,15 @@ cmdline (char *argv[], int optind, int argc)
|
||||
fprintf (stderr, _("%s: empty command on command line\n"), program_name);
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
/* Allow -cmd on the command line to mean (temporarily) override
|
||||
* the normal exit on error (RHBZ#578407).
|
||||
*/
|
||||
if (cmd[0] == '-') {
|
||||
exit_on_error = 0;
|
||||
cmd++;
|
||||
}
|
||||
|
||||
params = &argv[optind];
|
||||
|
||||
/* Search for end of command list or ":" ... */
|
||||
@@ -775,10 +784,12 @@ cmdline (char *argv[], int optind, int argc)
|
||||
optind++;
|
||||
|
||||
if (optind == argc) {
|
||||
if (issue_command (cmd, params, NULL) == -1) exit (EXIT_FAILURE);
|
||||
if (issue_command (cmd, params, NULL) == -1 && exit_on_error)
|
||||
exit (EXIT_FAILURE);
|
||||
} else {
|
||||
argv[optind] = NULL;
|
||||
if (issue_command (cmd, params, NULL) == -1) exit (EXIT_FAILURE);
|
||||
if (issue_command (cmd, params, NULL) == -1 && exit_on_error)
|
||||
exit (EXIT_FAILURE);
|
||||
cmdline (argv, optind+1, argc);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@ TESTS = \
|
||||
rhbz503169c10.sh \
|
||||
rhbz503169c13.sh \
|
||||
rhbz557655.sh \
|
||||
rhbz578407.sh \
|
||||
rhbz580246.sh \
|
||||
test-cancellation-download-librarycancels.sh \
|
||||
test-cancellation-upload-daemoncancels.sh \
|
||||
|
||||
43
regressions/rhbz578407.sh
Executable file
43
regressions/rhbz578407.sh
Executable file
@@ -0,0 +1,43 @@
|
||||
#!/bin/bash -
|
||||
# libguestfs
|
||||
# Copyright (C) 2010 Red Hat Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
# Regression test for:
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=578407
|
||||
# prefix '-' in sub-command isn't handled by guestfish in remote control mode
|
||||
# Reported by Qixiang Wan.
|
||||
|
||||
set -e
|
||||
|
||||
guestfish=../fish/guestfish
|
||||
|
||||
# Start remote guestfish.
|
||||
eval `$guestfish --listen 2>/dev/null`
|
||||
|
||||
# This should succeed.
|
||||
$guestfish --remote version > /dev/null
|
||||
|
||||
# This command will fail (because appliance not launched), but
|
||||
# prefixing with '-' should make remote guestfish ignore the failure.
|
||||
$guestfish --remote -- -lvs
|
||||
|
||||
# Remote guestfish should still be running.
|
||||
$guestfish --remote version > /dev/null
|
||||
$guestfish --remote exit
|
||||
|
||||
# Try some other command line argument tests which are related the fix.
|
||||
$guestfish -- version : -lvs : version > /dev/null 2>&1
|
||||
Reference in New Issue
Block a user