fish: New command: 'supported'

This checks all available optional groups and prints out which
ones are supported by the daemon.  Note you must launch the appliance
first.

Example:

><fs> supported
      augeas yes
     inotify yes
 linuxfsuuid yes
linuxmodules yes
 linuxxattrs yes
        lvm2 yes
       mknod yes
      ntfs3g yes
   ntfsprogs yes
    realpath yes
       scrub yes
     selinux yes
          xz yes
    zerofree yes
This commit is contained in:
Richard Jones
2010-05-25 11:28:09 +01:00
parent 1bd1f9b85f
commit c9f1a45334
7 changed files with 118 additions and 0 deletions

View File

@@ -49,6 +49,7 @@ guestfish_SOURCES = \
prep.c \
rc.c \
reopen.c \
supported.c \
tilde.c \
time.c

View File

@@ -992,6 +992,8 @@ issue_command (const char *cmd, char *argv[], const char *pipecmd)
r = do_reopen (cmd, argc, argv);
else if (STRCASEEQ (cmd, "sparse"))
r = do_sparse (cmd, argc, argv);
else if (STRCASEEQ (cmd, "supported"))
r = do_supported (cmd, argc, argv);
else if (STRCASEEQ (cmd, "time"))
r = do_time (cmd, argc, argv);
else
@@ -1048,6 +1050,8 @@ list_builtin_commands (void)
"reopen", _("close and reopen libguestfs handle"));
printf ("%-20s %s\n",
"sparse", _("allocate a sparse image file"));
printf ("%-20s %s\n",
"supported", _("list supported groups of commands"));
printf ("%-20s %s\n",
"time", _("measure time taken to run command"));
@@ -1162,6 +1166,16 @@ display_builtin_command (const char *cmd)
"\n"
" Size can be specified using standard suffixes, eg. '1M'.\n"
));
else if (STRCASEEQ (cmd, "supported"))
printf (_("supported - list supported groups of commands\n"
" supported\n"
"\n"
" This command returns a list of the optional groups\n"
" known to the daemon, and indicates which ones are\n"
" supported by this build of the libguestfs appliance.\n"
"\n"
" See also guestfs(3) section AVAILABILITY.\n"
));
else if (STRCASEEQ (cmd, "time"))
printf (_("time - measure time taken to run command\n"
" time <command> [<args> ...]\n"

View File

@@ -121,6 +121,9 @@ extern int rc_remote (int pid, const char *cmd, int argc, char *argv[],
/* in reopen.c */
extern int do_reopen (const char *cmd, int argc, char *argv[]);
/* in supported.c */
extern int do_supported (const char *cmd, int argc, char *argv[]);
/* in time.c */
extern int do_time (const char *cmd, int argc, char *argv[]);
@@ -142,6 +145,7 @@ extern char *try_tilde_expansion (char *path);
"more", "less", \
"reopen", \
"sparse", \
"supported", \
"time"
static inline char *

View File

@@ -785,6 +785,16 @@ For more advanced image creation, see L<qemu-img(1)> utility.
Size can be specified using standard suffixes, eg. C<1M>.
=head2 supported
supported
This command returns a list of the optional groups
known to the daemon, and indicates which ones are
supported by this build of the libguestfs appliance.
See also L<guestfs(3)/AVAILABILITY>.
=head2 time
time command args...

81
fish/supported.c Normal file
View File

@@ -0,0 +1,81 @@
/* guestfish - the filesystem interactive shell
* 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.
*/
#include <config.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "fish.h"
int
do_supported (const char *cmd, int argc, char *argv[])
{
char **groups;
/* As a side-effect this also checks that we've called 'launch'. */
groups = guestfs_available_all_groups (g);
if (groups == NULL)
return -1;
/* Temporarily replace the error handler so that messages don't get
* printed to stderr while we are issuing commands.
*/
guestfs_error_handler_cb old_error_cb;
void *old_error_cb_data;
old_error_cb = guestfs_get_error_handler (g, &old_error_cb_data);
guestfs_set_error_handler (g, NULL, NULL);
/* Work out the max string length of any group name. */
size_t i;
size_t len = 0;
for (i = 0; groups[i] != NULL; ++i) {
size_t l = strlen (groups[i]);
if (l > len)
len = l;
}
for (i = 0; groups[i] != NULL; ++i) {
size_t l = strlen (groups[i]);
size_t j;
for (j = 0; j < len-l; ++j)
putchar (' ');
printf ("%s", groups[i]);
putchar (' ');
char *gg[] = { groups[i], NULL };
int r = guestfs_available (g, gg);
if (r == 0)
printf ("%s", _("yes"));
else
printf ("%s", _("no"));
putchar ('\n');
}
/* Free groups list. */
for (i = 0; groups[i] != NULL; ++i)
free (groups[i]);
free (groups);
/* Restore error handler. */
guestfs_set_error_handler (g, old_error_cb, old_error_cb_data);
return 0;
}

View File

@@ -79,6 +79,7 @@ fish/more.c
fish/prep.c
fish/rc.c
fish/reopen.c
fish/supported.c
fish/tilde.c
fish/time.c
fuse/dircache.c

View File

@@ -801,6 +801,13 @@ supports the functionality.
@AVAILABILITY@
=head2 GUESTFISH supported COMMAND
In L<guestfish(3)> there is a handy interactive command
C<supported> which prints out the available groups and
whether they are supported by this build of libguestfs.
Note however that you have to do C<run> first.
=head2 SINGLE CALLS AT COMPILE TIME
If you need to test whether a single libguestfs function is