diff -r fda83d91e600 -r fbd3a02dcfde src/rpm.c --- a/src/rpm.c Fri Jul 03 19:06:29 2009 +0100 +++ b/src/rpm.c Thu Feb 09 20:15:00 2012 +0000 @@ -1,7 +1,7 @@ /* * Copyright (C) 2008 Kristian Høgsberg * Copyright (C) 2008 Red Hat, Inc - * Copyright (C) 2009 J. Ali Harlow + * Copyright (C) 2009, 2011 J. Ali Harlow * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -441,13 +441,16 @@ create_set_from_command_line(int argc, const char *argv[]) { struct razor_importer *importer; + struct razor_atomic *atomic; struct razor_rpm *rpm; int i; importer = razor_importer_create(); for (i = 0; i < argc; i++) { - rpm = razor_rpm_open(argv[i]); + atomic = razor_atomic_open("Read RPM"); + rpm = razor_rpm_open(argv[i], atomic); + razor_atomic_destroy(atomic); if (rpm == NULL) continue; if (razor_importer_add_rpm(importer, rpm)) @@ -462,17 +465,25 @@ static void command_query(int argc, const char *argv[]) { + struct razor_atomic *atomic; struct razor_set *set; struct razor_package_iterator *pi; struct razor_package *package; const char *name, *version, *arch; + atomic = razor_atomic_open("Query packages"); if (option_package) { set = create_set_from_command_line(argc, argv); argc = 0; option_all = 1; } else { - set = razor_root_open_read_only(option_root); + set = razor_root_open_read_only(option_root, atomic); + if (!set) { + fprintf(stderr, "%s\n", + razor_atomic_get_error_msg(atomic)); + razor_atomic_destroy(atomic); + return; + } } pi = get_query_packages(set, argc, argv); @@ -509,25 +520,32 @@ razor_package_iterator_destroy(pi); - razor_set_destroy(set); - - return; + razor_set_unref(set); + razor_atomic_destroy(atomic); } static void command_verify(int argc, const char *argv[]) { + struct razor_atomic *atomic; struct razor_set *set; struct razor_package_iterator *pi; struct razor_package *package; const char *name, *version, *arch; + atomic = razor_atomic_open("Verify packages"); if (option_package) { set = create_set_from_command_line(argc, argv); argc = 0; option_all = 1; } else { - set = razor_root_open_read_only(option_root); + set = razor_root_open_read_only(option_root, atomic); + if (!set) { + fprintf(stderr, "%s\n", + razor_atomic_get_error_msg(atomic)); + razor_atomic_destroy(atomic); + return; + } } pi = get_query_packages(set, argc, argv); @@ -542,6 +560,7 @@ } razor_package_iterator_destroy(pi); + razor_atomic_destroy(atomic); } static void @@ -561,6 +580,7 @@ static void command_erase(int argc, const char *argv[]) { + struct razor_atomic *atomic; struct razor_set *set, *upstream, *next; struct razor_transaction *trans; struct razor_package_query *query; @@ -572,7 +592,15 @@ exit(1); } - set = razor_set_open(repo_filename); + atomic = razor_atomic_open("Erase packages"); + + set = razor_set_open(repo_filename, atomic); + if (!set || razor_atomic_commit(atomic)) { + fprintf(stderr, "%s\n", razor_atomic_get_error_msg(atomic)); + razor_atomic_destroy(atomic); + exit(1); + } + razor_atomic_destroy(atomic); upstream = razor_set_create(); trans = razor_transaction_create(set, upstream); @@ -602,15 +630,16 @@ razor_set_diff(set, next, update_package, NULL); razor_transaction_destroy(trans); - razor_set_destroy(set); - razor_set_destroy(upstream); + razor_set_unref(set); + razor_set_unref(upstream); - razor_set_destroy(next); + razor_set_unref(next); } static void command_install(int argc, const char *argv[]) { + struct razor_atomic *atomic; struct razor_set *set, *upstream, *next; struct razor_transaction *trans; struct razor_package_iterator *pi; @@ -621,7 +650,14 @@ exit(1); } - set = razor_set_open(repo_filename); + atomic = razor_atomic_open("Install packages"); + + set = razor_set_open(repo_filename, atomic); + if (!set || razor_atomic_commit(atomic)) { + fprintf(stderr, "%s\n", razor_atomic_get_error_msg(atomic)); + razor_atomic_destroy(atomic); + } + razor_atomic_destroy(atomic); upstream = create_set_from_command_line(argc, argv); trans = razor_transaction_create(set, upstream); @@ -648,15 +684,16 @@ razor_set_diff(set, next, update_package, NULL); razor_transaction_destroy(trans); - razor_set_destroy(set); - razor_set_destroy(upstream); + razor_set_unref(set); + razor_set_unref(upstream); - razor_set_destroy(next); + razor_set_unref(next); } static void command_update(int argc, const char *argv[]) { + struct razor_atomic *atomic; struct razor_set *set, *upstream, *next; struct razor_transaction *trans; struct razor_package_iterator *pi; @@ -667,7 +704,14 @@ exit(1); } - set = razor_set_open(repo_filename); + atomic = razor_atomic_open("Update packages"); + + set = razor_set_open(repo_filename, atomic); + if (!set || razor_atomic_commit(atomic)) { + fprintf(stderr, "%s\n", razor_atomic_get_error_msg(atomic)); + razor_atomic_destroy(atomic); + } + razor_atomic_destroy(atomic); upstream = create_set_from_command_line(argc, argv); trans = razor_transaction_create(set, upstream); @@ -694,10 +738,10 @@ razor_set_diff(set, next, update_package, NULL); razor_transaction_destroy(trans); - razor_set_destroy(set); - razor_set_destroy(upstream); + razor_set_unref(set); + razor_set_unref(upstream); - razor_set_destroy(next); + razor_set_unref(next); } static int