# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1274867535 -3600
# Node ID fa41b06a52a3dd1ec70a5cfe13201f2b47e6fc8b
# Parent 15f4ead9e6861ba1180840ce99f5b7815cc3361d
pyGrub: Use proper bootloader class when entering command manually
Use the proper bootloader class when entering the boot commands
manually (i.e. using the 'c' option). Before this patch the bootloader
was always treated to be Grub but when user is using Grub2/ExtLinux or
Lilo it's rather confusing. After applying this patch the proper
bootloader image class is being used, e.g. Grub2Image for Grub2
etc. when you define the boot commands manually using the 'c' command
in pyGrub.
Also, fix for using isconfig has been applied since if there is not fs
set in the run_grub() method the read_config() would fail since it's
trying to access undefined self.cf which is now being set to parser()
from cfg_list.
Signed-off-by: Michal Novotny <minovotn@xxxxxxxxxx>
Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
---
tools/pygrub/src/ExtLinuxConf.py | 6 ++++++
tools/pygrub/src/GrubConf.py | 8 +++++++-
tools/pygrub/src/LiloConf.py | 6 ++++++
tools/pygrub/src/pygrub | 12 +++++++-----
4 files changed, 26 insertions(+), 6 deletions(-)
diff -r 15f4ead9e686 -r fa41b06a52a3 tools/pygrub/src/ExtLinuxConf.py
--- a/tools/pygrub/src/ExtLinuxConf.py Wed May 26 08:15:31 2010 +0100
+++ b/tools/pygrub/src/ExtLinuxConf.py Wed May 26 10:52:15 2010 +0100
@@ -118,6 +118,12 @@ class ExtLinuxConfigFile(object):
if fn is not None:
self.parse()
+
+ def new_image(self, title, lines):
+ # ExtLinuxImage constructor doesn't have title but since path
+ # is being used by get_{kernel|initrd} functions we pass
+ # empty string rather than None (see lines above)
+ return ExtLinuxImage(lines, "")
def parse(self, buf = None):
if buf is None:
diff -r 15f4ead9e686 -r fa41b06a52a3 tools/pygrub/src/GrubConf.py
--- a/tools/pygrub/src/GrubConf.py Wed May 26 08:15:31 2010 +0100
+++ b/tools/pygrub/src/GrubConf.py Wed May 26 10:52:15 2010 +0100
@@ -252,6 +252,9 @@ class GrubConfigFile(_GrubConfigFile):
def __init__(self, fn = None):
_GrubConfigFile.__init__(self,fn)
+ def new_image(self, title, lines):
+ return GrubImage(title, lines)
+
def parse(self, buf = None):
if buf is None:
if self.filename is None:
@@ -345,7 +348,10 @@ class Grub2ConfigFile(_GrubConfigFile):
class Grub2ConfigFile(_GrubConfigFile):
def __init__(self, fn = None):
_GrubConfigFile.__init__(self, fn)
-
+
+ def new_image(self, title, lines):
+ return Grub2Image(title, lines)
+
def parse(self, buf = None):
if buf is None:
if self.filename is None:
diff -r 15f4ead9e686 -r fa41b06a52a3 tools/pygrub/src/LiloConf.py
--- a/tools/pygrub/src/LiloConf.py Wed May 26 08:15:31 2010 +0100
+++ b/tools/pygrub/src/LiloConf.py Wed May 26 10:52:15 2010 +0100
@@ -147,6 +147,12 @@ class LiloConfigFile(object):
def add_image(self, image):
self.images.append(image)
+ def new_image(self, title, lines):
+ # LiloImage constructor doesn't have title but since path
+ # is being used by get_{kernel|initrd} functions we pass
+ # empty string rather than None (see lines above)
+ return LiloImage(lines, "")
+
def _get_default(self):
for i in range(len(self.images)):
if self.images[i].title == self._default:
diff -r 15f4ead9e686 -r fa41b06a52a3 tools/pygrub/src/pygrub
--- a/tools/pygrub/src/pygrub Wed May 26 08:15:31 2010 +0100
+++ b/tools/pygrub/src/pygrub Wed May 26 10:52:15 2010 +0100
@@ -356,7 +356,7 @@ class Grub:
continue
# if we got boot, then we want to boot the entered image
- img = grub.GrubConf.GrubImage(lines)
+ img = self.cf.new_image("entered", lines)
self.cf.add_image(img)
self.selected_image = len(self.cf.images) - 1
self.isdone = True
@@ -392,9 +392,11 @@ class Grub:
if not fs:
# set the config file and parse it
- self.cf.filename = fn
- self.cf.parse()
- return
+ for f,parser in cfg_list:
+ self.cf = parser()
+ self.cf.filename = fn
+ self.cf.parse()
+ return
for f,parser in cfg_list:
if fs.file_exists(f):
@@ -689,7 +691,7 @@ if __name__ == "__main__":
if isconfig:
chosencfg = run_grub(file, entry, fs, incfg["args"])
print " kernel: %s" % chosencfg["kernel"]
- if img.initrd:
+ if chosencfg["ramdisk"]:
print " initrd: %s" % chosencfg["ramdisk"]
print " args: %s" % chosencfg["args"]
sys.exit(0)
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|