svn commit: r209468 - head/usr.sbin/sysinstall

Bruce Cran brucec at FreeBSD.org
Wed Jun 23 14:19:21 UTC 2010


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();
 


More information about the svn-src-all mailing list