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