build.sh: Use sed script for packages files

Broke the sed expressions out of build.sh and put them their own
documented sed script.  This greatly improves readability and avoids
build.sh getting messier.

Broke the substitution command into two separate subs.  The first just
deletes comments, and the second collapses all whitespace into a single
space.  This too is easier to read, and catches a couple of edge cases
that would result it not all whitespace being collapsed.  The result may
still have (one) leading and/or trailing space, which is acceptable.
pull/14/head
T. Joseph Carter 2016-09-06 12:20:43 -07:00
parent 34d3bc7dcc
commit 7dfff846a1
2 changed files with 15 additions and 2 deletions

View File

@ -16,7 +16,8 @@ EOF
fi
if [ -f ${i}-packages-nr ]; then
log "Begin ${SUB_STAGE_DIR}/${i}-packages-nr"
PACKAGES="$(sed -e ':a;N;$ !b a' -e 's/[[:space:]]*\(#[^\n]*\)*[[:space:]]/ /g' < ${i}-packages-nr)"
PACKAGES="$(sed -f "${SCRIPT_DIR}/remove-comments.sed" < ${i}-packages-nr)"
PACKAGES="$(sed -e "$sed_expr_packages" < ${i}-packages-nr)"
if [ -n "$PACKAGES" ]; then
on_chroot sh -e - << EOF
apt-get install --no-install-recommends -y $PACKAGES
@ -26,7 +27,7 @@ EOF
fi
if [ -f ${i}-packages ]; then
log "Begin ${SUB_STAGE_DIR}/${i}-packages"
PACKAGES="$(sed -e ':a;N;$ !b a' -e 's/[[:space:]]*\(#[^\n]*\)*[[:space:]]/ /g' < ${i}-packages)"
PACKAGES="$(sed -f "${SCRIPT_DIR}/remove-comments.sed" < ${i}-packages)"
if [ -n "$PACKAGES" ]; then
on_chroot sh -e - << EOF
apt-get install -y $PACKAGES
@ -77,6 +78,7 @@ EOF
log "End ${SUB_STAGE_DIR}"
}
run_stage(){
log "Begin ${STAGE_DIR}"
STAGE=$(basename ${STAGE_DIR})

View File

@ -0,0 +1,11 @@
# Deletes comments and collapses whitespace in ##-packages files
# Append (N)ext line to buffer
# if (!)not ($)buffer is EOF, (b)ranch to (:)label loop
:loop
N
$ !b loop
# Buffer is "line1\nline2\n...lineN", del comments and collapse whitespace
s/#[^\n]*//g
s/[[:space:]]\{1,\}/ /g