src/rpm.c
changeset 403 e63951c1d0f8
parent 373 fda83d91e600
child 424 8cbc438cc298
     1.1 --- a/src/rpm.c	Fri Jul 03 19:06:29 2009 +0100
     1.2 +++ b/src/rpm.c	Thu Nov 10 10:35:21 2011 +0000
     1.3 @@ -1,7 +1,7 @@
     1.4  /*
     1.5   * Copyright (C) 2008  Kristian Høgsberg <krh@redhat.com>
     1.6   * Copyright (C) 2008  Red Hat, Inc
     1.7 - * Copyright (C) 2009  J. Ali Harlow <ali@juiblex.co.uk>
     1.8 + * Copyright (C) 2009, 2011  J. Ali Harlow <ali@juiblex.co.uk>
     1.9   *
    1.10   * This program is free software; you can redistribute it and/or modify
    1.11   * it under the terms of the GNU General Public License as published by
    1.12 @@ -441,13 +441,16 @@
    1.13  create_set_from_command_line(int argc, const char *argv[])
    1.14  {
    1.15  	struct razor_importer *importer;
    1.16 +	struct razor_atomic *atomic;
    1.17  	struct razor_rpm *rpm;
    1.18  	int i;
    1.19  
    1.20  	importer = razor_importer_create();
    1.21  
    1.22  	for (i = 0; i < argc; i++) {
    1.23 -		rpm = razor_rpm_open(argv[i]);
    1.24 +		atomic = razor_atomic_open("Read RPM");
    1.25 +		rpm = razor_rpm_open(argv[i], atomic);
    1.26 +		razor_atomic_destroy(atomic);
    1.27  		if (rpm == NULL)
    1.28  			continue;
    1.29  		if (razor_importer_add_rpm(importer, rpm))
    1.30 @@ -462,17 +465,25 @@
    1.31  static void
    1.32  command_query(int argc, const char *argv[])
    1.33  {
    1.34 +	struct razor_atomic *atomic;
    1.35  	struct razor_set *set;
    1.36  	struct razor_package_iterator *pi;
    1.37  	struct razor_package *package;
    1.38  	const char *name, *version, *arch;
    1.39  
    1.40 +	atomic = razor_atomic_open("Query packages");
    1.41  	if (option_package) {
    1.42  		set = create_set_from_command_line(argc, argv);
    1.43  		argc = 0;
    1.44  		option_all = 1;
    1.45  	} else {
    1.46 -		set = razor_root_open_read_only(option_root);
    1.47 +		set = razor_root_open_read_only(option_root, atomic);
    1.48 +		if (!set) {
    1.49 +			fprintf(stderr, "%s\n",
    1.50 +				razor_atomic_get_error_msg(atomic));
    1.51 +			razor_atomic_destroy(atomic);
    1.52 +			return;
    1.53 +		}
    1.54  	}
    1.55  
    1.56  	pi = get_query_packages(set, argc, argv);
    1.57 @@ -509,25 +520,32 @@
    1.58  
    1.59  	razor_package_iterator_destroy(pi);
    1.60  
    1.61 -	razor_set_destroy(set);
    1.62 -
    1.63 -	return;
    1.64 +	razor_set_unref(set);
    1.65 +	razor_atomic_destroy(atomic);
    1.66  }
    1.67  
    1.68  static void
    1.69  command_verify(int argc, const char *argv[])
    1.70  {
    1.71 +	struct razor_atomic *atomic;
    1.72  	struct razor_set *set;
    1.73  	struct razor_package_iterator *pi;
    1.74  	struct razor_package *package;
    1.75  	const char *name, *version, *arch;
    1.76  
    1.77 +	atomic = razor_atomic_open("Verify packages");
    1.78  	if (option_package) {
    1.79  		set = create_set_from_command_line(argc, argv);
    1.80  		argc = 0;
    1.81  		option_all = 1;
    1.82  	} else {
    1.83 -		set = razor_root_open_read_only(option_root);
    1.84 +		set = razor_root_open_read_only(option_root, atomic);
    1.85 +		if (!set) {
    1.86 +			fprintf(stderr, "%s\n",
    1.87 +				razor_atomic_get_error_msg(atomic));
    1.88 +			razor_atomic_destroy(atomic);
    1.89 +			return;
    1.90 +		}
    1.91  	}
    1.92  
    1.93  	pi = get_query_packages(set, argc, argv);
    1.94 @@ -542,6 +560,7 @@
    1.95  	}
    1.96  
    1.97  	razor_package_iterator_destroy(pi);
    1.98 +	razor_atomic_destroy(atomic);
    1.99  }
   1.100  
   1.101  static void
   1.102 @@ -561,6 +580,7 @@
   1.103  static void
   1.104  command_erase(int argc, const char *argv[])
   1.105  {
   1.106 +	struct razor_atomic *atomic;
   1.107  	struct razor_set *set, *upstream, *next;
   1.108  	struct razor_transaction *trans;
   1.109  	struct razor_package_query *query;
   1.110 @@ -572,7 +592,15 @@
   1.111  		exit(1);
   1.112  	}
   1.113  
   1.114 -	set = razor_set_open(repo_filename);
   1.115 +	atomic = razor_atomic_open("Erase packages");
   1.116 +
   1.117 +	set = razor_set_open(repo_filename, atomic);
   1.118 +	if (!set || razor_atomic_commit(atomic)) {
   1.119 +		fprintf(stderr, "%s\n", razor_atomic_get_error_msg(atomic));
   1.120 +		razor_atomic_destroy(atomic);
   1.121 +		exit(1);
   1.122 +	}
   1.123 +	razor_atomic_destroy(atomic);
   1.124  	upstream = razor_set_create();
   1.125  
   1.126  	trans = razor_transaction_create(set, upstream);
   1.127 @@ -602,15 +630,16 @@
   1.128  		razor_set_diff(set, next, update_package, NULL);
   1.129  
   1.130  	razor_transaction_destroy(trans);
   1.131 -	razor_set_destroy(set);
   1.132 -	razor_set_destroy(upstream);
   1.133 +	razor_set_unref(set);
   1.134 +	razor_set_unref(upstream);
   1.135  
   1.136 -	razor_set_destroy(next);
   1.137 +	razor_set_unref(next);
   1.138  }
   1.139  
   1.140  static void
   1.141  command_install(int argc, const char *argv[])
   1.142  {
   1.143 +	struct razor_atomic *atomic;
   1.144  	struct razor_set *set, *upstream, *next;
   1.145  	struct razor_transaction *trans;
   1.146  	struct razor_package_iterator *pi;
   1.147 @@ -621,7 +650,14 @@
   1.148  		exit(1);
   1.149  	}
   1.150  
   1.151 -	set = razor_set_open(repo_filename);
   1.152 +	atomic = razor_atomic_open("Install packages");
   1.153 +
   1.154 +	set = razor_set_open(repo_filename, atomic);
   1.155 +	if (!set || razor_atomic_commit(atomic)) {
   1.156 +		fprintf(stderr, "%s\n", razor_atomic_get_error_msg(atomic));
   1.157 +		razor_atomic_destroy(atomic);
   1.158 +	}
   1.159 +	razor_atomic_destroy(atomic);
   1.160  	upstream = create_set_from_command_line(argc, argv);
   1.161  
   1.162  	trans = razor_transaction_create(set, upstream);
   1.163 @@ -648,15 +684,16 @@
   1.164  		razor_set_diff(set, next, update_package, NULL);
   1.165  
   1.166  	razor_transaction_destroy(trans);
   1.167 -	razor_set_destroy(set);
   1.168 -	razor_set_destroy(upstream);
   1.169 +	razor_set_unref(set);
   1.170 +	razor_set_unref(upstream);
   1.171  
   1.172 -	razor_set_destroy(next);
   1.173 +	razor_set_unref(next);
   1.174  }
   1.175  
   1.176  static void
   1.177  command_update(int argc, const char *argv[])
   1.178  {
   1.179 +	struct razor_atomic *atomic;
   1.180  	struct razor_set *set, *upstream, *next;
   1.181  	struct razor_transaction *trans;
   1.182  	struct razor_package_iterator *pi;
   1.183 @@ -667,7 +704,14 @@
   1.184  		exit(1);
   1.185  	}
   1.186  
   1.187 -	set = razor_set_open(repo_filename);
   1.188 +	atomic = razor_atomic_open("Update packages");
   1.189 +
   1.190 +	set = razor_set_open(repo_filename, atomic);
   1.191 +	if (!set || razor_atomic_commit(atomic)) {
   1.192 +		fprintf(stderr, "%s\n", razor_atomic_get_error_msg(atomic));
   1.193 +		razor_atomic_destroy(atomic);
   1.194 +	}
   1.195 +	razor_atomic_destroy(atomic);
   1.196  	upstream = create_set_from_command_line(argc, argv);
   1.197  
   1.198  	trans = razor_transaction_create(set, upstream);
   1.199 @@ -694,10 +738,10 @@
   1.200  		razor_set_diff(set, next, update_package, NULL);
   1.201  
   1.202  	razor_transaction_destroy(trans);
   1.203 -	razor_set_destroy(set);
   1.204 -	razor_set_destroy(upstream);
   1.205 +	razor_set_unref(set);
   1.206 +	razor_set_unref(upstream);
   1.207  
   1.208 -	razor_set_destroy(next);
   1.209 +	razor_set_unref(next);
   1.210  }
   1.211  
   1.212  static int