summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2018-08-14 16:04:07 -0400
committerLuke Shumaker <lukeshu@lukeshu.com>2018-08-14 16:04:07 -0400
commit164904cdae966842ae9411af28fbd4c5bd9de9b7 (patch)
tree6e744c76af92c48e0d735d2e7001eb6fcd51ee09
parentee05d5c7ccec1da2d71df5848cb3e16d31a2f9a5 (diff)
osi-mk: Edit the fsid when editing a copy
-rwxr-xr-xosi-mk26
-rwxr-xr-xruntests12
2 files changed, 23 insertions, 15 deletions
diff --git a/osi-mk b/osi-mk
index ed0df3b..9ba0958 100755
--- a/osi-mk
+++ b/osi-mk
@@ -74,13 +74,14 @@ main() {
local arg_mountpoint=
local arg_size=1G
local arg_edit=false
+ local arg_edit_base=
local arg_directories=()
local arg_modules=()
local arg_packages=()
local args
- if ! args="$(getopt -n "${0##*/}" -o "se:d:m:p:hV" -l "inside:,size:,edit,directory:,module:,package:,help,version" -- "$@")"; then
+ if ! args="$(getopt -n "${0##*/}" -o "s:e::d:m:p:hV" -l "inside:,size:,edit::,directory:,module:,package:,help,version" -- "$@")"; then
arg_mode=error
else
eval "args=($args)"
@@ -89,7 +90,7 @@ main() {
case "$1" in
--inside) shift; arg_mode=inside; arg_mountpoint=$1; shift;;
-s|--size) shift; arg_size=$1; shift;;
- -e|--edit) shift; arg_edit=true;;
+ -e|--edit) shift; arg_edit=true; arg_edit_base=$1; shift;;
-d|--directory) shift; arg_directories+=("$1"); shift;;
-m|--module) shift; arg_modules+=("$1"); shift;;
@@ -142,8 +143,8 @@ main() {
echo
print 'OPTIONS:'
# --inside is internal-only; undocumented
- print ' -s SIZE, --size=SIZE set the size of the image (default: 1G)'
- print ' -e, --edit edit an existing image'
+ print ' -s SIZE, --size=SIZE set the size of the image (default: 1G)'
+ print ' -e[BASE.img], --edit[=BASE.img] edit an existing image'
echo
print ' -d OUTSIDE:INSIDE, --directory=OUTSIDE:INSIDE include the given directory'
print ' -m MOD.sh, --module=MOD.sh include the given module'
@@ -156,15 +157,22 @@ main() {
# main code starts here
outside)
+ if [[ ( $arg_edit = false || -n $arg_edit_base ) && -e $arg_file ]]; then
+ error 1 'Image file already exists, refusing to overwrite: %s' "$arg_file"
+ fi
if $arg_edit; then
- if ! [[ -f "$arg_file" ]]; then
- error 1 'Image must already exist to --edit: %s' "$arg_file"
+ if ! [[ -f "${arg_edit_base:-$arg_file}" ]]; then
+ error 1 'Image must already exist to --edit: %s' "${arg_edit_base:-$arg_file}"
+ fi
+ if [[ -n $arg_edit_base ]]; then
+ printf -v prefix "$(gettext -- '%s [format]')" "$NAME"
+ {
+ cp -T -- "$arg_edit_base" "$arg_file"
+ btrfstune -fu "$arg_file"
+ } |& sed "s|^|${prefix} |"
fi
# TODO: resize according to $arg_size
else
- if [[ -e "$arg_file" ]]; then
- error 1 'Image file already exists, refusing to overwrite: %s' "$arg_file"
- fi
printf -v prefix "$(gettext -- '%s [format]')" "$NAME"
{
truncate --size="$arg_size" -- "$arg_file"
diff --git a/runtests b/runtests
index a3a1343..98ed8dc 100755
--- a/runtests
+++ b/runtests
@@ -53,8 +53,10 @@ ${WORKDIR}/build.raw: osi-mk.d/builddeps.sh
${WORKDIR}/build.raw: osi-mk.d/systemd-dhcpcd.sh
${WORKDIR}/build.raw:
rm -f -- '$@' '$@.tmp'
- cp -- '$(filter %.raw,$^)' '$@.tmp'
- ./osi-mk --edit $(addprefix --module=,$(filter osi-mk.d/%.sh,$^)) '$@.tmp'
+ ./osi-mk \
+ --edit='$(filter %.raw,$^)' \
+ $(addprefix --module=,$(filter osi-mk.d/%.sh,$^)) \
+ '$@.tmp'
./osi-run '$@.tmp' <<-'EOF'
#!/usr/bin/env bash
set -ex
@@ -73,9 +75,8 @@ ${WORKDIR}/build-232/build.raw: | ${WORKDIR}/systemd.git
${WORKDIR}/build-232/build.raw:
rm -f -- '$@' '$@.tmp'
mkdir -p -- '$(@D)'
- cp -- '$(filter %.raw,$^)' '$@.tmp'
./osi-mk \
- --edit \
+ --edit='$(filter %.raw,$^)' \
$(addprefix --module=,$(filter osi-mk.d/%.sh,$^)) \
--directory='${WORKDIR}/systemd.git:/home/testuser/packages/srcdest/systemd' \
--directory='abs/systemd-232:/home/testuser/packages/abs/systemd' \
@@ -100,9 +101,8 @@ ${WORKDIR}/build-$(COMMIT)/build.raw: | ${WORKDIR}/systemd.git
${WORKDIR}/build-$(COMMIT)/build.raw: | ${WORKDIR}/.COMMIT.mk
rm -f -- '$@' '$@.tmp'
mkdir -p -- '$(@D)'
- cp -- '$(filter %.raw,$^)' '$@.tmp'
./osi-mk \
- --edit \
+ --edit='$(filter %.raw,$^)' \
$(addprefix --module=,$(filter osi-mk.d/%.sh,$^)) \
--directory='${WORKDIR}/systemd.git:/home/testuser/packages/srcdest/systemd' \
--directory='abs/systemd:/home/testuser/packages/abs/systemd' \