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:
Richard Jones
2010-04-13 22:06:43 +01:00
parent c076aaea7e
commit ad752b80d7
3 changed files with 57 additions and 2 deletions

View File

@@ -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);
}
}

View File

@@ -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
View 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