diff -r 408c66ad463d -r 8cbc438cc298 src/main.c --- a/src/main.c Sat Feb 11 09:34:40 2012 +0000 +++ b/src/main.c Thu Feb 16 17:33:47 2012 +0000 @@ -55,9 +55,9 @@ struct razor_relocations *relocations, enum razor_stage_type stage); static int -update_system(const char *install_root, struct razor_relocations *relocations, - struct razor_transaction *trans, struct razor_set *system, - struct razor_set *next, const char *verb); +update_system(struct razor_root *root, struct razor_relocations *relocations, + struct razor_transaction *trans, struct razor_set *next, + const char *verb); static struct razor_package_iterator * create_iterator_from_argv(struct razor_set *set, int argc, const char *argv[]) @@ -120,7 +120,7 @@ command_list(int argc, const char *argv[]) { struct razor_package_iterator *pi; - struct razor_atomic *atomic; + struct razor_error *error = NULL; struct razor_set *set; uint32_t flags = 0; int i = 0; @@ -130,11 +130,10 @@ i++; } - atomic = razor_atomic_open("List installed packages"); - set = razor_root_open_read_only(install_root, atomic); + set = razor_root_open_read_only(install_root, &error); if (set == NULL) { - fprintf(stderr, "%s\n", razor_atomic_get_error_msg(atomic)); - razor_atomic_destroy(atomic); + fprintf(stderr, "%s\n", razor_error_get_msg(error)); + razor_error_free(error); return 1; } @@ -142,7 +141,6 @@ list_packages(pi, flags); razor_package_iterator_destroy(pi); razor_set_unref(set); - razor_atomic_destroy(atomic); return 0; } @@ -188,16 +186,15 @@ list_properties(int argc, const char *argv[], uint32_t type) { struct razor_set *set; - struct razor_atomic *atomic; + struct razor_error *error = NULL; struct razor_package *package; struct razor_package_iterator *pi; const char *name, *version, *arch; - atomic = razor_atomic_open("List package properties"); - set = razor_root_open_read_only(install_root, atomic); + set = razor_root_open_read_only(install_root, &error); if (set == NULL) { - fprintf(stderr, "%s\n", razor_atomic_get_error_msg(atomic)); - razor_atomic_destroy(atomic); + fprintf(stderr, "%s\n", razor_error_get_msg(error)); + razor_error_free(error); return 1; } @@ -210,7 +207,6 @@ list_package_properties(set, package, type); razor_package_iterator_destroy(pi); razor_set_unref(set); - razor_atomic_destroy(atomic); return 0; } @@ -243,16 +239,15 @@ command_list_scripts(int argc, const char *argv[]) { struct razor_set *set; - struct razor_atomic *atomic; + struct razor_error *error = NULL; struct razor_package *package; struct razor_package_iterator *pi; const char *preunprog, *preun, *postunprog, *postun; - atomic = razor_atomic_open("List package scripts"); - set = razor_root_open_read_only(install_root, atomic); + set = razor_root_open_read_only(install_root, &error); if (set == NULL) { - fprintf(stderr, "%s\n", razor_atomic_get_error_msg(atomic)); - razor_atomic_destroy(atomic); + fprintf(stderr, "%s\n", razor_error_get_msg(error)); + razor_error_free(error); return 1; } @@ -278,7 +273,6 @@ } razor_package_iterator_destroy(pi); razor_set_unref(set); - razor_atomic_destroy(atomic); return 0; } @@ -286,20 +280,18 @@ static int command_list_files(int argc, const char *argv[]) { - struct razor_atomic *atomic; + struct razor_error *error = NULL; struct razor_set *set; - atomic = razor_atomic_open("List package files"); - set = razor_root_open_read_only(install_root, atomic); + set = razor_root_open_read_only(install_root, &error); if (set == NULL) { - fprintf(stderr, "%s\n", razor_atomic_get_error_msg(atomic)); - razor_atomic_destroy(atomic); + fprintf(stderr, "%s\n", razor_error_get_msg(error)); + razor_error_free(error); return 1; } razor_set_list_files(set, argv[0]); razor_set_unref(set); - razor_atomic_destroy(atomic); return 0; } @@ -307,15 +299,14 @@ static int command_list_file_packages(int argc, const char *argv[]) { - struct razor_atomic *atomic; + struct razor_error *error = NULL; struct razor_set *set; struct razor_package_iterator *pi; - atomic = razor_atomic_open("List file packages"); - set = razor_root_open_read_only(install_root, atomic); + set = razor_root_open_read_only(install_root, &error); if (set == NULL) { - fprintf(stderr, "%s\n", razor_atomic_get_error_msg(atomic)); - razor_atomic_destroy(atomic); + fprintf(stderr, "%s\n", razor_error_get_msg(error)); + razor_error_free(error); return 1; } @@ -324,7 +315,6 @@ razor_package_iterator_destroy(pi); razor_set_unref(set); - razor_atomic_destroy(atomic); return 0; } @@ -332,17 +322,16 @@ static int command_list_package_files(int argc, const char *argv[]) { - struct razor_atomic *atomic; + struct razor_error *error = NULL; struct razor_set *set; struct razor_package_iterator *pi; struct razor_package *package; const char *name, *version, *arch; - atomic = razor_atomic_open("List package files"); - set = razor_root_open_read_only(install_root, atomic); + set = razor_root_open_read_only(install_root, &error); if (set == NULL) { - fprintf(stderr, "%s\n", razor_atomic_get_error_msg(atomic)); - razor_atomic_destroy(atomic); + fprintf(stderr, "%s\n", razor_error_get_msg(error)); + razor_error_free(error); return 1; } @@ -356,7 +345,6 @@ razor_package_iterator_destroy(pi); razor_set_unref(set); - razor_atomic_destroy(atomic); return 0; } @@ -366,7 +354,7 @@ const char *ref_version, uint32_t type) { - struct razor_atomic *atomic; + struct razor_error *error = NULL; struct razor_set *set; struct razor_property *property; struct razor_property_iterator *prop_iter; @@ -377,11 +365,10 @@ if (ref_name == NULL) return 0; - atomic = razor_atomic_open("List package properties"); - set = razor_root_open_read_only(install_root, atomic); + set = razor_root_open_read_only(install_root, &error); if (set == NULL) { - fprintf(stderr, "%s\n", razor_atomic_get_error_msg(atomic)); - razor_atomic_destroy(atomic); + fprintf(stderr, "%s\n", razor_error_get_msg(error)); + razor_error_free(error); return 1; } @@ -406,7 +393,6 @@ razor_property_iterator_destroy(prop_iter); razor_set_unref(set); - razor_atomic_destroy(atomic); return 0; } @@ -540,15 +526,14 @@ { struct razor_set *set; struct razor_root *root; + struct razor_error *error = NULL; struct razor_atomic *atomic; int retval; - atomic = razor_atomic_open("Import RPM database"); - - root = razor_root_open(install_root, atomic); + root = razor_root_open(install_root, &error); if (root == NULL) { - fprintf(stderr, "%s\n", razor_atomic_get_error_msg(atomic)); - razor_atomic_destroy(atomic); + fprintf(stderr, "%s\n", razor_error_get_msg(error)); + razor_error_free(error); return 1; } @@ -556,14 +541,17 @@ if (set == NULL) return 1; - razor_root_update(root, set); + atomic = razor_atomic_open("Import RPM database"); - retval = razor_root_commit(root); + retval = razor_root_update(root, set, atomic); + if (retval) fprintf(stderr, "%s\n", razor_atomic_get_error_msg(atomic)); razor_atomic_destroy(atomic); + razor_root_close(root); + return retval; } #endif @@ -619,20 +607,18 @@ { struct razor_set *system, *upstream, *next; struct razor_transaction *trans; - struct razor_atomic *atomic; + struct razor_error *error = NULL; + struct razor_root *root; int i, retval; - atomic = razor_atomic_open("Remove packages"); - - system = razor_root_open_read_only(install_root, atomic); - if (system == NULL) { - fprintf(stderr, "%s\n", razor_atomic_get_error_msg(atomic)); - razor_atomic_destroy(atomic); + root = razor_root_open(install_root, &error); + if (root == NULL) { + fprintf(stderr, "%s\n", razor_error_get_msg(error)); + razor_error_free(error); return 1; } - razor_atomic_destroy(atomic); - + system = razor_root_get_system_set(root); upstream = razor_set_create_without_root(); trans = razor_transaction_create(system, upstream); razor_set_unref(upstream); @@ -640,7 +626,7 @@ if (mark_packages_for_removal(trans, system, argv[i]) == 0) { fprintf(stderr, "no match for %s\n", argv[i]); razor_transaction_destroy(trans); - razor_set_unref(system); + razor_root_close(root); return 1; } } @@ -649,17 +635,16 @@ retval = razor_transaction_describe(trans); if (retval) { razor_transaction_destroy(trans); - razor_set_unref(system); + razor_root_close(root); return 1; } next = razor_transaction_commit(trans); - retval = update_system(install_root, NULL, trans, system, next, - "Remove"); + retval = update_system(root, NULL, trans, next, "Remove"); razor_transaction_destroy(trans); - razor_set_unref(system); + razor_root_close(root); razor_set_unref(next); return retval; @@ -682,15 +667,19 @@ static int command_diff(int argc, const char *argv[]) { - struct razor_atomic *atomic; + struct razor_error *error = NULL; struct razor_set *set, *updated; - atomic = razor_atomic_open("Show package differences"); - set = razor_root_open_read_only(install_root, atomic); - updated = razor_set_open(rawhide_repo_filename, atomic); - if (set == NULL || updated == NULL) { - fprintf(stderr, "%s\n", razor_atomic_get_error_msg(atomic)); - razor_atomic_destroy(atomic); + set = razor_root_open_read_only(install_root, &error); + if (set) + updated = razor_set_open(rawhide_repo_filename, 0, &error); + else + updated = NULL; + if (updated == NULL) { + fprintf(stderr, "%s\n", razor_error_get_msg(error)); + razor_error_free(error); + if (set) + razor_set_unref(set); return 1; } @@ -698,7 +687,6 @@ razor_set_unref(set); razor_set_unref(updated); - razor_atomic_destroy(atomic); return 0; } @@ -997,12 +985,11 @@ } static int -update_system(const char *install_root, struct razor_relocations *relocations, - struct razor_transaction *trans, struct razor_set *system, - struct razor_set *next, const char *verb) +update_system(struct razor_root *root, struct razor_relocations *relocations, + struct razor_transaction *trans, struct razor_set *next, + const char *verb) { - struct razor_root *root; - struct razor_set *set; + struct razor_set *system, *set; struct razor_atomic *atomic; struct razor_install_iterator *ii; int r, retval = 0; @@ -1011,6 +998,8 @@ description = razor_concat(verb, " packages", NULL); + system = razor_set_ref(razor_root_get_system_set(root)); + ii = razor_set_create_install_iterator(system, next); do { @@ -1018,20 +1007,10 @@ atomic = razor_atomic_open(description); - root = razor_root_open(install_root, atomic); - if (root == NULL) { - fprintf(stderr, "%s\n", - razor_atomic_get_error_msg(atomic)); - razor_atomic_destroy(atomic); - retval = 1; - break; - } - r = update_packages(trans, ii, system, next, atomic, relocations, RAZOR_STAGE_SCRIPTS_PRE); if (r < 0) { fprintf(stderr, "%s aborted\n", verb); - razor_root_close(root); retval = r; } else { razor_install_iterator_seek(ii, pos); @@ -1040,12 +1019,11 @@ if (r == 1) { set = razor_install_iterator_commit_set(ii); - razor_root_update(root, set); + razor_root_update(root, set, atomic); razor_set_unref(set); } else if (r == 0) - razor_root_update(root, next); + razor_root_update(root, next, atomic); - (void)razor_root_commit(root); retval = razor_atomic_commit(atomic); if (retval) fprintf(stderr, "%s\n", @@ -1061,6 +1039,8 @@ razor_atomic_destroy(atomic); } while(!retval && r == 1); + razor_set_unref(system); + free(description); return retval; @@ -1069,10 +1049,12 @@ static int command_install_or_update(int argc, const char *argv[], int do_update) { - struct razor_relocations *relocations=NULL; + struct razor_relocations *relocations = NULL; struct razor_set *system, *upstream, *next, *set; struct razor_transaction *trans; + struct razor_error *error = NULL; struct razor_atomic *atomic; + struct razor_root *root; int i, retval, len, dependencies = 1; char *oldpath; @@ -1104,18 +1086,18 @@ break; } + upstream = razor_set_open(rawhide_repo_filename, 0, &error); + if (upstream == NULL) { + fprintf(stderr, "%s\n", razor_error_get_msg(error)); + razor_error_free(error); + return 1; + } + if (do_update) atomic = razor_atomic_open("Update packages"); else atomic = razor_atomic_open("Install packages"); - upstream = razor_set_open(rawhide_repo_filename, atomic); - if (upstream == NULL) { - fprintf(stderr, "%s\n", razor_atomic_get_error_msg(atomic)); - razor_atomic_destroy(atomic); - return 1; - } - if (relocations) { set = relocate_packages(upstream, atomic, relocations); if (set == NULL) { @@ -1129,8 +1111,18 @@ upstream = set; } - system = razor_root_open_read_only(install_root, atomic); + root = razor_root_open(install_root, &error); + if (root == NULL) { + fprintf(stderr, "%s\n", razor_error_get_msg(error)); + razor_error_free(error); + razor_atomic_destroy(atomic); + razor_set_unref(upstream); + if (relocations) + razor_relocations_destroy(relocations); + return 1; + } + system = razor_root_get_system_set(root); trans = razor_transaction_create(system, upstream); if (i == argc && do_update) @@ -1142,9 +1134,11 @@ if (mark_packages_for_update(trans, upstream, argv[i]) == 0) { fprintf(stderr, "no package matched %s\n", argv[i]); razor_transaction_destroy(trans); + razor_root_close(root); razor_set_unref(upstream); - razor_set_unref(system); razor_atomic_destroy(atomic); + if (relocations) + razor_relocations_destroy(relocations); return 1; } } @@ -1154,8 +1148,10 @@ if (razor_transaction_describe(trans) > 0) { razor_transaction_destroy(trans); razor_set_unref(upstream); - razor_set_unref(system); + razor_root_close(root); razor_atomic_destroy(atomic); + if (relocations) + razor_relocations_destroy(relocations); return 1; } } @@ -1166,8 +1162,10 @@ fprintf(stderr, "%s\n", razor_atomic_get_error_msg(atomic)); razor_transaction_destroy(trans); razor_set_unref(upstream); - razor_set_unref(system); + razor_root_close(root); razor_atomic_destroy(atomic); + if (relocations) + razor_relocations_destroy(relocations); return 1; } @@ -1179,22 +1177,24 @@ razor_set_unref(next); razor_transaction_destroy(trans); razor_set_unref(upstream); - razor_set_unref(system); + razor_root_close(root); razor_atomic_destroy(atomic); + if (relocations) + razor_relocations_destroy(relocations); return 1; } - retval = update_system(install_root, relocations, trans, system, next, + retval = update_system(root, relocations, trans, next, do_update ? "Update" : "Install"); razor_set_unref(upstream); + razor_root_close(root); razor_transaction_destroy(trans); if (relocations) razor_relocations_destroy(relocations); razor_set_unref(next); - razor_set_unref(system); return retval; } @@ -1220,6 +1220,7 @@ static int command_download(int argc, const char *argv[]) { + struct razor_error *error = NULL; struct razor_atomic *atomic; struct razor_set *set; struct razor_package_iterator *pi; @@ -1228,6 +1229,13 @@ char url[256], file[256]; int matches = 0; + set = razor_set_open(rawhide_repo_filename, 0, &error); + if (set == NULL) { + fprintf(stderr, "%s\n", razor_error_get_msg(error)); + razor_error_free(error); + return 1; + } + atomic = razor_atomic_open("Download packages"); if (razor_atomic_create_dir(atomic, "rpms", @@ -1237,8 +1245,6 @@ return 1; } - set = razor_set_open(rawhide_repo_filename, atomic); - if (razor_atomic_commit(atomic)) { fprintf(stderr, "%s\n", razor_atomic_get_error_msg(atomic)); razor_atomic_destroy(atomic); @@ -1279,18 +1285,17 @@ static int command_info(int argc, const char *argv[]) { - struct razor_atomic *atomic; + struct razor_error *error = NULL; struct razor_set *set; struct razor_package_iterator *pi; struct razor_package *package; const char *pattern = argv[0], *name, *version, *arch; const char *summary, *description, *url, *license; - atomic = razor_atomic_open("Package info"); - set = razor_root_open_read_only(install_root, atomic); + set = razor_root_open_read_only(install_root, &error); if (set == NULL) { - fprintf(stderr, "%s\n", razor_atomic_get_error_msg(atomic)); - razor_atomic_destroy(atomic); + fprintf(stderr, "%s\n", razor_error_get_msg(error)); + razor_error_free(error); return 1; } @@ -1322,7 +1327,6 @@ } razor_package_iterator_destroy(pi); razor_set_unref(set); - razor_atomic_destroy(atomic); return 0; } @@ -1332,7 +1336,7 @@ static int command_search(int argc, const char *argv[]) { - struct razor_atomic *atomic; + struct razor_error *error = NULL; struct razor_set *set; struct razor_package_iterator *pi; struct razor_package *package; @@ -1347,14 +1351,12 @@ snprintf(pattern, sizeof pattern, "*%s*", argv[0]); - atomic = razor_atomic_open("Search packages"); - set = razor_set_open(rawhide_repo_filename, atomic); - if (set == NULL || razor_atomic_commit(atomic)) { - fprintf(stderr, "%s\n", razor_atomic_get_error_msg(atomic)); - razor_atomic_destroy(atomic); + set = razor_set_open(rawhide_repo_filename, 0, &error); + if (set == NULL) { + fprintf(stderr, "%s\n", razor_error_get_msg(error)); + razor_error_free(error); return 1; } - razor_atomic_destroy(atomic); pi = razor_package_iterator_create(set); while (razor_package_iterator_next(pi, &package,