Merge pull request #72 from mbarnes/fix-db-version

This commit is contained in:
Matthew Barnes 2014-12-11 09:38:41 -05:00
commit 2c833a1a72
2 changed files with 37 additions and 8 deletions

View File

@ -71,6 +71,8 @@ _builtin_db_version (OstreeRepo *repo, GFile *rpmdbdir, GPtrArray *revs,
rpmdbv = rpmhdrs_rpmdbv (rpmrev->root, rpmrev->rpmdb,
cancellable, error);
if (rpmdbv == NULL)
goto out;
// FIXME: g_console?
if (!g_str_equal (rev, rpmrev->commit))

View File

@ -471,6 +471,7 @@ rpmhdrs_rpmdbv (GFile *root, struct RpmHeaders *l1,
{
GChecksum *checksum = g_checksum_new (G_CHECKSUM_SHA1);
gs_free char *checksum_cstr = NULL;
char *ret = NULL;
int num = 0;
while (num < l1->hs->len)
@ -483,23 +484,46 @@ rpmhdrs_rpmdbv (GFile *root, struct RpmHeaders *l1,
gs_free char *envra = pkg_envra_strdup (pkg);
gsize tbytes_read = 0;
gsize dbytes_read = 0;
GError *local_error = NULL;
g_checksum_update (checksum, (guint8*)envra, strlen(envra));
tin = pkg_yumdb_file_read (root, pkg, "checksum_type", cancellable,error);
if (!tin)
continue;
tin = pkg_yumdb_file_read (root, pkg, "checksum_type", cancellable, &local_error);
/* Tolerate missing database files. */
if (g_error_matches (local_error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
{
g_clear_error (&local_error);
continue;
}
if (local_error != NULL)
{
g_propagate_error (error, local_error);
goto out;
}
din = pkg_yumdb_file_read (root, pkg, "checksum_data", cancellable,error);
if (!din)
continue;
/* Tolerate missing database files. */
if (g_error_matches (local_error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
{
g_clear_error (&local_error);
continue;
}
if (local_error != NULL)
{
g_propagate_error (error, local_error);
goto out;
}
if (!g_input_stream_read_all (tin, tbuf, sizeof(tbuf), &tbytes_read,
cancellable, error))
continue;
goto out;
if (!g_input_stream_read_all (din, dbuf, sizeof(dbuf), &dbytes_read,
cancellable, error))
continue;
goto out;
if (tbytes_read >= 512)
continue; // should be == len(md5) or len(sha256) etc.
@ -512,9 +536,12 @@ rpmhdrs_rpmdbv (GFile *root, struct RpmHeaders *l1,
checksum_cstr = g_strdup (g_checksum_get_string (checksum));
ret = g_strdup_printf ("%u:%s", num, checksum_cstr);
out:
g_checksum_free (checksum);
return g_strdup_printf ("%u:%s", num, checksum_cstr);
return ret;
}
/* glib? */