|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [OSSTEST PATCH 22/24] host examination: bootloader: Do not use ed
These ed runes are what I used to develop this approach, but they are
rather opaque to those very few programmers who are not proficient
users of ed, the standard text editor.
Also, using target_editfile_root means we keep a record of the
bootloader config in the logs, which is desirable.
The regexps used to edit the grub2 confiug are slightly more
sophisticated than the ed ones were.
Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
---
ts-examine-serial-pre | 49 ++++++++++++++++++++++++-------------------------
1 file changed, 24 insertions(+), 25 deletions(-)
diff --git a/ts-examine-serial-pre b/ts-examine-serial-pre
index 26fbc56..86f332f 100755
--- a/ts-examine-serial-pre
+++ b/ts-examine-serial-pre
@@ -61,35 +61,34 @@ END
sub bootloader () {
my $c = get_cookie('bootloader');
- my $ed = sub {
- my ($file,$script) = @_;
- my $cmd = <<END;
- ed $file <<EOF
-$script
-w
-q
-EOF
-END
- $cmd .= setupboot_bootloader_edited_rune($ho);
- target_cmd_root($ho, $cmd, 200);
+ my $edit = sub {
+ my ($file,$editor) = @_;
+ target_editfile_root($ho,$file,$editor);
+ target_cmd_root($ho, setupboot_bootloader_edited_rune($ho), 200);
};
my $edscript;
if ($ho->{Flags}{'need-uboot-bootscr'}) {
- $ed->('/boot/boot.xen',<<END)
-/^echo Loaded
-i
-echo osstest uboot $c
-.
-END
+ $edit->('/boot/boot.xen', sub {
+ my $done;
+ while (<::EI>) {
+ if (m/^echo Loaded/ && !$done++) {
+ print ::EO "echo osstest uboot $c\n";
+ }
+ print ::EO;
+ }
+ });
} else {
- $ed->('/boot/grub/grub.cfg',<<END); # no support for grub1
-1
-/^ *menuentry *
-s/'\([^']*\)'/'$c \1'
-1
-/^ *submenu *
-s
-END
+ # no support for grub1
+ $edit->('/boot/grub/grub.cfg', sub {
+ my %done;
+ while (<::EI>) {
+ s{^(\s* ( menuentry | submenu ) \s+
+ (['"]) )( [^'"]+ \3) }{
+ $done{$2}++ ? $& : "$1$c $4"
+ }xe;
+ print ::EO;
+ }
+ });
}
}
--
2.1.4
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |