123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- #!/bin/bash
-
- _deploy_item() {
- #
- # Deploy item and make it look like wanted
- #
- # usage: _deploy_item src dst [mode]
- #
- # Both src and dst must be names of actual items[1],
- # whereas dst must not exist. On update, dst is
- # usually to be replaced but that is uninstall's
- # job!
- #
- # [1] Ie. src=foo and dst=/foo/bar does *always*
- # mean that foo will become 'bar'. This is
- # different than traditional `cp` behavior,
- # when this depends if 'bar' already exists
- # as a directory.
- #
- # If mode is omitted or empty, MKIT_DEFAULT_MODE is
- # used instead.
- #
- # Directories are copied recursively, and mode is
- # applied only to files.
- #
- local src="$1"
- local dst="$2"
- local mode="${3:-$MKIT_DEFAULT_MODE}"
- if test -d "$src";
- then
- _maybe mkdir -vp "$(dirname "$dst")"
- _maybe cp -Tvr "$src" "$dst"
- find "$dst" -type f \
- | while read chmod_item;
- do
- _maybe chmod "$mode" "$chmod_item"
- done
- else
- _maybe install -DTvm "$mode" "$src" "$dst"
- fi
- }
-
- _get_dst() {
- #
- # Find out target path for src file $2 of group $1
- #
- local grp=$1
- local src=$2
- echo "$(_get_root "$grp")/$(ini 1value "files:$grp:$src")"
- }
-
- _get_root() {
- #
- # Find out target rooot for group $1
- #
- local grp="$1"
- local root=$(ini 1value "roots:$grp")
- local destdir=$(ini 1value ENV:DESTDIR)
- destdir=${destdir%/}
- case $destdir:$root in
- *:) die "missing in config.ini: roots:$grp" ;;
- :*) echo "$root" ;;
- *:*) echo "$destdir/$root" ;;
- esac
- }
-
- _maybe() {
- #
- # Call the deploy command $1 $@ unless in dry mode
- #
- debug "$@"
- local cmd="$1"; shift
- $MKIT_DRY && return
- case "$cmd" in
- cp|rm|rmdir|chmod|mkdir) $cmd "$@" ;;
- install) command -p install "$@" ;;
- *) die "bad command called";;
- esac
- }
-
- install() {
- #
- # Install product
- #
- local dst group mode src
- ini values "lists:group" \
- | while read group;
- do
- mode=$(ini 1value "modes:$group")
- ini lskeys "files:$group" \
- | while read src;
- do
- dst=$(_get_dst "$group" "$src")
- _deploy_item "$src" "$dst" "$mode"
- done
- done
- test -f "$MKIT_LOCAL/autoclean" && clean
- true
- }
-
- uninstall() {
- #
- # Uninstall product
- #
- local dst group src
- ini values "lists:group" \
- | while read group;
- do
- ini lskeys "files:$group" \
- | while read src;
- do
- dst=$(_get_dst "$group" "$src")
- _maybe rm -vrf "$dst"
- done
- done
- }
|