Browse files

docs: Obsolete HACKING file, move content into guestfs(3) man page.

Add a new section called "EXTENDING LIBGUESTFS" to the
guestfs manual page which contains all the information
previously in "HACKING".
  • Loading branch information...
1 parent 84fbe21 commit d2400da92e5e2cc7fd5e33e61220a33214d5241c @rwmjones rwmjones committed Dec 19, 2010
Showing with 354 additions and 267 deletions.
  1. +2 −258 HACKING
  2. +1 −1
  3. +2 −2 daemon/daemon.h
  4. +2 −1 daemon/guestfsd.c
  5. +3 −3 generator/
  6. +1 −1 generator/
  7. +1 −1 src/api-support/
  8. +342 −0 src/guestfs.pod
@@ -1,258 +1,2 @@
-Adding a new action
-All action functions are generated automatically, so there are only
-two files you need to edit:
-(1) generator/ Add your new action, parameters,
-description, etc. to the big list at the top of this file.
-(2) Edit/create a C file in daemon/ subdirectory which implements your
-'do_action' function. Take a look at one of the numerous examples
-Try to use GNU / Emacs default formatting, following the convention
-used elsewhere in the source.
-Please make sure that the code compiles without warnings.
-Please test any changes.
-Useful targets:
- make syntax-check Checks the syntax of the C code.
- make check Runs the test suite.
-Enable warnings, and fix any you find:
- ./configure --enable-gcc-warnings
-Code indentation
-Our C source code generally adheres to some basic code-formatting
-conventions. The existing code base is not totally consistent on this
-front, but we do prefer that contributed code be formatted similarly.
-In short, use spaces-not-TABs for indentation, use 2 spaces for each
-indentation level, and other than that, follow the K&R style.
-If you use Emacs, add the following to one of one of your start-up files
-(e.g., ~/.emacs), to help ensure that you get indentation right:
- ;;; In libguestfs, indent with spaces everywhere (not TABs).
- ;;; Exceptions: Makefile and ChangeLog modes.
- (add-hook 'find-file-hook
- '(lambda () (if (and buffer-file-name
- (string-match "/libguestfs\\>" (buffer-file-name))
- (not (string-equal mode-name "Change Log"))
- (not (string-equal mode-name "Makefile")))
- (setq indent-tabs-mode nil))))
- ;;; When editing C sources in libguestfs, use this style.
- (defun libguestfs-c-mode ()
- "C mode with adjusted defaults for use with libguestfs."
- (interactive)
- (c-set-style "K&R")
- (setq c-indent-level 2)
- (setq c-basic-offset 2))
- (add-hook 'c-mode-hook
- '(lambda () (if (string-match "/libguestfs\\>" (buffer-file-name))
- (libguestfs-c-mode))))
- The qemu appliance, build scripts and so on.
- Automated tests of the C API. See "Tests" below.
- The 'virt-cat', 'virt-filesystems' and 'virt-ls' commands and
- documentation.
- Outside contributions, experimental parts.
- Experimental C# bindings.
- The daemon that runs inside the guest and carries out actions.
- 'virt-df' command and documentation.
- The examples.
- Guestfish (the command-line program / shell)
- FUSE (userspace filesystem) built on top of libguestfs.
- The crucially important generator, used to automatically
- generate large amounts of boilerplate C code for things like
- RPC and bindings.
- Haskell bindings.
-hivex/ [removed in 1.0.85]
- This used to contain the hivex library for reading and
- writing Windows Registry binary hive files. This is now
- available as a separate upstream project.
- Some guest images to test against. These are gzipped to save
- space. You have to unzip them before use.
- Also contains some files used by the test suite.
- Virtual machine image inspector (virt-inspector).
- Java bindings.
- M4 macros used by autoconf.
- OCaml bindings.
- PHP bindings.
- Translations of simple gettext strings. For translations of
- longer documents, see po-docs/.
- The build infrastructure and PO files for translations of
- manpages and POD files. Eventually this will be combined
- with the po/ directory, but that is rather complicated.
- Perl bindings.
- Python bindings.
- Regression tests.
- 'virt-rescue' command and documentation.
- Ruby bindings.
- Command line tools written in Perl (virt-resize and more).
- Source code to the C library.
- Interactive qemu/kernel test tool.
-You can supply zero or as many tests as you want per API call.
-The test environment has 4 block devices:
- /dev/sda 500MB General block device for testing.
- /dev/sdb 50MB /dev/sdb1 is an ext2 filesystem used for testing
- filesystem write operations.
- /dev/sdc 10MB Used in a few tests where 2 block devices are needed.
- /dev/sdd - ISO with fixed content (see images/test.iso).
-To be able to run the tests in a reasonable amount of time, the
-virtual machine and block devices are reused between tests. So don't
-try testing kill_subprocess :-x Between each test we blockdev-setrw,
-umount-all, lvm-remove-all.
-Each test starts with an initial scenario, selected using one of the
-'Init*' expressions, described in generator/ These
-initialize the disks in a particular way as described. You should not
-assume anything about the previous contents of other disks that are
-not initialized.
-You can add a prerequisite clause to any individual test. This is a
-run-time check, which, if it fails, causes the test to be skipped.
-Useful if testing a command which might not work on all variations of
-libguestfs builds. A test that has prerequisite of 'Always' is run
-In addition, packagers can skip individual tests by setting the
-environment variables: eg:
- SKIP_TEST_<CMD>_<NUM>=1 SKIP_TEST_COMMAND_3=1 (skips test #3 of command)
- SKIP_TEST_<CMD>=1 SKIP_TEST_ZEROFREE=1 (skips all zerofree tests)
-and packagers can run only certain tests by setting eg:
- TEST_ONLY="vfs_type zerofree"
-See capitests/tests.c for more details of how these environment
-variables work.
-It's a good idea to use guestfish to try out new commands.
-Debugging the daemon is a problem because it runs inside a minimal
-qemu environment. However you can print messages from the daemon, and
-they will show up if you use 'guestfish -v'.
-Submit patches to the mailing list:
-and CC to
-We support i18n (gettext anyhow) in the library.
-However many messages come from the daemon, and we don't translate
-those at the moment. One reason is that the appliance generally has
-all locale files removed from it, because they take up a lot of space.
-So we'd have to readd some of those, as well as copying our PO files
-into the appliance.
-Debugging messages are never translated, since they are intended for
-the programmers.
-Extended printf
-In the daemon code we have created custom printf formatters %Q and %R,
-which are used to do shell quoting.
-%Q => Simple shell quoted string. Any spaces or other shell characters
- are escaped for you.
-%R => Same as %Q except the string is treated as a path which is prefixed
- by the sysroot.
-asprintf (&cmd, "cat %R", path);
-==> "cat /sysroot/some\ path\ with\ spaces"
-Note: Do NOT use these when you are passing parameters to the
-command{,r,v,rv}() functions. These parameters do NOT need to be
-quoted because they are not passed via the shell (instead, straight to
-exec). You probably want to use the sysroot_path() function however.
+The contents of this page have moved to the section "EXTENDING LIBGUESTFS"
+in the guestfs(3) man page.
@@ -128,7 +128,7 @@ HTMLFILES = \
html/recipes.html \
html/pod.css html/recipes.css
WEBSITEDIR = $(HOME)/d/redhat/websites/libguestfs
@@ -81,8 +81,8 @@ extern int prog_exists (const char *prog);
extern void udev_settle (void);
-/* This just stops gcc from giving a warning about our custom
- * printf formatters %Q and %R. See HACKING file for more
+/* This just stops gcc from giving a warning about our custom printf
+ * formatters %Q and %R. See guestfs(3)/EXTENDING LIBGUESTFS for more
* info about these.
static inline int
@@ -974,7 +974,8 @@ trim (char *str)
/* printf helper function so we can use %Q ("quoted") and %R to print
- * shell-quoted strings. See HACKING file for more details.
+ * shell-quoted strings. See guestfs(3)/EXTENDING LIBGUESTFS for more
+ * details.
static int
print_shell_quote (FILE *stream,
@@ -50,7 +50,7 @@ let perror msg = function
(* Main program. *)
let () =
let lock_fd =
- try openfile "HACKING" [O_RDWR] 0
+ try openfile "BUGS" [O_RDWR] 0
| Unix_error (ENOENT, _, _) ->
eprintf "\
@@ -60,7 +60,7 @@ Run it from the top source directory using the command
exit 1
| exn ->
- perror "open: HACKING" exn;
+ perror "open: BUGS" exn;
exit 1 in
(* Acquire a lock so parallel builds won't try to run the generator
@@ -70,7 +70,7 @@ Run it from the top source directory using the command
(try lockf lock_fd F_LOCK 1
with exn ->
- perror "lock: HACKING" exn;
+ perror "lock: BUGS" exn;
exit 1);
(* Read the API versions file. *)
@@ -218,7 +218,7 @@ and fish_output_t =
| FishOutputOctal (* for int return, print in octal *)
| FishOutputHexadecimal (* for int return, print in hex *)
-(* See section "Tests" in HACKING file. *)
+(* See guestfs(3)/EXTENDING LIBGUESTFS. *)
type tests = (test_init * test_prereq * test) list
and test =
(* Run the command sequence and just expect nothing to fail. *)
@@ -16,7 +16,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-if [ ! -f HACKING ]; then
+if [ ! -f BUGS ]; then
echo "You should run this script from the top source directory."
exit 1
Oops, something went wrong.

0 comments on commit d2400da

Please sign in to comment.