Package: anna
Severity: wishlist
Tags: patch

This patch actually doesn't do very much, and it doesn't mess with the behavior
of anna on existing invocations at all.

During the development of customization-modules, I found that anna did have some
hardwired behavior which seemed inappropriate for the context.  This therefore
adds a third way of invoking anna, which has a much simpler udeb-selection 
procedure
than the ordinary methods.  It asks about all of them, except for:
* those already installed, which are skipped
* udebs with mismatching subarch or kernel, which are skipped
* certain kernel packages involving "Provides" which are queued by anna-install
  (which should never happen unless a customization udeb does it)
* possibly certain situtations involving "Enhances"; I didn't mess with that 
part of
  the code because I think it doesn't work correctly at the moment anyway

I believe this is of sufficient size that my copyright notice *is* necessary.

Index: anna.c
===================================================================
--- anna.c      (revision 43677)
+++ anna.c      (working copy)
@@ -64,7 +64,8 @@
        return 1;
 }
 
-static int choose_modules(di_packages *status, di_packages **packages) {
+static int choose_modules(bool customizing, 
+                          di_packages *status, di_packages **packages) {
        char *choose_modules_question = "anna/choose_modules" ;
        char *question_priority = "medium";
        char *choices;
@@ -74,9 +75,17 @@
        bool standard_modules = true;
        bool lowmem_mode = false;
 
-       /* Test lowmem level to know if packages with want_install status
-          will be shown */
-       if ( get_lowmem_level() >= 2) {
+       if (customizing) {
+               /* Always ask about all modules (except those for the wrong 
kernel
+                  version or wrong subarch) when customizing -- and we may need
+                  to ask repeatedly */
+               choose_modules_question = "anna/choose_modules_custom";
+               question_priority = "high";
+               debconf_fset(debconf, "anna/choose_modules_custom", "seen", 
"false");
+       }
+       else if ( get_lowmem_level() >= 2) {
+               /* Test lowmem level to know if packages with want_install 
status
+                  will be shown */
                lowmem_mode = true;
                choose_modules_question="anna/choose_modules_lowmem";
                /* force priority to show question even in a non expert mode */
@@ -138,7 +147,11 @@
                        }
                }
 
-               if (package->priority >= di_package_priority_standard) {
+               if (customizing) {
+                       package->status_want = di_package_status_want_unknown;
+                       di_log (DI_LOG_LEVEL_DEBUG, "ask for %s, is 
customization module", package->package);
+               }
+               else if (package->priority >= di_package_priority_standard) {
                        if (standard_modules || ((di_system_package 
*)package)->kernel_version) {
                                package->status_want = 
di_package_status_want_install;
                                di_log (DI_LOG_LEVEL_DEBUG, "install %s, 
priority >= standard", package->package);
@@ -358,6 +371,7 @@
        di_packages_allocator *status_allocator;
        struct utsname uts;
        const char *quiet_env;
+       bool customizing = false;
 
        debconf = debconfclient_new();
        debconf_capb(debconf, "backup");
@@ -471,15 +485,23 @@
                else if (strcmp(argv[2], "default") == 0) {
                        set_retriever(argv[1], 1);
                }
+               else if (strcmp(argv[2], "custom") == 0) {
+                       set_retriever(argv[1], 0);
+                       customizing = true;
+               }
                retriever_config();
 
                packages = get_packages();
-               if (! packages || ! packages_ok(packages)) {
+               if (! packages ) {
                        retriever_cleanup();
                        return 10;
                }
+               if (! customizing && ! packages_ok(packages)) {
+                       retriever_cleanup();
+                       return 10;
+               }
 
-               if (choose_modules(status, &packages) != 0) {
+               if (choose_modules(customizing, status, &packages) != 0) {
                        ret = 10;
                }
                else  {
Index: README
===================================================================
--- README      (revision 43677)
+++ README      (working copy)
@@ -12,6 +12,11 @@
        Same as above, except that the retriever is stored as the default
        retriever to use.
 
+anna <retriever> custom
+
+       Same as top, except with somewhat different messages and defaults
+       based on the assumption that these are custom third-party udebs.
+
 anna install <udeb ..>
 
        Uses the default retriever to get the specified udebs and installs
Index: debian/anna.templates
===================================================================
--- debian/anna.templates       (revision 43677)
+++ debian/anna.templates       (working copy)
@@ -23,6 +23,16 @@
  Note that if you select a component that requires others, those
  components will also be loaded.
 
+Template: anna/choose_modules_custom
+Type: multiselect
+Choices: ${CHOICES}
+_Description: Custom installer components to load:
+ The custom installer components from your selected source are
+ listed here.
+ .
+ Note that if you select a component that requires others, those
+ components will also be loaded.
+
 Template: anna/progress_title
 Type: text
 # (Progress bar) title displayed when loading udebs
Index: debian/copyright
===================================================================
--- debian/copyright    (revision 43677)
+++ debian/copyright    (working copy)
@@ -2,3 +2,7 @@
 
 anna is Copyright (C) 2000 by Joey Hess, under the terms of the GPL.
 Apologetically dedicated to my sister, Anna.
+
+Portions copyright 2006 Nathanael Nerode.  These portions are licensed
+under the GNU General Public License, version 2 or later, as published 
+by the Free Software Foundation.


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to