X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=fish%2Fcmds.c;h=82be2614e59a6d28a7349cd221b313ca10446d1a;hb=b36dab0552df45d3d08aeeaf931294d091516f1f;hp=c197ecea86ded8310ea91f2a79952cb332866d78;hpb=1765330e07a48dc6f7bdef7007f69ebe606fa731;p=libguestfs.git diff --git a/fish/cmds.c b/fish/cmds.c index c197ece..82be261 100644 --- a/fish/cmds.c +++ b/fish/cmds.c @@ -57,18 +57,25 @@ void list_commands (void) printf ("%-20s %s\n", "blockdev-setro", "set block device to read-only"); printf ("%-20s %s\n", "blockdev-setrw", "set block device to read-write"); printf ("%-20s %s\n", "cat", "list the contents of a file"); + printf ("%-20s %s\n", "checksum", "compute MD5, SHAx or CRC checksum of file"); printf ("%-20s %s\n", "chmod", "change file mode"); printf ("%-20s %s\n", "chown", "change file owner and group"); printf ("%-20s %s\n", "command", "run a command from the guest filesystem"); printf ("%-20s %s\n", "command-lines", "run a command, returning lines"); printf ("%-20s %s\n", "config", "add qemu parameters"); + printf ("%-20s %s\n", "download", "download a file to the local machine"); printf ("%-20s %s\n", "exists", "test if file or directory exists"); printf ("%-20s %s\n", "file", "determine file type"); printf ("%-20s %s\n", "get-autosync", "get autosync mode"); printf ("%-20s %s\n", "get-path", "get the search path"); + printf ("%-20s %s\n", "get-state", "get the current state"); printf ("%-20s %s\n", "get-verbose", "get verbose mode"); + printf ("%-20s %s\n", "is-busy", "is busy processing a command"); + printf ("%-20s %s\n", "is-config", "is in configuration state"); printf ("%-20s %s\n", "is-dir", "test if file exists"); printf ("%-20s %s\n", "is-file", "test if file exists"); + printf ("%-20s %s\n", "is-launching", "is launching subprocess"); + printf ("%-20s %s\n", "is-ready", "is ready to accept commands"); printf ("%-20s %s\n", "kill-subprocess", "kill the qemu subprocess"); printf ("%-20s %s\n", "launch", "launch the qemu subprocess"); printf ("%-20s %s\n", "list-devices", "list the block devices"); @@ -99,10 +106,15 @@ void list_commands (void) printf ("%-20s %s\n", "stat", "get file information"); printf ("%-20s %s\n", "statvfs", "get file system statistics"); printf ("%-20s %s\n", "sync", "sync disks, writes are flushed through to the disk image"); + printf ("%-20s %s\n", "tar-in", "unpack tarfile to directory"); + printf ("%-20s %s\n", "tar-out", "pack directory into tarfile"); + printf ("%-20s %s\n", "tgz-in", "unpack compressed tarball to directory"); + printf ("%-20s %s\n", "tgz-out", "pack directory into compressed tarball"); printf ("%-20s %s\n", "touch", "update file timestamps or create a new file"); printf ("%-20s %s\n", "tune2fs-l", "get ext2/ext3 superblock details"); printf ("%-20s %s\n", "umount", "unmount a filesystem"); printf ("%-20s %s\n", "umount-all", "unmount all filesystems"); + printf ("%-20s %s\n", "upload", "upload a file from the local machine"); printf ("%-20s %s\n", "vgcreate", "create an LVM volume group"); printf ("%-20s %s\n", "vgs", "list the LVM volume groups (VGs)"); printf ("%-20s %s\n", "vgs-full", "list the LVM volume groups (VGs)"); @@ -145,6 +157,21 @@ void display_command (const char *cmd) if (strcasecmp (cmd, "get_verbose") == 0 || strcasecmp (cmd, "get-verbose") == 0) pod2text ("get-verbose - get verbose mode", " get-verbose\n\nThis returns the verbose messages flag."); else + if (strcasecmp (cmd, "is_ready") == 0 || strcasecmp (cmd, "is-ready") == 0) + pod2text ("is-ready - is ready to accept commands", " is-ready\n\nThis returns true iff this handle is ready to accept commands\n(in the C state).\n\nFor more information on states, see L."); + else + if (strcasecmp (cmd, "is_config") == 0 || strcasecmp (cmd, "is-config") == 0) + pod2text ("is-config - is in configuration state", " is-config\n\nThis returns true iff this handle is being configured\n(in the C state).\n\nFor more information on states, see L."); + else + if (strcasecmp (cmd, "is_launching") == 0 || strcasecmp (cmd, "is-launching") == 0) + pod2text ("is-launching - is launching subprocess", " is-launching\n\nThis returns true iff this handle is launching the subprocess\n(in the C state).\n\nFor more information on states, see L."); + else + if (strcasecmp (cmd, "is_busy") == 0 || strcasecmp (cmd, "is-busy") == 0) + pod2text ("is-busy - is busy processing a command", " is-busy\n\nThis returns true iff this handle is busy processing a command\n(in the C state).\n\nFor more information on states, see L."); + else + if (strcasecmp (cmd, "get_state") == 0 || strcasecmp (cmd, "get-state") == 0) + pod2text ("get-state - get the current state", " get-state\n\nThis returns the current state as an opaque integer. This is\nonly useful for printing debug and internal error messages.\n\nFor more information on states, see L."); + else if (strcasecmp (cmd, "mount") == 0) pod2text ("mount - mount a guest disk at a position in the filesystem", " mount \n\nMount a guest disk at a position in the filesystem. Block devices\nare named C, C and so on, as they were added to\nthe guest. If those block devices contain partitions, they will have\nthe usual names (eg. C). Also LVM C-style\nnames can be used.\n\nThe rules are the same as for L: A filesystem must\nfirst be mounted on C before others can be mounted. Other\nfilesystems can only be mounted on directories which already\nexist.\n\nThe mounted filesystem is writable, if we have sufficient permissions\non the underlying device.\n\nThe filesystem options C and C are set with this\ncall, in order to improve reliability."); else @@ -340,6 +367,27 @@ void display_command (const char *cmd) if (strcasecmp (cmd, "blockdev_rereadpt") == 0 || strcasecmp (cmd, "blockdev-rereadpt") == 0) pod2text ("blockdev-rereadpt - reread partition table", " blockdev-rereadpt \n\nReread the partition table on C.\n\nThis uses the L command."); else + if (strcasecmp (cmd, "upload") == 0) + pod2text ("upload - upload a file from the local machine", " upload \n\nUpload local file C to C on the\nfilesystem.\n\nC can also be a named pipe.\n\nSee also C."); + else + if (strcasecmp (cmd, "download") == 0) + pod2text ("download - download a file to the local machine", " download \n\nDownload file C and save it as C\non the local machine.\n\nC can also be a named pipe.\n\nSee also C, C."); + else + if (strcasecmp (cmd, "checksum") == 0) + pod2text ("checksum - compute MD5, SHAx or CRC checksum of file", " checksum \n\nThis call computes the MD5, SHAx or CRC checksum of the\nfile named C.\n\nThe type of checksum to compute is given by the C\nparameter which must have one of the following values:\n\n=over 4\n\n=item C\n\nCompute the cyclic redundancy check (CRC) specified by POSIX\nfor the C command.\n\n=item C\n\nCompute the MD5 hash (using the C program).\n\n=item C\n\nCompute the SHA1 hash (using the C program).\n\n=item C\n\nCompute the SHA224 hash (using the C program).\n\n=item C\n\nCompute the SHA256 hash (using the C program).\n\n=item C\n\nCompute the SHA384 hash (using the C program).\n\n=item C\n\nCompute the SHA512 hash (using the C program).\n\n=back\n\nThe checksum is returned as a printable string."); + else + if (strcasecmp (cmd, "tar_in") == 0 || strcasecmp (cmd, "tar-in") == 0) + pod2text ("tar-in - unpack tarfile to directory", " tar-in \n\nThis command uploads and unpacks local file C (an\nI tar file) into C.\n\nTo upload a compressed tarball, use C."); + else + if (strcasecmp (cmd, "tar_out") == 0 || strcasecmp (cmd, "tar-out") == 0) + pod2text ("tar-out - pack directory into tarfile", " tar-out \n\nThis command packs the contents of C and downloads\nit to local file C.\n\nTo download a compressed tarball, use C."); + else + if (strcasecmp (cmd, "tgz_in") == 0 || strcasecmp (cmd, "tgz-in") == 0) + pod2text ("tgz-in - unpack compressed tarball to directory", " tgz-in \n\nThis command uploads and unpacks local file C (a\nI tar file) into C.\n\nTo upload an uncompressed tarball, use C."); + else + if (strcasecmp (cmd, "tgz_out") == 0 || strcasecmp (cmd, "tgz-out") == 0) + pod2text ("tgz-out - pack directory into compressed tarball", " tgz-out \n\nThis command packs the contents of C and downloads\nit to local file C.\n\nTo download an uncompressed tarball, use C."); + else display_builtin_command (cmd); } @@ -629,6 +677,76 @@ static int run_get_verbose (const char *cmd, int argc, char *argv[]) return 0; } +static int run_is_ready (const char *cmd, int argc, char *argv[]) +{ + int r; + if (argc != 0) { + fprintf (stderr, "%s should have 0 parameter(s)\n", cmd); + fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd); + return -1; + } + r = guestfs_is_ready (g); + if (r == -1) return -1; + if (r) printf ("true\n"); else printf ("false\n"); + return 0; +} + +static int run_is_config (const char *cmd, int argc, char *argv[]) +{ + int r; + if (argc != 0) { + fprintf (stderr, "%s should have 0 parameter(s)\n", cmd); + fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd); + return -1; + } + r = guestfs_is_config (g); + if (r == -1) return -1; + if (r) printf ("true\n"); else printf ("false\n"); + return 0; +} + +static int run_is_launching (const char *cmd, int argc, char *argv[]) +{ + int r; + if (argc != 0) { + fprintf (stderr, "%s should have 0 parameter(s)\n", cmd); + fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd); + return -1; + } + r = guestfs_is_launching (g); + if (r == -1) return -1; + if (r) printf ("true\n"); else printf ("false\n"); + return 0; +} + +static int run_is_busy (const char *cmd, int argc, char *argv[]) +{ + int r; + if (argc != 0) { + fprintf (stderr, "%s should have 0 parameter(s)\n", cmd); + fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd); + return -1; + } + r = guestfs_is_busy (g); + if (r == -1) return -1; + if (r) printf ("true\n"); else printf ("false\n"); + return 0; +} + +static int run_get_state (const char *cmd, int argc, char *argv[]) +{ + int r; + if (argc != 0) { + fprintf (stderr, "%s should have 0 parameter(s)\n", cmd); + fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd); + return -1; + } + r = guestfs_get_state (g); + if (r == -1) return -1; + printf ("%d\n", r); + return 0; +} + static int run_mount (const char *cmd, int argc, char *argv[]) { int r; @@ -1648,6 +1766,121 @@ static int run_blockdev_rereadpt (const char *cmd, int argc, char *argv[]) return r; } +static int run_upload (const char *cmd, int argc, char *argv[]) +{ + int r; + const char *filename; + const char *remotefilename; + if (argc != 2) { + fprintf (stderr, "%s should have 2 parameter(s)\n", cmd); + fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd); + return -1; + } + filename = strcmp (argv[0], "-") != 0 ? argv[0] : "/dev/stdin"; + remotefilename = argv[1]; + r = guestfs_upload (g, filename, remotefilename); + return r; +} + +static int run_download (const char *cmd, int argc, char *argv[]) +{ + int r; + const char *remotefilename; + const char *filename; + if (argc != 2) { + fprintf (stderr, "%s should have 2 parameter(s)\n", cmd); + fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd); + return -1; + } + remotefilename = argv[0]; + filename = strcmp (argv[1], "-") != 0 ? argv[1] : "/dev/stdout"; + r = guestfs_download (g, remotefilename, filename); + return r; +} + +static int run_checksum (const char *cmd, int argc, char *argv[]) +{ + char *r; + const char *csumtype; + const char *path; + if (argc != 2) { + fprintf (stderr, "%s should have 2 parameter(s)\n", cmd); + fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd); + return -1; + } + csumtype = argv[0]; + path = argv[1]; + r = guestfs_checksum (g, csumtype, path); + if (r == NULL) return -1; + printf ("%s\n", r); + free (r); + return 0; +} + +static int run_tar_in (const char *cmd, int argc, char *argv[]) +{ + int r; + const char *tarfile; + const char *directory; + if (argc != 2) { + fprintf (stderr, "%s should have 2 parameter(s)\n", cmd); + fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd); + return -1; + } + tarfile = strcmp (argv[0], "-") != 0 ? argv[0] : "/dev/stdin"; + directory = argv[1]; + r = guestfs_tar_in (g, tarfile, directory); + return r; +} + +static int run_tar_out (const char *cmd, int argc, char *argv[]) +{ + int r; + const char *directory; + const char *tarfile; + if (argc != 2) { + fprintf (stderr, "%s should have 2 parameter(s)\n", cmd); + fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd); + return -1; + } + directory = argv[0]; + tarfile = strcmp (argv[1], "-") != 0 ? argv[1] : "/dev/stdout"; + r = guestfs_tar_out (g, directory, tarfile); + return r; +} + +static int run_tgz_in (const char *cmd, int argc, char *argv[]) +{ + int r; + const char *tarball; + const char *directory; + if (argc != 2) { + fprintf (stderr, "%s should have 2 parameter(s)\n", cmd); + fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd); + return -1; + } + tarball = strcmp (argv[0], "-") != 0 ? argv[0] : "/dev/stdin"; + directory = argv[1]; + r = guestfs_tgz_in (g, tarball, directory); + return r; +} + +static int run_tgz_out (const char *cmd, int argc, char *argv[]) +{ + int r; + const char *directory; + const char *tarball; + if (argc != 2) { + fprintf (stderr, "%s should have 2 parameter(s)\n", cmd); + fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd); + return -1; + } + directory = argv[0]; + tarball = strcmp (argv[1], "-") != 0 ? argv[1] : "/dev/stdout"; + r = guestfs_tgz_out (g, directory, tarball); + return r; +} + int run_action (const char *cmd, int argc, char *argv[]) { if (strcasecmp (cmd, "launch") == 0 || strcasecmp (cmd, "run") == 0) @@ -1683,6 +1916,21 @@ int run_action (const char *cmd, int argc, char *argv[]) if (strcasecmp (cmd, "get_verbose") == 0 || strcasecmp (cmd, "get-verbose") == 0) return run_get_verbose (cmd, argc, argv); else + if (strcasecmp (cmd, "is_ready") == 0 || strcasecmp (cmd, "is-ready") == 0) + return run_is_ready (cmd, argc, argv); + else + if (strcasecmp (cmd, "is_config") == 0 || strcasecmp (cmd, "is-config") == 0) + return run_is_config (cmd, argc, argv); + else + if (strcasecmp (cmd, "is_launching") == 0 || strcasecmp (cmd, "is-launching") == 0) + return run_is_launching (cmd, argc, argv); + else + if (strcasecmp (cmd, "is_busy") == 0 || strcasecmp (cmd, "is-busy") == 0) + return run_is_busy (cmd, argc, argv); + else + if (strcasecmp (cmd, "get_state") == 0 || strcasecmp (cmd, "get-state") == 0) + return run_get_state (cmd, argc, argv); + else if (strcasecmp (cmd, "mount") == 0) return run_mount (cmd, argc, argv); else @@ -1878,6 +2126,27 @@ int run_action (const char *cmd, int argc, char *argv[]) if (strcasecmp (cmd, "blockdev_rereadpt") == 0 || strcasecmp (cmd, "blockdev-rereadpt") == 0) return run_blockdev_rereadpt (cmd, argc, argv); else + if (strcasecmp (cmd, "upload") == 0) + return run_upload (cmd, argc, argv); + else + if (strcasecmp (cmd, "download") == 0) + return run_download (cmd, argc, argv); + else + if (strcasecmp (cmd, "checksum") == 0) + return run_checksum (cmd, argc, argv); + else + if (strcasecmp (cmd, "tar_in") == 0 || strcasecmp (cmd, "tar-in") == 0) + return run_tar_in (cmd, argc, argv); + else + if (strcasecmp (cmd, "tar_out") == 0 || strcasecmp (cmd, "tar-out") == 0) + return run_tar_out (cmd, argc, argv); + else + if (strcasecmp (cmd, "tgz_in") == 0 || strcasecmp (cmd, "tgz-in") == 0) + return run_tgz_in (cmd, argc, argv); + else + if (strcasecmp (cmd, "tgz_out") == 0 || strcasecmp (cmd, "tgz-out") == 0) + return run_tgz_out (cmd, argc, argv); + else { fprintf (stderr, "%s: unknown command\n", cmd); return -1;