-# Workaround -i, --include taking 2 arguments
-set -- "${@/--include/++include}"
-
-# This prevents any long argument ending with "-i"
-# -i, like --opt-i but I think we can just prevent that
-set -- "${@/%-i/++include}"
-
-TEMP=$(unset POSIXLY_CORRECT; getopt \
- -o "a:m:o:d:I:k:c:L:fvqlHhMN" \
- --long kver: \
- --long add: \
- --long force-add: \
- --long add-drivers: \
- --long omit-drivers: \
- --long modules: \
- --long omit: \
- --long drivers: \
- --long filesystems: \
- --long install: \
- --long fwdir: \
- --long libdirs: \
- --long fscks: \
- --long add-fstab: \
- --long mount: \
- --long device: \
- --long nofscks: \
- --long ro-mnt \
- --long kmoddir: \
- --long conf: \
- --long confdir: \
- --long tmpdir: \
- --long stdlog: \
- --long compress: \
- --long prefix: \
- --long force \
- --long kernel-only \
- --long no-kernel \
- --long print-cmdline \
- --long kernel-cmdline: \
- --long strip \
- --long nostrip \
- --long prelink \
- --long noprelink \
- --long hardlink \
- --long nohardlink \
- --long noprefix \
- --long mdadmconf \
- --long nomdadmconf \
- --long lvmconf \
- --long nolvmconf \
- --long debug \
- --long profile \
- --long sshkey: \
- --long verbose \
- --long quiet \
- --long local \
- --long hostonly \
- --long host-only \
- --long no-hostonly \
- --long no-host-only \
- --long persistent-policy: \
- --long fstab \
- --long help \
- --long bzip2 \
- --long lzma \
- --long xz \
- --long no-compress \
- --long gzip \
- --long list-modules \
- --long show-modules \
- --long keep \
- --long printsize \
- --long regenerate-all \
- --long noimageifnotneeded \
- --long early-microcode \
- --long no-early-microcode \
- -- "$@")
-
-if (( $? != 0 )); then
- usage
- exit 1
+rearrange_params "$@"
+eval set -- "$TEMP"
+
+# parse command line args to check if '--rebuild' option is present
+unset append_args_l
+unset rebuild_file
+while :
+do
+ if [ "$1" == "--" ]; then
+ shift; break
+ fi
+ if [ "$1" == "--rebuild" ]; then
+ append_args_l="yes"
+ rebuild_file=$2
+ if [ ! -e $rebuild_file ]; then
+ echo "Image file '$rebuild_file', for rebuild, does not exist!"
+ exit 1
+ fi
+ abs_rebuild_file=$(readlink -f "$rebuild_file") && rebuild_file="$abs_rebuild_file"
+ shift; continue
+ fi
+ shift
+done
+
+# get output file name and kernel version from command line arguments
+while (($# > 0)); do
+ case ${1%%=*} in
+ ++include)
+ shift 2;;
+ *)
+ if ! [[ ${outfile+x} ]]; then
+ outfile=$1
+ elif ! [[ ${kernel+x} ]]; then
+ kernel=$1
+ else
+ printf "\nUnknown arguments: %s\n\n" "$*" >&2
+ usage; exit 1;
+ fi
+ ;;
+ esac
+ shift
+done
+
+# extract input image file provided with rebuild option to get previous parameters, if any
+if [[ $append_args_l == "yes" ]]; then
+ unset rebuild_param
+
+ # determine resultant file
+ if ! [[ $outfile ]]; then
+ outfile=$rebuild_file
+ fi
+
+ if ! rebuild_param=$(lsinitrd $rebuild_file '*lib/dracut/build-parameter.txt'); then
+ echo "Image '$rebuild_file' has no rebuild information stored"
+ exit 1
+ fi
+
+ # prepend previous parameters to current command line args
+ if [[ $rebuild_param ]]; then
+ TEMP="$rebuild_param $TEMP"
+ eval set -- "$TEMP"
+ rearrange_params "$@"
+ fi
+
+ # clean the temporarily used scratch-pad directory
+ rm -rf $scratch_dir