an new polished anna.c patch
Index: anna.c =================================================================== --- anna.c (révision 36041) +++ anna.c (copie de travail) @@ -65,20 +65,24 @@ } static int choose_modules(di_packages *status, di_packages **packages) { - char *choose_modules_question; + char *choose_modules_question = "anna/choose_modules" ; + char *question_priority = "medium"; char *choices; int package_count = 0; - di_package *package, *status_package, **package_array, *test_package; - di_slist_node *node, *node1, *node2; - int reverse_depend=0; - int lowmem=get_lowmem_level(); + di_package *package, *status_package, **package_array; + di_slist_node *node, *node1; bool standard_modules = true; - - if (lowmem < 2) { - choose_modules_question="anna/choose_modules"; - } - else { + bool lowmem_mode = false; + + /* Test lowmem level to know if packages with want_install status + will be shown */ + if ( get_lowmem_level() >= 2) { + lowmem_mode = true; choose_modules_question="anna/choose_modules_lowmem"; + /* force priority to show question even in a non expert mode */ + question_priority = "high"; + di_log (DI_LOG_LEVEL_DEBUG, + "lowmem_mode, want_install status packages will be shown"); } for (node = status->list.head; node; node = node->next) { @@ -134,28 +138,6 @@ } } - if (lowmem > 1) { - if (package->priority == di_package_priority_standard - && ! ((di_system_package *)package)->installer_menu_item) { - /* get only packages which are not dependencies of other packages */ - reverse_depend=0; - for (node1 = (*packages)->list.head; node1; node1 = node1->next) { - test_package = node1->data; - for (node2 = test_package->depends.head; node2; node2 = node2->next) { - di_package_dependency *d = node2->data; - if (d->ptr == package) { - reverse_depend=1; - } - } - } - if (reverse_depend == 0 && ! - ((di_system_package *)package)->kernel_version) { - package->status_want = di_package_status_want_unknown; - } - package->priority = di_package_priority_optional; - } - } - if (package->priority >= di_package_priority_standard) { if (standard_modules || ((di_system_package *)package)->kernel_version) { package->status_want = di_package_status_want_install; @@ -184,6 +166,19 @@ /* Drop packages in udeb_exclude */ drop_excludes(*packages); + /* in lowmem mode, we add all packages in the instlist by setting + status to want_unknown except those which are menu item and + their dependencies (calculated by the next function) */ + if (lowmem_mode) { + for (node = (*packages)->list.head; node; node = node->next) { + package = node->data; + if ( package->status_want == di_package_status_want_install && + ((di_system_package *)package)->installer_menu_item == 0) { + package->status_want = di_package_status_want_unknown; + } + } + } + di_system_packages_resolve_dependencies_mark_anna(*packages, subarchitecture, running_kernel); /* Slight over-allocation, but who cares */ @@ -199,12 +194,9 @@ qsort(package_array, package_count, sizeof(di_package *), package_name_compare); choices = list_to_choices(package_array); debconf_subst(debconf, choose_modules_question, "CHOICES", choices); - if (lowmem < 2) { - debconf_input(debconf, "medium", choose_modules_question); - } - else { - debconf_input(debconf, "high", choose_modules_question); - } + + debconf_input(debconf, question_priority, choose_modules_question); + di_free(choices); di_free(package_array);