mirror of
https://github.com/ostreedev/ostree.git
synced 2025-02-03 17:47:40 +03:00
fsck: Check for refs missing corresponding commit
Just doing this one quickly since it was easy. Closes: https://github.com/ostreedev/ostree/issues/831 Closes: #841 Approved by: jlebon
This commit is contained in:
parent
052ba81c03
commit
86963334bd
@ -246,6 +246,7 @@ ostree_builtin_fsck (int argc, char **argv, GCancellable *cancellable, GError **
|
||||
gpointer key, value;
|
||||
gboolean found_corruption = FALSE;
|
||||
guint n_partial = 0;
|
||||
g_autoptr(GHashTable) all_refs = NULL;
|
||||
g_autoptr(GHashTable) objects = NULL;
|
||||
g_autoptr(GHashTable) commits = NULL;
|
||||
g_autoptr(GPtrArray) tombstones = NULL;
|
||||
@ -254,6 +255,27 @@ ostree_builtin_fsck (int argc, char **argv, GCancellable *cancellable, GError **
|
||||
if (!ostree_option_context_parse (context, options, &argc, &argv, OSTREE_BUILTIN_FLAG_NONE, &repo, cancellable, error))
|
||||
goto out;
|
||||
|
||||
if (!opt_quiet)
|
||||
g_print ("Validating refs...\n");
|
||||
|
||||
/* Validate that the commit for each ref is available */
|
||||
if (!ostree_repo_list_refs (repo, NULL, &all_refs,
|
||||
cancellable, error))
|
||||
return FALSE;
|
||||
g_hash_table_iter_init (&hash_iter, all_refs);
|
||||
while (g_hash_table_iter_next (&hash_iter, &key, &value))
|
||||
{
|
||||
const char *refname = key;
|
||||
const char *checksum = value;
|
||||
g_autoptr(GVariant) commit = NULL;
|
||||
if (!ostree_repo_load_variant (repo, OSTREE_OBJECT_TYPE_COMMIT,
|
||||
checksum, &commit, error))
|
||||
{
|
||||
g_prefix_error (error, "Loading commit for ref %s: ", refname);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
if (!opt_quiet)
|
||||
g_print ("Enumerating objects...\n");
|
||||
|
||||
|
@ -19,10 +19,12 @@
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
echo "1..2"
|
||||
echo "1..3"
|
||||
|
||||
. $(dirname $0)/libtest.sh
|
||||
|
||||
cd ${test_tmpdir}
|
||||
rm repo files -rf
|
||||
setup_test_repository "bare"
|
||||
$OSTREE checkout test2 checkout-test2
|
||||
cd checkout-test2
|
||||
@ -34,6 +36,8 @@ $OSTREE fsck -q
|
||||
echo "ok chmod"
|
||||
|
||||
cd ${test_tmpdir}
|
||||
rm repo files -rf
|
||||
setup_test_repository "bare"
|
||||
rm checkout-test2 -rf
|
||||
$OSTREE checkout test2 checkout-test2
|
||||
cd checkout-test2
|
||||
@ -41,3 +45,14 @@ chmod o+x firstfile
|
||||
$OSTREE fsck -q --delete && (echo 1>&2 "fsck unexpectedly succeeded"; exit 1)
|
||||
|
||||
echo "ok chmod"
|
||||
|
||||
cd ${test_tmpdir}
|
||||
rm repo files -rf
|
||||
setup_test_repository "bare"
|
||||
find repo/ -name '*.commit' -delete
|
||||
if $OSTREE fsck -q 2>err.txt; then
|
||||
assert_not_reached "fsck unexpectedly succeeded"
|
||||
fi
|
||||
assert_file_has_content_literal err.txt "Loading commit for ref test2: No such metadata object"
|
||||
|
||||
echo "ok missing commit"
|
||||
|
Loading…
x
Reference in New Issue
Block a user