[ostree: 53/70] Add support for ostree static-delta delete
- From: Colin Walters <walters src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [ostree: 53/70] Add support for ostree static-delta delete
- Date: Fri, 15 Apr 2016 21:05:42 +0000 (UTC)
commit ddda8e5b8bb1ec21b2a4c5340dc36362c59c1271
Author: Alexander Larsson <alexl redhat com>
Date: Fri Apr 8 10:44:24 2016 +0200
Add support for ostree static-delta delete
Closes: #245
Approved by: giuseppe
man/ostree-static-delta.xml | 6 ++++
src/libostree/ostree-cmdprivate.c | 3 +-
src/libostree/ostree-cmdprivate.h | 1 +
src/libostree/ostree-repo-static-delta-core.c | 35 ++++++++++++++++++++++
src/libostree/ostree-repo-static-delta-private.h | 6 ++++
src/ostree/ot-builtin-static-delta.c | 35 ++++++++++++++++++++++
tests/test-delta.sh | 17 ++++++++++-
7 files changed, 101 insertions(+), 2 deletions(-)
---
diff --git a/man/ostree-static-delta.xml b/man/ostree-static-delta.xml
index d410a2d..ed2e1f4 100644
--- a/man/ostree-static-delta.xml
+++ b/man/ostree-static-delta.xml
@@ -52,6 +52,12 @@ Boston, MA 02111-1307, USA.
<command>ostree static-delta list</command>
</cmdsynopsis>
<cmdsynopsis>
+ <command>ostree static-delta show</command>
+ </cmdsynopsis>
+ <cmdsynopsis>
+ <command>ostree static-delta delete</command>
+ </cmdsynopsis>
+ <cmdsynopsis>
<command>ostree static-delta generate</command> <arg choice="req">--to=REV</arg> <arg
choice="opt" rep="repeat">OPTIONS</arg>
</cmdsynopsis>
<cmdsynopsis>
diff --git a/src/libostree/ostree-cmdprivate.c b/src/libostree/ostree-cmdprivate.c
index 74c32a3..2c85bb4 100644
--- a/src/libostree/ostree-cmdprivate.c
+++ b/src/libostree/ostree-cmdprivate.c
@@ -46,7 +46,8 @@ ostree_cmd__private__ (void)
{
static OstreeCmdPrivateVTable table = {
impl_ostree_generate_grub2_config,
- _ostree_repo_static_delta_dump
+ _ostree_repo_static_delta_dump,
+ _ostree_repo_static_delta_delete
};
return &table;
diff --git a/src/libostree/ostree-cmdprivate.h b/src/libostree/ostree-cmdprivate.h
index 8106156..9a74ead 100644
--- a/src/libostree/ostree-cmdprivate.h
+++ b/src/libostree/ostree-cmdprivate.h
@@ -27,6 +27,7 @@ G_BEGIN_DECLS
typedef struct {
gboolean (* ostree_generate_grub2_config) (OstreeSysroot *sysroot, int bootversion, int target_fd,
GCancellable *cancellable, GError **error);
gboolean (* ostree_static_delta_dump) (OstreeRepo *repo, const char *delta_id, GCancellable *cancellable,
GError **error);
+ gboolean (* ostree_static_delta_delete) (OstreeRepo *repo, const char *delta_id, GCancellable
*cancellable, GError **error);
} OstreeCmdPrivateVTable;
/* Note this not really "public", we just export the symbol, but not the header */
diff --git a/src/libostree/ostree-repo-static-delta-core.c b/src/libostree/ostree-repo-static-delta-core.c
index d84f001..9e3ed09 100644
--- a/src/libostree/ostree-repo-static-delta-core.c
+++ b/src/libostree/ostree-repo-static-delta-core.c
@@ -783,6 +783,41 @@ _ostree_delta_needs_byteswap (GVariant *superblock)
}
gboolean
+_ostree_repo_static_delta_delete (OstreeRepo *self,
+ const char *delta_id,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret = FALSE;
+ g_autofree char *from = NULL;
+ g_autofree char *to = NULL;
+ g_autofree char *deltadir = NULL;
+ struct stat buf;
+
+ _ostree_parse_delta_name (delta_id, &from, &to);
+ deltadir = _ostree_get_relative_static_delta_path (from, to, NULL);
+
+ if (fstatat (self->repo_dir_fd, deltadir, &buf, 0) != 0)
+ {
+ if (errno == ENOENT)
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND,
+ "Can't find delta %s", delta_id);
+ else
+ glnx_set_error_from_errno (error);
+
+ goto out;
+ }
+
+ if (!glnx_shutil_rm_rf_at (self->repo_dir_fd, deltadir,
+ cancellable, error))
+ goto out;
+
+ ret = TRUE;
+ out:
+ return ret;
+}
+
+gboolean
_ostree_repo_static_delta_dump (OstreeRepo *self,
const char *delta_id,
GCancellable *cancellable,
diff --git a/src/libostree/ostree-repo-static-delta-private.h
b/src/libostree/ostree-repo-static-delta-private.h
index 41ddad4..eeb99c3 100644
--- a/src/libostree/ostree-repo-static-delta-private.h
+++ b/src/libostree/ostree-repo-static-delta-private.h
@@ -196,6 +196,12 @@ _ostree_repo_static_delta_dump (OstreeRepo *repo,
GCancellable *cancellable,
GError **error);
+gboolean
+_ostree_repo_static_delta_delete (OstreeRepo *repo,
+ const char *delta_id,
+ GCancellable *cancellable,
+ GError **error);
+
/* Used for static deltas which due to a historical mistake are
* inconsistent endian.
*
diff --git a/src/ostree/ot-builtin-static-delta.c b/src/ostree/ot-builtin-static-delta.c
index 36fb63f..09eb90a 100644
--- a/src/ostree/ot-builtin-static-delta.c
+++ b/src/ostree/ot-builtin-static-delta.c
@@ -42,6 +42,7 @@ static gboolean opt_disable_bsdiff;
BUILTINPROTO(list);
BUILTINPROTO(show);
+BUILTINPROTO(delete);
BUILTINPROTO(generate);
BUILTINPROTO(apply_offline);
@@ -50,6 +51,7 @@ BUILTINPROTO(apply_offline);
static OstreeCommand static_delta_subcommands[] = {
{ "list", ot_static_delta_builtin_list },
{ "show", ot_static_delta_builtin_show },
+ { "delete", ot_static_delta_builtin_delete },
{ "generate", ot_static_delta_builtin_generate },
{ "apply-offline", ot_static_delta_builtin_apply_offline },
{ NULL, NULL }
@@ -169,6 +171,39 @@ ot_static_delta_builtin_show (int argc, char **argv, GCancellable *cancellable,
}
static gboolean
+ot_static_delta_builtin_delete (int argc, char **argv, GCancellable *cancellable, GError **error)
+{
+ gboolean ret = FALSE;
+ GOptionContext *context;
+ glnx_unref_object OstreeRepo *repo = NULL;
+ const char *delta_id = NULL;
+
+ context = g_option_context_new ("DELETE - Remove a delta");
+
+ if (!ostree_option_context_parse (context, list_options, &argc, &argv, OSTREE_BUILTIN_FLAG_NONE, &repo,
cancellable, error))
+ goto out;
+
+ if (argc < 3)
+ {
+ g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+ "DELTA must be specified");
+ goto out;
+ }
+
+ delta_id = argv[2];
+
+ if (!ostree_cmd__private__ ()->ostree_static_delta_delete (repo, delta_id, cancellable, error))
+ goto out;
+
+ ret = TRUE;
+ out:
+ if (context)
+ g_option_context_free (context);
+ return ret;
+}
+
+
+static gboolean
ot_static_delta_builtin_generate (int argc, char **argv, GCancellable *cancellable, GError **error)
{
gboolean ret = FALSE;
diff --git a/tests/test-delta.sh b/tests/test-delta.sh
index 411e9b0..4b2b879 100755
--- a/tests/test-delta.sh
+++ b/tests/test-delta.sh
@@ -26,7 +26,7 @@ skip_without_user_xattrs
bindatafiles="bash true ostree"
morebindatafiles="false ls"
-echo '1..7'
+echo '1..8'
mkdir repo
${CMD_PREFIX} ostree --repo=repo init --mode=archive-z2
@@ -186,3 +186,18 @@ ${CMD_PREFIX} ostree --repo=repo2 fsck
${CMD_PREFIX} ostree --repo=repo2 ls ${newrev} >/dev/null
echo 'ok apply offline inline'
+
+${CMD_PREFIX} ostree --repo=repo static-delta list | grep ^${origrev}-${newrev}$ || exit 1
+${CMD_PREFIX} ostree --repo=repo static-delta list | grep ^${origrev}$ || exit 1
+
+${CMD_PREFIX} ostree --repo=repo static-delta delete ${origrev} || exit 1
+
+${CMD_PREFIX} ostree --repo=repo static-delta list | grep ^${origrev}-${newrev}$ || exit 1
+${CMD_PREFIX} ostree --repo=repo static-delta list | grep ^${origrev}$ && exit 1
+
+${CMD_PREFIX} ostree --repo=repo static-delta delete ${origrev}-${newrev} || exit 1
+
+${CMD_PREFIX} ostree --repo=repo static-delta list | grep ^${origrev}-${newrev}$ && exit 1
+${CMD_PREFIX} ostree --repo=repo static-delta list | grep ^${origrev}$ && exit 1
+
+echo 'ok delete'
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]