Add third argument to add_full_dir: strip_prefix. The strip_prefix will be stripped off from the destination path (path in the initramfs image) when adding files. Rationale: Make it easier to add rootfs overlay hooks when generating images. add_full_dir can be invoked in this way: add_full_dir /path/on/parent/rootfs-overlay * /path/on/parent/rootfs-overlay The above invocation will add all content of */path/on/parent/rootfs-overlay* into */* in the initramfs image. Signed-off-by: Erik Stromdahl <erik.stromdahl@gmail.com> --- functions | 9 +++++---- man/mkinitcpio.8.txt | 7 ++++++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/functions b/functions index 0c407e9..2325a86 100644 --- a/functions +++ b/functions @@ -423,8 +423,9 @@ add_full_dir() { # No parsing is performed and the contents of the directory is added as is. # $1: path to directory # $2: glob pattern to filter file additions (optional) + # $3: path prefix that will be stripped off from the image path (optional) - local f= filter=${2:-*} + local f= filter=${2:-*} strip_prefix=$3 if [[ -n $1 && -d $1 ]]; then add_dir "$1" @@ -432,13 +433,13 @@ add_full_dir() { for f in "$1"/*; do if [[ -L $f ]]; then if [[ $f = $filter ]]; then - add_symlink "$f" "$(readlink "$f")" + add_symlink "${f#$strip_prefix}" "$(readlink "$f")" fi elif [[ -d $f ]]; then - add_full_dir "$f" "$filter" + add_full_dir "$f" "$filter" "$strip_prefix" elif [[ -f $f ]]; then if [[ $f = $filter ]]; then - add_file "$f" + add_file "$f" "${f#$strip_prefix}" fi fi done diff --git a/man/mkinitcpio.8.txt b/man/mkinitcpio.8.txt index 5c3118e..931a167 100644 --- a/man/mkinitcpio.8.txt +++ b/man/mkinitcpio.8.txt @@ -139,7 +139,7 @@ functions exist to facilitate this. Adds a directory and its parents to the image. -*add_full_dir* 'directory' [ 'glob' ]:: +*add_full_dir* 'directory' [ 'glob' ] [ 'strip_prefix' ]:: Recursively adds a directory to the image by walking the given path and calling *add_file*, *add_dir*, and *add_symlink* accordingly. This function @@ -148,6 +148,11 @@ functions exist to facilitate this. If the 'glob' argument is passed, only files and symlinks matching this glob will be added. + If the 'strip_prefix' argument is passed, it will be used to strip the + destination path (path in the initramfs image) from the prefix specified by + the 'strip_prefix' argument. This can be useful when writing rootfs-overlay + hooks. + *add_symlink* 'path' [ 'link-target' ]:: Adds a symlink to the image at the specified `path`, optionally pointing to -- 2.13.0