aboutsummaryrefslogtreecommitdiffstats
path: root/tools/pygrub
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2010-05-26 10:52:15 +0100
committerKeir Fraser <keir.fraser@citrix.com>2010-05-26 10:52:15 +0100
commite779c5d7a3731fe160755923c8428307aebcbfc6 (patch)
tree35ecbe342fa6189a47ab12cf17c2e935afda4a68 /tools/pygrub
parent221bac1943483d40500379d3b049552fd4314e66 (diff)
downloadxen-e779c5d7a3731fe160755923c8428307aebcbfc6.tar.gz
xen-e779c5d7a3731fe160755923c8428307aebcbfc6.tar.bz2
xen-e779c5d7a3731fe160755923c8428307aebcbfc6.zip
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@redhat.com> Acked-by: Ian Campbell <ian.campbell@citrix.com>
Diffstat (limited to 'tools/pygrub')
-rw-r--r--tools/pygrub/src/ExtLinuxConf.py6
-rw-r--r--tools/pygrub/src/GrubConf.py8
-rw-r--r--tools/pygrub/src/LiloConf.py6
-rw-r--r--tools/pygrub/src/pygrub12
4 files changed, 26 insertions, 6 deletions
diff --git a/tools/pygrub/src/ExtLinuxConf.py b/tools/pygrub/src/ExtLinuxConf.py
index 99f0990a90..6be65cef1d 100644
--- a/tools/pygrub/src/ExtLinuxConf.py
+++ b/tools/pygrub/src/ExtLinuxConf.py
@@ -119,6 +119,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:
if self.filename is None:
diff --git a/tools/pygrub/src/GrubConf.py b/tools/pygrub/src/GrubConf.py
index 51d0c17a4e..0b946d3e46 100644
--- a/tools/pygrub/src/GrubConf.py
+++ b/tools/pygrub/src/GrubConf.py
@@ -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 Grub2Image(_GrubImage):
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 --git a/tools/pygrub/src/LiloConf.py b/tools/pygrub/src/LiloConf.py
index 8f029571cf..9858ae26f5 100644
--- a/tools/pygrub/src/LiloConf.py
+++ b/tools/pygrub/src/LiloConf.py
@@ -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 --git a/tools/pygrub/src/pygrub b/tools/pygrub/src/pygrub
index 0973b8a971..e52df7b525 100644
--- a/tools/pygrub/src/pygrub
+++ b/tools/pygrub/src/pygrub
@@ -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)