Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 21 Aug 2011 18:50:30 +0000 (UTC)
From:      Nathan Whitehorn <nwhitehorn@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r225066 - head/usr.sbin/bsdinstall/partedit
Message-ID:  <201108211850.p7LIoUii015392@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: nwhitehorn
Date: Sun Aug 21 18:50:30 2011
New Revision: 225066
URL: http://svn.freebsd.org/changeset/base/225066

Log:
  Implement support for GRAID volumes in the installer partition editor,
  rename a few options, clarify some help text, and add help text for the
  buttons on the main partition editor screen.
  
  Approved by:	re (kib)

Modified:
  head/usr.sbin/bsdinstall/partedit/diskeditor.c
  head/usr.sbin/bsdinstall/partedit/gpart_ops.c
  head/usr.sbin/bsdinstall/partedit/part_wizard.c
  head/usr.sbin/bsdinstall/partedit/partedit.c

Modified: head/usr.sbin/bsdinstall/partedit/diskeditor.c
==============================================================================
--- head/usr.sbin/bsdinstall/partedit/diskeditor.c	Sun Aug 21 18:49:28 2011	(r225065)
+++ head/usr.sbin/bsdinstall/partedit/diskeditor.c	Sun Aug 21 18:50:30 2011	(r225066)
@@ -65,7 +65,12 @@ diskeditor_show(const char *title, const
 	WINDOW *dialog, *partitions;
 	char *prompt;
 	const char *buttons[] =
-	    { "Create", "Delete", "Modify", "Revert", "Auto", "Exit", NULL };
+	    { "Create", "Delete", "Modify", "Revert", "Auto", "Finish", NULL };
+	const char *help_text[] = {
+	    "Add a new partition", "Delete selected partition or partitions",
+	    "Change partition type or mountpoint",
+	    "Revert changes to disk setup", "Use guided partitioning tool",
+	    "Exit partitioner (will ask whether to save changes)", NULL };
 	int x, y;
 	int i;
 	int height, width, min_width;
@@ -125,6 +130,7 @@ diskeditor_show(const char *title, const
 	dlg_register_buttons(partitions, "partlist", buttons);
 	wattrset(partitions, menubox_attr);
 
+	dlg_item_help(help_text[cur_button]);
 	dlg_draw_buttons(dialog, height - 2*MARGIN, 0, buttons,
 	    cur_button, FALSE, width);
 	dlg_print_autowrap(dialog, prompt, height, width);
@@ -154,6 +160,7 @@ repaint:
 		key = dlg_mouse_wgetch(dialog, &fkey);
 		if ((i = dlg_char_to_button(key, buttons)) >= 0) {
 			cur_button = i;
+			dlg_item_help(help_text[cur_button]);
 			dlg_draw_buttons(dialog, height - 2*MARGIN, 0, buttons,
 			    cur_button, FALSE, width);
 			break;
@@ -167,6 +174,7 @@ repaint:
 			cur_button = dlg_next_button(buttons, cur_button);
 			if (cur_button < 0)
 				cur_button = 0;
+			dlg_item_help(help_text[cur_button]);
 			dlg_draw_buttons(dialog, height - 2*MARGIN, 0, buttons,
 			    cur_button, FALSE, width);
 			break;
@@ -174,6 +182,7 @@ repaint:
 			cur_button = dlg_prev_button(buttons, cur_button);
 			if (cur_button < 0)
 				cur_button = 0;
+			dlg_item_help(help_text[cur_button]);
 			dlg_draw_buttons(dialog, height - 2*MARGIN, 0, buttons,
 			    cur_button, FALSE, width);
 			break;
@@ -215,6 +224,8 @@ repaint:
 			cur_scroll += (partlist_height - 2);
 			if (cur_scroll + partlist_height - 2 >= nitems)
 				cur_scroll = nitems - (partlist_height - 2);
+			if (cur_scroll < 0)
+				cur_scroll = 0;
 			if (cur_part < cur_scroll)
 				cur_part = cur_scroll;
 			goto repaint;
@@ -231,6 +242,8 @@ repaint:
 			goto repaint;
 		case DLGK_PAGE_LAST:
 			cur_scroll = nitems - (partlist_height - 2);
+			if (cur_scroll < 0)
+				cur_scroll = 0;
 			cur_part = cur_scroll;
 			goto repaint;
 		case DLGK_ENTER:
@@ -238,6 +251,7 @@ repaint:
 		default:
 			if (is_DLGK_MOUSE(key)) {
 				cur_button = key - M_EVENT;
+				dlg_item_help(help_text[cur_button]);
 				dlg_draw_buttons(dialog, height - 2*MARGIN, 0,
 				    buttons, cur_button, FALSE, width);
 				goto done;

Modified: head/usr.sbin/bsdinstall/partedit/gpart_ops.c
==============================================================================
--- head/usr.sbin/bsdinstall/partedit/gpart_ops.c	Sun Aug 21 18:49:28 2011	(r225065)
+++ head/usr.sbin/bsdinstall/partedit/gpart_ops.c	Sun Aug 21 18:50:30 2011	(r225066)
@@ -472,7 +472,7 @@ gpart_edit(struct gprovider *pp)
 
 	if (geom == NULL) {
 		/* Disk not partitioned, so partition it */
-		gpart_partition(pp->lg_geom->lg_name, NULL);
+		gpart_partition(pp->lg_name, NULL);
 		return;
 	}
 
@@ -791,7 +791,7 @@ gpart_create(struct gprovider *pp, char 
 	}
 
 	if (geom == NULL || scheme == NULL || strcmp(scheme, "(none)") == 0) {
-		if (gpart_partition(pp->lg_geom->lg_name, NULL) == 0)
+		if (gpart_partition(pp->lg_name, NULL) == 0)
 			dialog_msgbox("",
 			    "The partition table has been successfully created."
 			    " Please press Create again to create partitions.",
@@ -820,8 +820,10 @@ gpart_create(struct gprovider *pp, char 
 	items[1].text = sizestr;
 
 	/* Special-case the MBR default type for nested partitions */
-	if (strcmp(scheme, "MBR") == 0 || strcmp(scheme, "PC98") == 0)
+	if (strcmp(scheme, "MBR") == 0 || strcmp(scheme, "PC98") == 0) {
 		items[0].text = "freebsd";
+		items[0].help = "Filesystem type (e.g. freebsd, fat32)";
+	}
 
 	nitems = scheme_supports_labels(scheme) ? 4 : 3;
 

Modified: head/usr.sbin/bsdinstall/partedit/part_wizard.c
==============================================================================
--- head/usr.sbin/bsdinstall/partedit/part_wizard.c	Sun Aug 21 18:49:28 2011	(r225065)
+++ head/usr.sbin/bsdinstall/partedit/part_wizard.c	Sun Aug 21 18:50:30 2011	(r225066)
@@ -96,6 +96,7 @@ boot_disk(struct gmesh *mesh)
 
 	LIST_FOREACH(classp, &mesh->lg_class, lg_class) {
 		if (strcmp(classp->lg_name, "DISK") != 0 &&
+		    strcmp(classp->lg_name, "RAID") != 0 &&
 		    strcmp(classp->lg_name, "MD") != 0)
 			continue;
 
@@ -169,6 +170,7 @@ provider_for_name(struct gmesh *mesh, co
 	LIST_FOREACH(classp, &mesh->lg_class, lg_class) {
 		if (strcmp(classp->lg_name, "DISK") != 0 &&
 		    strcmp(classp->lg_name, "PART") != 0 &&
+		    strcmp(classp->lg_name, "RAID") != 0 &&
 		    strcmp(classp->lg_name, "MD") != 0)
 			continue;
 

Modified: head/usr.sbin/bsdinstall/partedit/partedit.c
==============================================================================
--- head/usr.sbin/bsdinstall/partedit/partedit.c	Sun Aug 21 18:49:28 2011	(r225065)
+++ head/usr.sbin/bsdinstall/partedit/partedit.c	Sun Aug 21 18:50:30 2011	(r225066)
@@ -50,8 +50,24 @@ static void init_fstab_metadata(void);
 static void get_mount_points(struct partedit_item *items, int nitems);
 static int validate_setup(void);
 
+static void
+sigint_handler(int sig)
+{
+	struct gmesh mesh;
+
+	/* Revert all changes and exit dialog-mode cleanly on SIGINT */
+	geom_gettree(&mesh);
+	gpart_revert_all(&mesh);
+	geom_deletetree(&mesh);
+
+	end_dialog();
+
+	exit(1);
+}
+
 int
-main(int argc, const char **argv) {
+main(int argc, const char **argv)
+{
 	struct partition_metadata *md;
 	const char *prompt;
 	struct partedit_item *items;
@@ -69,13 +85,16 @@ main(int argc, const char **argv) {
 	dialog_vars.item_help = TRUE;
 	nscroll = i = 0;
 
+	/* Revert changes on SIGINT */
+	signal(SIGINT, sigint_handler);
+
 	if (strcmp(basename(argv[0]), "autopart") == 0) { /* Guided */
 		prompt = "Please review the disk setup. When complete, press "
-		    "the Exit button.";
+		    "the Finish button.";
 		part_wizard();
 	} else {
 		prompt = "Create partitions for FreeBSD. No changes will be "
-		    "made until you select Exit.";
+		    "made until you select Finish.";
 	}
 
 	/* Show the part editor either immediately, or to confirm wizard */
@@ -129,21 +148,24 @@ main(int argc, const char **argv) {
 
 		error = 0;
 		if (op == 5) { /* Finished */
-			dialog_vars.extra_button = TRUE;
+			dialog_vars.ok_label = __DECONST(char *, "Commit");
 			dialog_vars.extra_label =
-			    __DECONST(char *, "Abort");
-			dialog_vars.ok_label = __DECONST(char *, "Save");
+			    __DECONST(char *, "Revert & Exit");
+			dialog_vars.extra_button = TRUE;
+			dialog_vars.cancel_label = __DECONST(char *, "Back");
 			op = dialog_yesno("Confirmation", "Your changes will "
 			    "now be written to disk. If you have chosen to "
 			    "overwrite existing data, it will be PERMANENTLY "
-			    "ERASED. Are you sure you want to proceed?", 0, 0);
-			dialog_vars.extra_button = FALSE;
+			    "ERASED. Are you sure you want to commit your "
+			    "changes?", 0, 0);
 			dialog_vars.ok_label = NULL;
+			dialog_vars.extra_button = FALSE;
+			dialog_vars.cancel_label = NULL;
 
 			if (op == 0 && validate_setup()) { /* Save */
 				error = apply_changes(&mesh);
 				break;
-			} else if (op == 3) { /* Don't save => Quit */
+			} else if (op == 3) { /* Quit */
 				gpart_revert_all(&mesh);
 				error =	-1;
 				break;
@@ -181,7 +203,8 @@ get_part_metadata(const char *name, int 
 }
 	
 void
-delete_part_metadata(const char *name) {
+delete_part_metadata(const char *name)
+{
 	struct partition_metadata *md;
 
 	TAILQ_FOREACH(md, &part_metadata, metadata) {
@@ -316,7 +339,8 @@ apply_changes(struct gmesh *mesh)
 }
 
 static struct partedit_item *
-read_geom_mesh(struct gmesh *mesh, int *nitems) {
+read_geom_mesh(struct gmesh *mesh, int *nitems)
+{
 	struct gclass *classp;
 	struct ggeom *gp;
 	struct partedit_item *items;
@@ -330,7 +354,7 @@ read_geom_mesh(struct gmesh *mesh, int *
 	
 	LIST_FOREACH(classp, &mesh->lg_class, lg_class) {
 		if (strcmp(classp->lg_name, "DISK") != 0 &&
-		     strcmp(classp->lg_name, "MD") != 0)
+		    strcmp(classp->lg_name, "MD") != 0)
 			continue;
 
 		/* Now recurse into all children */
@@ -343,7 +367,8 @@ read_geom_mesh(struct gmesh *mesh, int *
 
 static void
 add_geom_children(struct ggeom *gp, int recurse, struct partedit_item **items,
-    int *nitems) {
+    int *nitems)
+{
 	struct gconsumer *cp;
 	struct gprovider *pp;
 	struct gconfig *gc;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201108211850.p7LIoUii015392>