#include <fcntl.h>
#include <getopt.h>
#include <signal.h>
-#include <assert.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <locale.h>
fprintf (stdout,
_("%s: guest filesystem shell\n"
"%s lets you edit virtual machine filesystems\n"
- "Copyright (C) 2009 Red Hat Inc.\n"
+ "Copyright (C) 2009-2010 Red Hat Inc.\n"
"Usage:\n"
" %s [--options] cmd [: cmd : cmd ...]\n"
- " %s -i libvirt-domain\n"
- " %s -i disk-image(s)\n"
+ " %s [--ro] -i -a disk-image\n"
+ " %s [--ro] -i -d libvirt-domain\n"
"or for interactive use:\n"
" %s\n"
"or from a shell script:\n"
" -v|--verbose Verbose messages\n"
" -x Echo each command before executing it\n"
" -V|--version Display version and exit\n"
- "For more information, see the manpage %s(1).\n"),
+ "For more information, see the manpage %s(1).\n"),
program_name, program_name, program_name,
program_name, program_name, program_name,
program_name, program_name, program_name);
*/
const char *options = read_only ? "ro" : "";
r = guestfs_mount_options (g, options, mp->device, mp->mountpoint);
- if (r == -1)
+ if (r == -1) {
+ /* Display possible mountpoints before exiting. */
+ char **fses = guestfs_list_filesystems (g);
+ if (fses == NULL || fses[0] == NULL)
+ goto out;
+ fprintf (stderr,
+ _("guestfish: '%s' could not be mounted. Did you mean one of these?\n"),
+ mp->device);
+ size_t i;
+ for (i = 0; fses[i] != NULL; i += 2)
+ fprintf (stderr, "\t%s (%s)\n", fses[i], fses[i+1]);
+
+ out:
exit (EXIT_FAILURE);
+ }
}
}
else if (STRCASEEQ (cmd, "alloc") ||
STRCASEEQ (cmd, "allocate"))
r = do_alloc (cmd, argc, argv);
+ else if (STRCASEEQ (cmd, "copy-in") ||
+ STRCASEEQ (cmd, "copy_in"))
+ r = do_copy_in (cmd, argc, argv);
+ else if (STRCASEEQ (cmd, "copy-out") ||
+ STRCASEEQ (cmd, "copy_out"))
+ r = do_copy_out (cmd, argc, argv);
else if (STRCASEEQ (cmd, "echo"))
r = do_echo (cmd, argc, argv);
else if (STRCASEEQ (cmd, "edit") ||
printf ("%-20s %s\n",
"alloc", _("allocate an image"));
printf ("%-20s %s\n",
+ "copy-in", _("copy files into an image"));
+ printf ("%-20s %s\n",
+ "copy-out", _("copy files out of an image"));
+ printf ("%-20s %s\n",
"echo", _("display a line of text"));
printf ("%-20s %s\n",
"edit", _("edit a file in the image"));
));
return 0;
}
+ else if (STRCASEEQ (cmd, "copy-in") ||
+ STRCASEEQ (cmd, "copy_in")) {
+ printf (_("copy-in - copy files into an image\n"
+ " copy-in <local> [<local> ...] <remotedir>\n"
+ "\n"
+ " Copy local files or directories recursively into the\n"
+ " image, placing them on a remote directory.\n"
+ ));
+ return 0;
+ }
+ else if (STRCASEEQ (cmd, "copy-out") ||
+ STRCASEEQ (cmd, "copy_out")) {
+ printf (_("copy-out - copy files out of an image\n"
+ " copy-out <remote> [<remote> ...] <localdir>\n"
+ "\n"
+ " Copy remote files or directories recursively out of the\n"
+ " image, placing them in a local directory.\n"
+ ));
+ return 0;
+ }
else if (STRCASEEQ (cmd, "echo")) {
printf (_("echo - display a line of text\n"
" echo [<params> ...]\n"
" running \"cat\", editing locally, and then \"write\".\n"
"\n"
" Normally it uses $EDITOR, but if you use the aliases\n"
- " \"vi\" or \"emacs\" you will get those editors.\n"
- "\n"
- " NOTE: This will not work reliably for large files\n"
- " (> 2 MB) or binary files containing \\0 bytes.\n"));
+ " \"vi\" or \"emacs\" you will get those editors.\n"));
return 0;
}
else if (STRCASEEQ (cmd, "lcd")) {
" running \"cat\" and using the pager.\n"
"\n"
" Normally it uses $PAGER, but if you use the alias\n"
- " \"less\" then it always uses \"less\".\n"
- "\n"
- " NOTE: This will not work reliably for large files\n"
- " (> 2 MB) or binary files containing \\0 bytes.\n"));
+ " \"less\" then it always uses \"less\".\n"));
return 0;
}
else if (STRCASEEQ (cmd, "quit") ||