Hello community, here is the log from the commit of package perl-Bootloader for openSUSE:Factory checked in at 2015-04-25 16:46:16 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/perl-Bootloader (Old) and /work/SRC/openSUSE:Factory/.perl-Bootloader.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-Bootloader" Changes: -------- --- /work/SRC/openSUSE:Factory/perl-Bootloader/perl-Bootloader.changes 2015-03-29 20:17:08.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.perl-Bootloader.new/perl-Bootloader.changes 2015-04-25 16:46:18.000000000 +0200 @@ -1,0 +2,12 @@ +Wed Apr 22 14:01:05 CEST 2015 - [email protected] + +- started pbl-yaml testsuite +- added test cases for various utf8/non-utf8/really broken config files +- rewrite file-io to do some utf8 processing that keeps non-utf8 files intact as much as possible +- use only WriteFileRaw() to actually write files +- use ReadFileRaw() to read grub2 config (bnc #899921) +- rewrite ReadFile() to handle utf8 properly (bnc #899921) +- export more pbl functions via yaml interface to allow easier testing +- 0.832 + +------------------------------------------------------------------- Old: ---- perl-Bootloader-0.831.tar.xz New: ---- perl-Bootloader-0.832.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ perl-Bootloader.spec ++++++ --- /var/tmp/diff_new_pack.dHvoto/_old 2015-04-25 16:46:18.000000000 +0200 +++ /var/tmp/diff_new_pack.dHvoto/_new 2015-04-25 16:46:18.000000000 +0200 @@ -1,7 +1,7 @@ # # spec file for package perl-Bootloader # -# Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: perl-Bootloader -Version: 0.831 +Version: 0.832 Release: 0 Requires: coreutils Requires: perl-base = %{perl_version} ++++++ perl-Bootloader-0.831.tar.xz -> perl-Bootloader-0.832.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/VERSION new/perl-Bootloader-0.832/VERSION --- old/perl-Bootloader-0.831/VERSION 2015-03-26 12:58:27.000000000 +0100 +++ new/perl-Bootloader-0.832/VERSION 2015-04-22 13:59:11.000000000 +0200 @@ -1 +1 @@ -0.831 +0.832 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/changelog new/perl-Bootloader-0.832/changelog --- old/perl-Bootloader-0.831/changelog 2015-03-26 12:58:27.000000000 +0100 +++ new/perl-Bootloader-0.832/changelog 2015-04-22 13:59:11.000000000 +0200 @@ -1,3 +1,12 @@ +2015-04-22: 0.832 + - started pbl-yaml testsuite + - added test cases for various utf8/non-utf8/really broken config files + - rewrite file-io to do some utf8 processing that keeps non-utf8 files intact as much as possible + - use only WriteFileRaw() to actually write files + - use ReadFileRaw() to read grub2 config (bnc #899921) + - rewrite ReadFile() to handle utf8 properly (bnc #899921) + - export more pbl functions via yaml interface to allow easier testing + 2015-03-26: 0.831 - remove unrelated comment - add device scannning speed-ups done for sle11-sp3 (bnc #910479) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/pbl-yaml new/perl-Bootloader-0.832/pbl-yaml --- old/perl-Bootloader-0.831/pbl-yaml 2015-03-26 12:58:27.000000000 +0100 +++ new/perl-Bootloader-0.832/pbl-yaml 2015-04-22 13:59:11.000000000 +0200 @@ -106,6 +106,12 @@ elsif(exists $Bootloader::Library::{$func}) { $res = $pbl_state->$func(@args); } + elsif(exists $Bootloader::FileIO::{$func}) { + $res = $pbl_state->$func(@args); + } + elsif(exists $Bootloader::Path::{$func}) { + eval "\$res = Bootloader::Path::$func(\@args)"; + } else { $logger->error("$func: no such function"); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/Makefile new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/Makefile --- old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/Makefile 2015-03-26 12:58:27.000000000 +0100 +++ new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/Makefile 2015-04-22 13:59:11.000000000 +0200 @@ -1,4 +1,6 @@ -main: prepare test clean +all: test yaml clean + +.PHONY: prepare test yaml clean prepare: clean mkdir -p Bootloader @@ -7,7 +9,7 @@ cp -rf backup/fake_root2 . @mkdir -p fake_root{1,2}/var/log/YaST2 -test: +test: prepare perl -w grub1-test.pl perl -w lilo1-test.pl perl -w elilo1-test.pl @@ -20,9 +22,11 @@ rm -rf Bootloader rm -rf fake_root[12] +yaml: + cd yaml; ./yaml_test + #usefull target after failed test clean: @rm -rf Bootloader rm -rf fake_root* - cp -rf backup/fake_root1 . - cp -rf backup/fake_root2 . + rm -rf yaml/{arg*,res*,var} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/README new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/README --- old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/README 1970-01-01 01:00:00.000000000 +0100 +++ new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/README 2015-04-22 13:59:11.000000000 +0200 @@ -0,0 +1,8 @@ +=== Test file encoding during file-i/o in perl-Bootloader === + +- file*: test inputs + +- input*: internal yaml representation of file* (generated from res00? + obtained during yaml_test run) + +- other files: encoding samples used to put together file* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/ascii new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/ascii --- old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/ascii 1970-01-01 01:00:00.000000000 +0100 +++ new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/ascii 2015-04-22 13:59:11.000000000 +0200 @@ -0,0 +1 @@ +ascii abc 123 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file1 new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file1 --- old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file1 1970-01-01 01:00:00.000000000 +0100 +++ new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file1 2015-04-22 13:59:11.000000000 +0200 @@ -0,0 +1 @@ +ascii abc 123 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file2 new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file2 --- old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file2 1970-01-01 01:00:00.000000000 +0100 +++ new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file2 2015-04-22 13:59:11.000000000 +0200 @@ -0,0 +1 @@ +uni äö 123 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file3 new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file3 --- old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file3 1970-01-01 01:00:00.000000000 +0100 +++ new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file3 2015-04-22 13:59:11.000000000 +0200 @@ -0,0 +1 @@ +uni1 äöß 123 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file4 new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file4 --- old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file4 1970-01-01 01:00:00.000000000 +0100 +++ new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file4 2015-04-22 13:59:11.000000000 +0200 @@ -0,0 +1 @@ +uni2 äö€ 123 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file5 new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file5 --- old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file5 1970-01-01 01:00:00.000000000 +0100 +++ new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file5 2015-04-22 13:59:11.000000000 +0200 @@ -0,0 +1 @@ +lat �� 123 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file6 new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file6 --- old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file6 1970-01-01 01:00:00.000000000 +0100 +++ new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file6 2015-04-22 13:59:11.000000000 +0200 @@ -0,0 +1 @@ +lat1 ��� 123 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file7 new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file7 --- old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file7 1970-01-01 01:00:00.000000000 +0100 +++ new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file7 2015-04-22 13:59:11.000000000 +0200 @@ -0,0 +1,4 @@ +lat �� 123 +uni äö 123 +lat1 ��� 123 +uni1 äöß 123 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file8 new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file8 --- old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file8 1970-01-01 01:00:00.000000000 +0100 +++ new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file8 2015-04-22 13:59:11.000000000 +0200 @@ -0,0 +1,4 @@ +uni2 äö€ 123 +lat1 ��� 123 +uni1 äöß 123 +lat �� 123 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file9 new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file9 --- old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file9 1970-01-01 01:00:00.000000000 +0100 +++ new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file9 2015-04-22 13:59:11.000000000 +0200 @@ -0,0 +1,6 @@ +invalid �� ��/�b +uni2 äö€ 123 +lat1 ��� 123 +uni1 äöß 123 +lat �� 123 +invalid �� ��/�b \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input1 new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input1 --- old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input1 1970-01-01 01:00:00.000000000 +0100 +++ new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input1 2015-04-22 13:59:11.000000000 +0200 @@ -0,0 +1,3 @@ +--- +- "res101" +- "ascii abc 123 \n" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input2 new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input2 --- old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input2 1970-01-01 01:00:00.000000000 +0100 +++ new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input2 2015-04-22 13:59:11.000000000 +0200 @@ -0,0 +1,3 @@ +--- +- "res102" +- "uni äö 123 \n" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input3 new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input3 --- old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input3 1970-01-01 01:00:00.000000000 +0100 +++ new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input3 2015-04-22 13:59:11.000000000 +0200 @@ -0,0 +1,3 @@ +--- +- "res103" +- "uni1 äöß 123 \n" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input4 new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input4 --- old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input4 1970-01-01 01:00:00.000000000 +0100 +++ new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input4 2015-04-22 13:59:11.000000000 +0200 @@ -0,0 +1,3 @@ +--- +- "res104" +- "uni2 äö€ 123 \n" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input5 new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input5 --- old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input5 1970-01-01 01:00:00.000000000 +0100 +++ new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input5 2015-04-22 13:59:11.000000000 +0200 @@ -0,0 +1,3 @@ +--- +- "res105" +- "lat \U001010E4\U001010F6 123 \n" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input6 new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input6 --- old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input6 1970-01-01 01:00:00.000000000 +0100 +++ new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input6 2015-04-22 13:59:11.000000000 +0200 @@ -0,0 +1,3 @@ +--- +- "res106" +- "lat1 \U001010E4\U001010F6\U001010DF 123 \n" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input7 new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input7 --- old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input7 1970-01-01 01:00:00.000000000 +0100 +++ new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input7 2015-04-22 13:59:11.000000000 +0200 @@ -0,0 +1,4 @@ +--- +- "res107" +- "lat \U001010E4\U001010F6 123 \nuni äö 123 \nlat1 \U001010E4\U001010F6\U001010DF + 123 \nuni1 äöß 123 \n" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input8 new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input8 --- old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input8 1970-01-01 01:00:00.000000000 +0100 +++ new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input8 2015-04-22 13:59:11.000000000 +0200 @@ -0,0 +1,4 @@ +--- +- "res108" +- "uni2 äö€ 123 \nlat1 \U001010E4\U001010F6\U001010DF 123 \nuni1 äöß 123 \nlat \U001010E4\U001010F6 + 123 \n" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input9 new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input9 --- old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input9 1970-01-01 01:00:00.000000000 +0100 +++ new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input9 2015-04-22 13:59:11.000000000 +0200 @@ -0,0 +1,5 @@ +--- +- "res109" +- "invalid \U001010EF\U001010BB \U001010EF\U001010BB/\U001010EF\bb\nuni2 äö€ 123 + \nlat1 \U001010E4\U001010F6\U001010DF 123 \nuni1 äöß 123 \nlat \U001010E4\U001010F6 + 123 \ninvalid \U001010EF\U001010BB \U001010EF\U001010BB/\U001010EF\bb" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/invalid new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/invalid --- old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/invalid 1970-01-01 01:00:00.000000000 +0100 +++ new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/invalid 2015-04-22 13:59:11.000000000 +0200 @@ -0,0 +1 @@ +invalid �� ��/�b \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/lat new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/lat --- old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/lat 1970-01-01 01:00:00.000000000 +0100 +++ new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/lat 2015-04-22 13:59:11.000000000 +0200 @@ -0,0 +1 @@ +lat �� 123 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/lat1 new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/lat1 --- old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/lat1 1970-01-01 01:00:00.000000000 +0100 +++ new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/lat1 2015-04-22 13:59:11.000000000 +0200 @@ -0,0 +1 @@ +lat1 ��� 123 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/uni new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/uni --- old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/uni 1970-01-01 01:00:00.000000000 +0100 +++ new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/uni 2015-04-22 13:59:11.000000000 +0200 @@ -0,0 +1 @@ +uni äö 123 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/uni1 new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/uni1 --- old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/uni1 1970-01-01 01:00:00.000000000 +0100 +++ new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/uni1 2015-04-22 13:59:11.000000000 +0200 @@ -0,0 +1 @@ +uni1 äöß 123 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/uni2 new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/uni2 --- old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/uni2 1970-01-01 01:00:00.000000000 +0100 +++ new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/uni2 2015-04-22 13:59:11.000000000 +0200 @@ -0,0 +1 @@ +uni2 äö€ 123 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/yaml_test new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/yaml_test --- old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/yaml_test 1970-01-01 01:00:00.000000000 +0100 +++ new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/yaml_test 2015-04-22 13:59:11.000000000 +0200 @@ -0,0 +1,45 @@ +#! /bin/bash + +test_failed=0 + +function yaml_scalar { + echo "--- \"$2\"" > "$1" +} + +function yaml_array { + file="$1" + shift + echo "---" > "$file" + while [ -n "$1" ] ; do + echo "- \"$1\"" > "$file" + shift + done +} + +function check { + if cmp -s "$1" "$2" ; then + echo $1: ok + else + echo $1: failed + test_failed=1 + fi +} + + +# pbl log goes to var/log/pbl.log +export PERL_BOOTLOADER_TESTSUITE_PATH=. +mkdir -p var/log + + +test_dir=test1 +sub_tests=9 + +for i in `seq $sub_tests` ; do + yaml_scalar arg$i "$test_dir/file$i" + pbl-yaml "res00$i=ReadFileUnicode(arg$i)" + pbl-yaml "res20$i=WriteFileUnicode(@$test_dir/input$i)" + check "$test_dir/file$i" "res10$i" +done + + +exit $test_failed diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/src/Core/GRUB2.pm new/perl-Bootloader-0.832/src/Core/GRUB2.pm --- old/perl-Bootloader-0.831/src/Core/GRUB2.pm 2015-03-26 12:58:27.000000000 +0100 +++ new/perl-Bootloader-0.832/src/Core/GRUB2.pm 2015-04-22 13:59:11.000000000 +0200 @@ -567,13 +567,10 @@ } my @entries; - if (open (GRUBCFG, "<:encoding(utf8)", Bootloader::Path::Grub2_conf())) { - local $/; - undef $/; - my $cfg = <GRUBCFG>; + my $cfg = $self->ReadFileUnicode(Bootloader::Path::Grub2_conf()); + if ($cfg) { &GrubCfgSections ("", $cfg, \@entries); - close (GRUBCFG); } $self->{"global"} = $glob_ref; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/src/Core/GRUB2EFI.pm new/perl-Bootloader-0.832/src/Core/GRUB2EFI.pm --- old/perl-Bootloader-0.831/src/Core/GRUB2EFI.pm 2015-03-26 12:58:27.000000000 +0100 +++ new/perl-Bootloader-0.832/src/Core/GRUB2EFI.pm 2015-04-22 13:59:11.000000000 +0200 @@ -286,13 +286,10 @@ ); my @entries; - if (open (GRUBCFG, "<:encoding(utf8)", Bootloader::Path::Grub2_conf())) { - local $/; - undef $/; - my $cfg = <GRUBCFG>; + my $cfg = $self->ReadFileUnicode(Bootloader::Path::Grub2_conf()); + if ($cfg) { &GrubCfgSections ("", $cfg, \@entries); - close (GRUBCFG); } $self->{"global"} = $glob_ref; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/src/FileIO.pm new/perl-Bootloader-0.832/src/FileIO.pm --- old/perl-Bootloader-0.831/src/FileIO.pm 2015-03-26 12:58:27.000000000 +0100 +++ new/perl-Bootloader-0.832/src/FileIO.pm 2015-04-22 13:59:11.000000000 +0200 @@ -10,7 +10,7 @@ =head1 PREFACE -XXX +This package provides basic file-i/o functions. =head1 SYNOPSIS @@ -20,10 +20,16 @@ C<< $lines_ref = Bootloader::FileIO->ReadFile($file_name); >> +C<< $lines_ref = Bootloader::FileIO->ReadFileUnicode($file_name); >> + +C<< $lines_ref = Bootloader::FileIO->ReadFileRaw($file_name); >> + C<< $number = Bootloader::FileIO->ReadNumber($file_name); >> C<< $lines_ref = Bootloader::FileIO->WriteFile($file, $lines); >> +C<< $lines_ref = Bootloader::FileIO->WriteFileUnicode($file, $data); >> + C<< $lines_ref = Bootloader::FileIO->WriteFileRaw($file, $data); >> =head1 DESCRIPTION @@ -39,6 +45,15 @@ use base qw ( Bootloader::Logger ); +# remap invalid 8-bit input data to this codepoint +my $utf8_remap_codepoint = 0x101000; + +# private helper to convert a byte-stream into valid utf8 +sub u_decode; + +# private helper to convert utf8 back into byte-stream +sub u_encode; + =item C<< $files_ref = Bootloader::FileIO->ReadFiles(\@file_list); >> @@ -68,7 +83,8 @@ C<< $lines_ref = Bootloader::FileIO->ReadFile($file_name); >> Reads a file from disk and returns a reference to an array of lines (with -newline stripped). If the file could not be read, returns undef. +newline stripped). +If the file could not be read, returns undef. =cut @@ -79,18 +95,80 @@ my $lines; + my $f = $self->ReadFileUnicode($file); + + if($f) { + chomp $f; + $lines = [ split /\n/, $f, -1 ]; + } + + $self->debug("lines =", $lines); + + return $lines; +} + + +=item +C<< $lines_ref = Bootloader::FileIO->ReadFileUnicode($file_name); >> + +Reads a file from disk and returns its content. +Some special processing is done to ensure it returns proper Unicode data. +If the file could not be read, returns undef. + +=cut + +sub ReadFileUnicode +{ + my $self = shift; + my $file = shift; + + return $self->ReadFileRaw($file, 1); +} + + +=item +C<< $lines_ref = Bootloader::FileIO->ReadFileRaw($file_name); >> + +Reads a file from disk and returns its content. +If the file could not be read, returns undef. + +=cut + +sub ReadFileRaw +{ + my $self = shift; + my $file = shift; + my $uni_decode = shift; + + my $res; + my $utf8_ok = 1; + if(open(my $fh, $file)) { - @$lines = (<$fh>); + # we read per-line so we don't have to treat the whole file specially + # when just a single char is wrong + while(<$fh>) { + if($uni_decode) { + my $x = u_decode($_); + $utf8_ok &&= $x->[1]; + $res .= $x->[0]; + } + else { + $res .= $_; + } + } close $fh; - my $l = join '', @$lines; - chomp @$lines; - $self->milestone("$file =", $l); + + if(!$utf8_ok) { + $self->warning("$file: contains non-utf8 chars"); + } + + $self->milestone("$file =", $res); } else { $self->error("Failed to open $file: $!"); } - return $lines; + return $res; } @@ -117,7 +195,7 @@ =item C<< $lines_ref = Bootloader::FileIO->WriteFile($file, $lines); >> -Writes file to disk. +Writes Unicode text in $lines to $file. Returns 1 on success, 0 otherwise. =cut @@ -127,36 +205,36 @@ my $self = shift; my $file = shift; my $lines = shift; - my $ok = 1; - my $l = join("\n", @$lines) . "\n"; + return $self->WriteFileUnicode($file, join("\n", @$lines) . "\n"); +} - $self->milestone("$file =", $l); - my $saved_umask = umask 0066; +=item +C<< $lines_ref = Bootloader::FileIO->WriteFileUnicode($file, $data); >> - if(open(my $fh, '>', $file)) { - print $fh $l; - if(!close($fh)) { - $self->error("Failed to close $file: $!"); - $ok = 0; - } - } - else { - $self->error("Failed to open $file: $!"); - $ok = 0; - } +Writes Unicode text $data to $file. +Returns 1 on success, 0 otherwise. - umask $saved_umask; +=cut - return $ok; +sub WriteFileUnicode +{ + my $self = shift; + my $file = shift; + my $data = shift; + my $ok = 1; + + $self->milestone("$file =", $data); + + return $self->WriteFileRaw($file, u_encode($data)); } =item C<< $lines_ref = Bootloader::FileIO->WriteFileRaw($file, $data); >> -Writes file to disk. +Writes $data to $file. Returns 1 on success, 0 otherwise. =cut @@ -188,4 +266,83 @@ } +# Convert binary data into well-formed utf8 data. +# +# We are not allowed to use Encode, so we do our own malformed-utf8 handling +# here and remap invalid 8-bit input data to codepoint U+101000-U1010FF +# which is within a private-use range. +# +# u_encode() reverses this process. +# +# Returns a ref to an array that holds the decoded string and a tag +# indicating whether it was valid utf8. +# +sub u_decode +{ + my $s = $_[0]; + my $l = length $s; + my $p = 0; + my $u; + my $ok; + + # if it's valid utf8, just return + return [ $s, 1 ] if utf8::decode($s); + + no warnings 'utf8'; + + # what we do here is processing the utf8 data step-by-step using perl's + # unpack() function + # if we find a non-utf8 sequence, we return the first byte and map it to + # $utf8_remap_codepoint + X + while($p < $l) { + # add bytes until unpack() says it's utf8; give up at 8 bytes length + for($ok = 0, my $i = 1; $i < 8 && $i <= $l - $p; $i++) { + my $x = (unpack "C0U*", substr($s, $p, $i))[0]; + if($x) { + # ok: return unicode char and continue + $u .= pack "U", $x; + $p += $i; + $ok = 1; + last; + } + } + + if(!$ok) { + # not ok: return one byte and continue + $u .= pack("U", $utf8_remap_codepoint + ord(substr $s, $p, 1)); + $p++; + } + } + + return [ $u, 0 ]; +} + + +# Convert utf8 data back to binary data. +# +# This is the reverse of u_decode(). +# +sub u_encode +{ + my $x; + + for (unpack "U*", $_[0]) { + if( + $_ >= $utf8_remap_codepoint && + $_ <= $utf8_remap_codepoint + 0xff + ) { + $x .= chr($_ - $utf8_remap_codepoint); + } + else { + my $z = pack "U", $_; + # important: ensure perl removes its internal utf8 tag + utf8::encode($z); + $x .= $z; + } + } + + return $x; +} + + 1; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/perl-Bootloader-0.831/src/Logger.pm new/perl-Bootloader-0.832/src/Logger.pm --- old/perl-Bootloader-0.831/src/Logger.pm 2015-03-26 12:58:27.000000000 +0100 +++ new/perl-Bootloader-0.832/src/Logger.pm 2015-04-22 13:59:11.000000000 +0200 @@ -72,6 +72,7 @@ my $tmp = select $f; $| = 1; select $tmp; + binmode $f, ':utf8'; $self->{logger}{log_fh} = $f; } @@ -80,10 +81,12 @@ my $tmp = select $f; $| = 1; select $tmp; + binmode $f, ':utf8'; $self->{logger}{log_fh_yast} = $f; } if(!$self->{logger}{log_fh} && open my $f, ">&STDERR") { + binmode $f, ':utf8'; $self->{logger}{log_fh} = $f; $self->{logger}{log_is_stderr} = 1; }
