|
|
# --- SDE-COPYRIGHT-NOTE-BEGIN --- # This copyright note is auto-generated by ./scripts/Create-CopyPatch. # # Filename: lib/overlay/overlay-functions.in # Copyright (C) 2007 - 2012 The OpenSDE Project # # More information can be found in the files COPYING and README. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. A copy of the # GNU General Public License can be found in the file COPYING. # --- SDE-COPYRIGHT-NOTE-END ---
# returns the type of overlay based on the extension of the overlay file # overlay_get_type() { local ext="${1##*.}"
case "$ext" in sh|exec) echo "exec" ;; txt|patch|ln|bin|rm) echo "$ext" ;; *) # and skip anything else ;; esac }
# returns the name of a target file based on the name overlay file # overlay_get_filename() { local filename="${1##*/}"; filename="${filename%.*}"
# rock_substitute will add a leading / for most translations echo "${filename}" | tr '_%' '/_' | rock_substitute | sed -e 's,^/,,' }
# apply an overlay dir overlay_apply() { local overlaydir= rootfs= local file= source= target= xtarget= ext= local type= mode= ref= targetdir= local patchopt="-p1 --no-backup-if-mismatch -N" local overwrite=yes echo_status=echo_status
while [ $# -gt 0 ]; do case "$1" in -n) overwrite= ;; -q) echo_status=echo ;; --) shift; break ;; -*) echo_warning "overlay_apply: $1: invalid option." ;; *) break ;; esac shift done
overlaydir="$1" rootfs="${2:-$root}"
for file in "$overlaydir"/*; do # only consider known overlay types type=$( overlay_get_type "$file" ) [ -n "$type" ] || continue
# full filename of the target file, and it's directory target=$( overlay_get_filename "$file" ) xtarget="$rootfs/$target" targetdir="${xtarget%/*}"
if [ -L "$xtarget" -o -e "$xtarget" ]; then if [ "$type" != rm -a "$overwrite" != yes ]; then $echo_status "skipping $target ($type)" continue fi
if [ "$type" = patch ]; then : elif [ ! -d "$xtarget/" ]; then rm -f "$xtarget" else rm -rf "$xtarget" fi fi
# final adjustments based on the type case "$type" in exec) mode=0755 ;; *) mode=0644 ;; esac
[ "$type" = "patch" ] || mkdir -p "$targetdir"
# and finally inject the file case "$type" in bin|exec|txt) $echo_status "injecting $target ($type)" if [ "$type" = bin ]; then cp "$file" "$xtarget" else cat "$file" | rock_substitute > "$xtarget" fi chmod $mode "$xtarget" ;; ln) ref=$( cat "$file" | rock_substitute ) $echo_status "injecting $target -> $ref" ln -snf "$ref" "$xtarget" ;; rm) $echo_status "removing $target" ;; patch) $echo_status "overlay: patching $target" rock_substitute "$file" | patch $patchopt "$xtarget" ;; esac
# flist hackery... needed? case "$type" in patch|rm) ;; *) add_flist "$xtarget" ;; esac done }
|