summaryrefslogtreecommitdiff
path: root/script/install_dir.sh
blob: a476ad0777024ef8bd6f513e0d82e4084dd67d23 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
install_dir() {
    mode="$1"
    owner="$2"
    group="$3"
    path="$4"

    if [ "$DRY" = 'YES' ]; then
        before_mode_stat="$(stat -f '%p' "$path" 2>/dev/null || echo '????')"
        before_mode_prefix="${before_mode_stat%????}"
        before_mode="${before_mode_stat#"$before_mode_prefix"}"
        before_mode_user_group="$(stat -f '%Su %Sg' "$path" 2>/dev/null || echo '???? ????')"

        before_cmp="$before_mode $before_mode_user_group"
        after_cmp="$mode $owner $group"

        before="$before_cmp $path"
        after="$after_cmp $path"
    else
        before="$(ls -dl "$path" 2>&1 || true)"
        install -m "$mode" -o "$owner" -g "$group" -d "$path"
        after="$(ls -dl "$path" 2>&1)"

        before_cmp="$(echo "$before" | awk '{ print $1 " " $2 " " $3 " " $4 }')"
        after_cmp="$(echo  "$after"  | awk '{ print $1 " " $2 " " $3 " " $4 }')"
    fi

    changed=''
    if [ "$before_cmp" != "$after_cmp" ]; then
        changed='YES'
    fi

    if [ "$changed" = 'YES' ]; then
        echo '==='
        echo "$before"
        echo "$after"
    fi
}