Here is the diff.
--- /sbin/update-grub	2005-04-19 02:38:00.000000000 +0300
+++ update-grub.final-1	2005-09-25 17:58:59.000000000 +0300
@@ -301,6 +301,9 @@
 # should grub create a memtest86 entry
 	memtest86="true"
 
+# should update-grub remember the default entry
+	keepdefaultentry="false"
+
 # stores the command line arguments
 	command_line_arguments=$1
 
@@ -556,6 +559,14 @@
 	echo >> $buffer
 }
 
+set_default_value() {
+
+value="$1"
+newmenu=$(tempfile)
+sed -e "s/^[[:blank:]]*default[[:blank:]]*[[:digit:]]*\(.*\)/default         ${value}\1/;b" $menu > $newmenu
+mv $newmenu $menu # not nice
+unset newmenu
+}
 
 echo -n "Testing for an existing GRUB menu.list file... "
 
@@ -594,6 +605,10 @@
 	esac
 fi
 
+# Extract the keepdefaultentry option
+keepdefaultentry=$(GetMenuOpt "keepdefaultentry" "$keepdefaultentry")
+#echo "keepdefaultentry is $keepdefaultentry"
+
 # Extract the kernel options to use
 kopt=$(GetMenuOpt "kopt" "$kopt")
 
@@ -651,6 +666,11 @@
 echo "# alternative=$alternative" >> $buffer
 echo >> $buffer
 
+echo "## should update-grub adjust the value of the default booted system" >> $buffer
+echo "## can be true or false" >> $buffer
+echo "# keepdefaultentry=$keepdefaultentry" >> $buffer
+echo >> $buffer
+
 echo "## should update-grub lock alternative automagic boot options" >> $buffer
 echo "## e.g. lockalternative=true" >> $buffer
 echo "##      lockalternative=false" >> $buffer
@@ -728,6 +748,22 @@
 	kernel_dir=
 fi
 
+if test "$keepdefaultentry" = "true" ; then
+	defaultEntryNumber=$(sed -ne 's/^[[:blank:]]*default[[:blank:]]*\([[:digit:]]*\).*/\1/p' $menu)
+#	echo "Default entry is \"$defaultEntryNumber\""
+	if test -n "$defaultEntryNumber"; then
+#		echo "Restoring old entry"
+		defaultEntryNumberPlusOne=$(expr $defaultEntryNumber \+ 1);
+		defaultEntry=$(grep "^[[:blank:]]*title" $menu | sed -ne "${defaultEntryNumberPlusOne}p" | sed -ne ";s/^[[:blank:]]*title[[:blank:]]*//p")
+		defaultEntry=$(echo $defaultEntry | sed -e "s/[[:blank:]]*$//") # don't trust trailing blanks
+#		echo "Default entry title is \"$defaultEntry\""
+	else
+		notChangeDefault="yes"
+	fi
+else
+		notChangeDefault="yes"
+fi
+
 ## heres where we start writing out the kernel entries
 counter=0
 for kern in $sortedKernels ; do
@@ -824,5 +860,28 @@
 	cat $menu.new > $menu
 	rm -f $buffer $menu.new
 fi
+
+if test -z "$notChangeDefault"; then
+	echo
+	newDefaultNumberPlusOne=$(grep "^[[:blank:]]*title[[:blank:]]*" $menu | grep -n "${defaultEntry}" | cut -f1 -d ":" | sed -ne "1p")
+#	echo "newDefaultNumberPlusOne is \"$newDefaultNumberPlusOne\""
+	if test -z "$newDefaultNumberPlusOne"; then
+		echo "Previous default entry removed, resetting to 0"
+		set_default_value "0"
+	elif test -z "$defaultEntry"; then
+		echo "Value of default value matches no entry, resetting to 0"
+		set_default_value "0"
+	else
+		if test "$newDefaultNumberPlusOne" = "1"; then
+			newDefaultNumber="0"
+		else
+			newDefaultNumber=$(expr $newDefaultNumberPlusOne - 1)
+		fi
+#		echo "newDefaultNumber is $newDefaultNumber"
+#		echo "Adjusting default entry to $newDefaultNumber"
+		set_default_value "$newDefaultNumber"
+	fi
+fi
+
 echo "done"
 echo

Reply via email to