diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2018-08-14 16:04:07 -0400 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2018-08-14 16:04:07 -0400 |
commit | 164904cdae966842ae9411af28fbd4c5bd9de9b7 (patch) | |
tree | 6e744c76af92c48e0d735d2e7001eb6fcd51ee09 | |
parent | ee05d5c7ccec1da2d71df5848cb3e16d31a2f9a5 (diff) |
osi-mk: Edit the fsid when editing a copy
-rwxr-xr-x | osi-mk | 26 | ||||
-rwxr-xr-x | runtests | 12 |
2 files changed, 23 insertions, 15 deletions
@@ -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" @@ -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' \ |