Fix bug causing razor_transaction_resolve() to spin 0.5.5
authorJ. Ali Harlow <ali@juiblex.co.uk>
Fri, 23 Mar 2012 20:24:09 +0000 (20:24 +0000)
committerJ. Ali Harlow <ali@juiblex.co.uk>
Fri, 23 Mar 2012 20:24:09 +0000 (20:24 +0000)
librazor/transaction.c

index 13d6a9a..ad73d1b 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Copyright (C) 2008  Kristian Høgsberg <krh@redhat.com>
  * Copyright (C) 2008  Red Hat, Inc
- * Copyright (C) 2009, 2011  J. Ali Harlow <ali@juiblex.co.uk>
+ * Copyright (C) 2009, 2011, 2012  J. Ali Harlow <ali@juiblex.co.uk>
  *
  * 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
@@ -31,7 +31,6 @@
 #include <fcntl.h>
 #include <errno.h>
 #include <ctype.h>
-#include <fnmatch.h>
 #include <assert.h>
 
 #include "razor-internal.h"
@@ -134,10 +133,10 @@ transaction_set_install_package(struct transaction_set *ts,
 
        pkgs = ts->set->packages.data;
        i = package - pkgs;
-       if (ts->packages[i] == TRANS_PACKAGE_PRESENT)
+       if (ts->packages[i] & TRANS_PACKAGE_PRESENT)
                return;
 
-       ts->packages[i] = TRANS_PACKAGE_PRESENT;
+       ts->packages[i] |= TRANS_PACKAGE_PRESENT;
 
        prop = list_first(&package->properties, &ts->set->property_pool);
        while (prop) {
@@ -156,10 +155,10 @@ transaction_set_remove_package(struct transaction_set *ts,
 
        pkgs = ts->set->packages.data;
        i = package - pkgs;
-       if (ts->packages[i] == 0)
+       if (!(ts->packages[i] & TRANS_PACKAGE_PRESENT))
                return;
 
-       ts->packages[i] = 0;
+       ts->packages[i] &= ~TRANS_PACKAGE_PRESENT;
 
        prop = list_first(&package->properties, &ts->set->property_pool);
        while (prop) {
@@ -547,6 +546,9 @@ update_unsatisfied_packages(struct razor_transaction *trans)
                while (razor_package_iterator_next(&pkg_iter, &pkg,
                                                   RAZOR_DETAIL_NAME, &name,
                                                   RAZOR_DETAIL_LAST)) {
+                       if (!(trans->system.packages[pkg - spkgs] & TRANS_PACKAGE_PRESENT))
+                               continue;
+
 #if 0
                        fprintf(stderr, "updating %s because %s %s %s "
                                "isn't satisfied\n",
@@ -699,6 +701,7 @@ flush_scheduled_system_updates(struct razor_transaction *trans)
                                           RAZOR_DETAIL_LAST)) {
                if (!(trans->system.packages[p - spkgs] & TRANS_PACKAGE_UPDATE))
                        continue;
+               trans->system.packages[p - spkgs] &= ~TRANS_PACKAGE_UPDATE;
 
                if (!prop_iter_seek_to(&ppi, RAZOR_PROPERTY_PROVIDES, name))
                        continue;
@@ -740,6 +743,7 @@ flush_scheduled_upstream_updates(struct razor_transaction *trans)
                                           RAZOR_DETAIL_LAST)) {
                if (!(trans->upstream.packages[p - upkgs] & TRANS_PACKAGE_UPDATE))
                        continue;
+               trans->upstream.packages[p - upkgs] &= ~TRANS_PACKAGE_UPDATE;
 
                if (prop_iter_seek_to(&spi, RAZOR_PROPERTY_PROVIDES, name))
                        remove_matching_providers(trans,