Merging casper 1.216.
[live-boot-grml.git] / bin / live-set-selections
1 #!/bin/sh
2 # Cloned-and-hacked from preseed/debconf-set-selections for live-initramfs.
3 set -e
4
5 OLDIFS="$IFS"
6 CR=$(echo -en "\r")
7 NL="
8 "
9
10 . /scripts/live-functions
11 load_confmodule
12
13 # Returns the first field in the current line
14 first_field() {
15         echo "$line" | grep -q "[[:space:]]" || return 1
16         echo "$line" | sed -r 's/^([^[:space:]]*).*/\1/'
17 }
18
19 # Returns any fields after the first field in the current line
20 rest_line() {
21         if echo "$line" | grep -q "[[:space:]]"; then
22                 echo "$line" | sed 's/^[^[:space:]]*[[:space:]]*//'
23         fi
24 }
25
26 SEEN=1
27 if [ "$1" = --unseen ]; then
28         SEEN=
29         shift
30 fi
31
32 file="$1"
33
34 parse_error() {
35         echo "Error parsing preconfiguration file: $*" >&2
36         exit 1
37 }
38
39 IFS="$NL"
40 multiline=""
41 # TODO: this squashes \r elsewhere in the line too
42 for line in $(grep -v '^#\|^[[:space:]]*$' "$file" | sed "s/$CR//g"); do
43         IFS="$OLDIFS"
44
45         line="$(echo "$line" | sed 's/^[[:space:]]*//')"
46         if echo "$line" | grep -q '\\$'; then
47                 multiline="${multiline:+$multiline }$(echo "$line" | \
48                         sed 's/[[:space:]]*\\$//')"
49                 continue
50         elif [ -n "$multiline" ]; then
51                 line="$multiline $line"
52                 multiline=""
53         fi
54
55         package=""
56         var=""
57         type=""
58         val=""
59         if ! package="$(first_field)"; then
60                 parse_error "Syntax error: unable to determine template owner"
61         fi
62         line="$(rest_line)"
63         if ! var="$(first_field)"; then
64                 parse_error "Syntax error: unable to determine template name"
65         fi
66         line="$(rest_line)"
67         if ! type="$(first_field)"; then
68                 # Allow for lines without separator before an empty value
69                 if [ "$line" ]; then
70                         type="$line"
71                 else
72                         parse_error "Syntax error: unable to determine template type"
73                 fi
74         fi
75         line="$(rest_line)"
76         val="$line"
77
78         if [ "$type" = seen ]; then
79                 # Set seen flag.
80                 db_fset "$var" "$type" "$val" || true # how to handle this error?
81         else
82                 if ! db_set "$var" "$val"; then
83                         # Question does not exist yet.
84                         db_register debian-installer/dummy "$var"
85                         db_set "$var" "$val"
86                         db_subst "$var" ID "$var"
87                 fi
88                 if [ "$SEEN" ]; then
89                         db_fset "$var" seen true
90                 fi
91         fi
92 done