Index: anna.c
===================================================================
--- anna.c	(révision 64397)
+++ anna.c	(copie de travail)
@@ -8,9 +8,11 @@
 static const char *subarchitecture;
 static int quiet = 0, verbose = 0;
 
-di_packages *get_packages (void) {
+di_packages *get_packages (di_packages *status) {
 	di_packages_allocator *packages_allocator = di_system_packages_allocator_alloc();
 	di_packages *packages = retriever_packages(packages_allocator);
+	di_slist_node *node;
+	di_package *package;
 
 	while (packages == NULL) {
 		int r=retriever_error("packages");
@@ -26,6 +28,21 @@
 		}
 	}
 
+	/* Now merge status into packages as some packages might be in the 
+	   initrd but not in the Packages file (for example CD-ROM image).
+	   The resolver needs to know about all packages. */
+	for (node = status->list.head; node; node = node->next) {
+		package = node->data;
+		
+		if (package->status != di_package_status_unpacked && 
+		    package->status != di_package_status_installed)
+			continue;
+
+		if (di_packages_get_package(packages, package->package, 0))
+			continue;
+		
+		di_packages_append_package(packages, package, packages_allocator);
+	}
 	return packages;
 }
 
@@ -451,7 +468,7 @@
 		}
 		retriever_config();
 
-		packages = get_packages();
+		packages = get_packages(status);
 		if (! packages) {
 			retriever_cleanup();
 			return 10;
@@ -532,7 +549,7 @@
 		}
 		retriever_config();
 
-		packages = get_packages();
+		packages = get_packages(status);
 		if (! packages || ! packages_ok(packages)) {
 			retriever_cleanup();
 			return 10;

