summaryrefslogtreecommitdiff
path: root/script/install_file.sh
blob: 71ff6244d197ca961b91055878eb694e7327da5b (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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
install_file() {
    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"

        old="$path"
        new="$REPO$path"
    else
        before="$(ls -dl "$path" 2>&1 || true)"
        install -b -m "$mode" -o "$owner" -g "$group" "$REPO$path" "$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 }')"

        old="$path.old"
        new="$path"
    fi

    changed=''
    diffed=''
    if [ "$before_cmp" != "$after_cmp" ]; then
        changed='YES'
    fi
    if [ -f "$old" ]; then
        if ! diff "$old" "$new" >/dev/null 2>/dev/null; then
            changed='YES'
            diffed='YES'
        fi
    fi

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

        if [ "$diffed" = 'YES' ]; then
            echo '---'
            diff "$old" "$new" || true
        fi
    fi
}