[ostree] core: Actually return an error from fsck
- From: Colin Walters <walters src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [ostree] core: Actually return an error from fsck
- Date: Wed, 9 Nov 2011 13:28:26 +0000 (UTC)
commit 1d23e4b8e88ced8c83590d6faee1fc33b03b6bcf
Author: Colin Walters <walters verbum org>
Date: Wed Nov 9 08:27:47 2011 -0500
core: Actually return an error from fsck
And add some tests that fsck reports an error.
ostree/ot-builtin-fsck.c | 18 +++++++++++++-----
tests/{t0005-pull.sh => t0005-corruption.sh} | 18 ++++++++++--------
tests/{t0005-pull.sh => t0010-pull.sh} | 0
3 files changed, 23 insertions(+), 13 deletions(-)
---
diff --git a/ostree/ot-builtin-fsck.c b/ostree/ot-builtin-fsck.c
index 7c87402..e0da0dc 100644
--- a/ostree/ot-builtin-fsck.c
+++ b/ostree/ot-builtin-fsck.c
@@ -35,10 +35,11 @@ static GOptionEntry options[] = {
typedef struct {
guint n_objects;
-} HtFsckData;
+ gboolean had_error;
+} OtFsckData;
static gboolean
-checksum_packed_file (HtFsckData *data,
+checksum_packed_file (OtFsckData *data,
const char *path,
GChecksum **out_checksum,
GError **error)
@@ -111,7 +112,6 @@ checksum_packed_file (HtFsckData *data,
g_variant_unref (xattrs);
return ret;
}
-
static void
object_iter_callback (OstreeRepo *repo,
@@ -119,7 +119,7 @@ object_iter_callback (OstreeRepo *repo,
GFileInfo *file_info,
gpointer user_data)
{
- HtFsckData *data = user_data;
+ OtFsckData *data = user_data;
struct stat stbuf;
GChecksum *checksum = NULL;
GError *error = NULL;
@@ -169,6 +169,7 @@ object_iter_callback (OstreeRepo *repo,
if (strcmp (checksum_string, g_checksum_get_string (checksum)) != 0)
{
+ data->had_error = TRUE;
g_printerr ("ERROR: corrupted object '%s' expected checksum: %s\n",
path, g_checksum_get_string (checksum));
}
@@ -193,7 +194,7 @@ gboolean
ostree_builtin_fsck (int argc, char **argv, const char *repo_path, GError **error)
{
GOptionContext *context;
- HtFsckData data;
+ OtFsckData data;
gboolean ret = FALSE;
OstreeRepo *repo = NULL;
@@ -204,6 +205,7 @@ ostree_builtin_fsck (int argc, char **argv, const char *repo_path, GError **erro
goto out;
data.n_objects = 0;
+ data.had_error = FALSE;
repo = ostree_repo_new (repo_path);
if (!ostree_repo_check (repo, error))
@@ -212,6 +214,12 @@ ostree_builtin_fsck (int argc, char **argv, const char *repo_path, GError **erro
if (!ostree_repo_iter_objects (repo, object_iter_callback, &data, error))
goto out;
+ if (data.had_error)
+ {
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+ "Encountered filesystem consistency errors");
+ goto out;
+ }
if (!quiet)
g_printerr ("Total Objects: %u\n", data.n_objects);
diff --git a/tests/t0005-pull.sh b/tests/t0005-corruption.sh
similarity index 76%
copy from tests/t0005-pull.sh
copy to tests/t0005-corruption.sh
index 9d33b7e..afd5086 100755
--- a/tests/t0005-pull.sh
+++ b/tests/t0005-corruption.sh
@@ -20,14 +20,16 @@
set -e
+echo "1..1"
+
. libtest.sh
-echo '1..1'
+setup_test_repository "regular"
+$OSTREE checkout test2 checkout-test2
+cd checkout-test2
+chmod o+x firstfile
+$OSTREE fsck -q 2>/dev/null && (echo 1>&2 "fsck unexpectedly succeeded"; exit 1)
+chmod o-x firstfile
+$OSTREE fsck -q
-setup_fake_remote_repo1
-cd ${test_tmpdir}
-mkdir repo
-$OSTREE init
-$OSTREE remote add origin $(cat httpd-address)/ostree/gnomerepo
-$OSTREE pull origin main
-echo "ok pull"
+echo "ok chmod"
diff --git a/tests/t0005-pull.sh b/tests/t0010-pull.sh
similarity index 100%
rename from tests/t0005-pull.sh
rename to tests/t0010-pull.sh
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]