New API calls to upload/download txz files (RHBZ#580556).

This commit is contained in:
Richard Jones
2010-04-08 16:07:32 +01:00
parent 0ce9b2bb9b
commit 50195d6ec4
6 changed files with 59 additions and 9 deletions

View File

@@ -27,6 +27,7 @@
udev
util-linux-ng
vim-minimal
xz
#elif DEBIAN == 1
bsdmainutils
btrfs-tools
@@ -42,6 +43,7 @@
udev
util-linux
vim-tiny
xz-utils
#endif
bash

View File

@@ -158,8 +158,8 @@ do_tar_out (const char *dir)
}
/* Has one FileIn parameter. */
int
do_tgz_in (const char *dir)
static int
do_tXz_in (const char *dir, char filter)
{
int err, r;
FILE *fp;
@@ -172,7 +172,7 @@ do_tgz_in (const char *dir)
}
/* "tar -C /sysroot%s -zxf -" but we have to quote the dir. */
if (asprintf_nowarn (&cmd, "tar -C %R -zxf -", dir) == -1) {
if (asprintf_nowarn (&cmd, "tar -C %R -%cxf -", dir, filter) == -1) {
err = errno;
cancel_receive ();
errno = err;
@@ -219,9 +219,23 @@ do_tgz_in (const char *dir)
return 0;
}
/* Has one FileOut parameter. */
/* Has one FileIn parameter. */
int
do_tgz_out (const char *dir)
do_tgz_in (const char *dir)
{
return do_tXz_in (dir, 'z');
}
/* Has one FileIn parameter. */
int
do_txz_in (const char *dir)
{
return do_tXz_in (dir, 'J');
}
/* Has one FileOut parameter. */
static int
do_tXz_out (const char *dir, char filter)
{
int r;
FILE *fp;
@@ -229,7 +243,7 @@ do_tgz_out (const char *dir)
char buf[GUESTFS_MAX_CHUNK_SIZE];
/* "tar -C /sysroot%s -zcf - ." but we have to quote the dir. */
if (asprintf_nowarn (&cmd, "tar -C %R -zcf - .", dir) == -1) {
if (asprintf_nowarn (&cmd, "tar -C %R -%ccf - .", dir, filter) == -1) {
reply_with_perror ("asprintf");
return -1;
}
@@ -276,3 +290,17 @@ do_tgz_out (const char *dir)
return 0;
}
/* Has one FileOut parameter. */
int
do_tgz_out (const char *dir)
{
return do_tXz_out (dir, 'z');
}
/* Has one FileOut parameter. */
int
do_txz_out (const char *dir)
{
return do_tXz_out (dir, 'J');
}

View File

@@ -23,6 +23,7 @@ builddir ?= $(top_builddir)/images
EXTRA_DIST = \
helloworld.tar \
helloworld.tar.gz \
helloworld.tar.xz \
mbr-ext2-empty.img.gz \
empty known-1 known-2 known-3 known-4 known-5 \
bin-i586-dynamic \
@@ -47,6 +48,7 @@ CLEANFILES = \
images_files_src = \
$(srcdir)/helloworld.tar \
$(srcdir)/helloworld.tar.gz \
$(srcdir)/helloworld.tar.xz \
$(srcdir)/empty \
$(srcdir)/known-1 \
$(srcdir)/known-2 \

BIN
images/helloworld.tar.xz Normal file

Binary file not shown.

View File

@@ -1 +1 @@
228
230

View File

@@ -2025,7 +2025,8 @@ The checksum is returned as a printable string.");
This command uploads and unpacks local file C<tarfile> (an
I<uncompressed> tar file) into C<directory>.
To upload a compressed tarball, use C<guestfs_tgz_in>.");
To upload a compressed tarball, use C<guestfs_tgz_in>
or C<guestfs_txz_in>.");
("tar_out", (RErr, [String "directory"; FileOut "tarfile"]), 70, [],
[],
@@ -2034,7 +2035,8 @@ To upload a compressed tarball, use C<guestfs_tgz_in>.");
This command packs the contents of C<directory> and downloads
it to local file C<tarfile>.
To download a compressed tarball, use C<guestfs_tgz_out>.");
To download a compressed tarball, use C<guestfs_tgz_out>
or C<guestfs_txz_out>.");
("tgz_in", (RErr, [FileIn "tarball"; String "directory"]), 71, [],
[InitBasicFS, Always, TestOutput (
@@ -4355,6 +4357,22 @@ This command writes zeroes over the entire C<device>. Compare
with C<guestfs_zero> which just zeroes the first few blocks of
a device.");
("txz_in", (RErr, [FileIn "tarball"; String "directory"]), 229, [],
[InitBasicFS, Always, TestOutput (
[["txz_in"; "../images/helloworld.tar.xz"; "/"];
["cat"; "/hello"]], "hello\n")],
"unpack compressed tarball to directory",
"\
This command uploads and unpacks local file C<tarball> (an
I<xz compressed> tar file) into C<directory>.");
("txz_out", (RErr, [Pathname "directory"; FileOut "tarball"]), 230, [],
[],
"pack directory into compressed tarball",
"\
This command packs the contents of C<directory> and downloads
it to local file C<tarball> (as an xz compressed tar archive).");
]
let all_functions = non_daemon_functions @ daemon_functions