Author: brucec
Date: Wed Jun 23 14:19:19 2010
New Revision: 209468
URL: http://svn.freebsd.org/changeset/base/209468

Log:
  Make it easier to cancel a failing installation by only attempting to
  extract distributions once. If a distribution fails to fetch/extract
  and the user doesn't want to retry, abort the installation.
  
  Reviewed by: randi
  Approved by: rrs (mentor)
  MFC after: 1 month

Modified:
  head/usr.sbin/sysinstall/dist.c
  head/usr.sbin/sysinstall/install.c

Modified: head/usr.sbin/sysinstall/dist.c
==============================================================================
--- head/usr.sbin/sysinstall/dist.c     Wed Jun 23 14:11:34 2010        
(r209467)
+++ head/usr.sbin/sysinstall/dist.c     Wed Jun 23 14:19:19 2010        
(r209468)
@@ -605,7 +605,7 @@ getinfo:
            if (fp == NULL)
                msgConfirm("Failed to find %s on this media.  Reinitializing 
media.", fname);
            else
-               msgConfirm("Failed to retreive piece file %s.\n"
+               msgConfirm("Failed to retrieve piece file %s.\n"
                           "%s: Reinitializing media.",
                           fname, !intr ? "I/O error" : "User interrupt");
            DEVICE_SHUTDOWN(mediaDevice);
@@ -701,6 +701,7 @@ distExtract(char *parent, Distribution *
     char *path, *dist;
     WINDOW *w = savescr();
     struct sigaction old, new;
+    int canceled = 0;
 
     status = TRUE;
     if (isDebug())
@@ -715,7 +716,7 @@ distExtract(char *parent, Distribution *
     sigaction(SIGINT, &new, &old);
 
     /* Loop through to see if we're in our parent's plans */
-    for (i = 0; me[i].my_name; i++) {
+    for (i = 0; me[i].my_name && canceled == 0; i++) {
        dist = me[i].my_name;
        path = parent ? parent : dist;
 
@@ -750,8 +751,11 @@ distExtract(char *parent, Distribution *
                    status = msgYesNo("Unable to transfer the %s distribution 
from\n%s.\n\n"
                                      "Do you want to try to retrieve it 
again?",
                                      me[i].my_name, mediaDevice->name);
-                   if (!status)
+                   if (status == 0)
                        --i;
+                   else
+                       canceled = 1;   
+
                    status = FALSE;
                }
            }
@@ -765,6 +769,7 @@ distExtract(char *parent, Distribution *
        if (status)
            *(me[i].my_mask) &= ~(me[i].my_bit);
     }
+
     sigaction(SIGINT, &old, NULL);     /* Restore signal handler */
     restorescr(w);
     return status;
@@ -857,8 +862,9 @@ printSelected(char *buf, int selected, D
 int
 distExtractAll(dialogMenuItem *self)
 {
-    int old_dists, old_kernel, retries = 0, status = DITEM_SUCCESS;
+    int old_dists, old_kernel, status = DITEM_SUCCESS;
     char buf[512];
+    int extract_status = TRUE;
     WINDOW *w;
 
     /* paranoia */
@@ -878,9 +884,7 @@ distExtractAll(dialogMenuItem *self)
     w = savescr();
     msgNotify("Attempting to install all selected distributions..");
 
-    /* Try for 3 times around the loop, then give up. */
-    while (Dists && ++retries < 3)
-       distExtract(NULL, DistTable);
+    extract_status = distExtract(NULL, DistTable);
 
     dialog_clear_norefresh();
     /* Only do base fixup if base dist was successfully extracted */
@@ -907,5 +911,9 @@ distExtractAll(dialogMenuItem *self)
        }
     }
     restorescr(w);
+
+    if (extract_status == FALSE)
+       status = DITEM_FAILURE;
+
     return status;
 }

Modified: head/usr.sbin/sysinstall/install.c
==============================================================================
--- head/usr.sbin/sysinstall/install.c  Wed Jun 23 14:11:34 2010        
(r209467)
+++ head/usr.sbin/sysinstall/install.c  Wed Jun 23 14:19:19 2010        
(r209468)
@@ -678,8 +678,7 @@ nodisks:
        msgConfirm("Installation completed with some errors.  You may wish to\n"
                   "scroll through the debugging messages on VTY1 with the\n"
                   "scroll-lock feature.  You can also choose \"No\" at the 
next\n"
-                  "prompt and go back into the installation menus to retry\n"
-                  "whichever operations have failed.");
+                  "prompt and reboot and try the installation again.");
        return i;
 
     }
@@ -855,6 +854,9 @@ try_media:
     /* Now go get it all */
     i = distExtractAll(self);
 
+    if (i == FALSE)
+           return FALSE;
+
     /* When running as init, *now* it's safe to grab the rc.foo vars */
     installEnvironment();
 
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to