diff options
Diffstat (limited to 'script')
| -rw-r--r-- | script/delete_dir.sh | 13 | ||||
| -rw-r--r-- | script/delete_file.sh | 14 | ||||
| -rw-r--r-- | script/install_dir.sh | 37 | ||||
| -rw-r--r-- | script/install_file.sh | 55 |
4 files changed, 119 insertions, 0 deletions
diff --git a/script/delete_dir.sh b/script/delete_dir.sh new file mode 100644 index 0000000..93df582 --- /dev/null +++ b/script/delete_dir.sh @@ -0,0 +1,13 @@ +delete_dir() { + path="$1" + + if [ "$DELETE_OBSOLETE" = 'YES' ]; then + if [ -e "$path" ]; then + echo '===' + echo "rmdir \"$path\"" + if [ "$DRY" != 'YES' ]; then + rmdir "$path" + fi + fi + fi +} diff --git a/script/delete_file.sh b/script/delete_file.sh new file mode 100644 index 0000000..ebcc5b0 --- /dev/null +++ b/script/delete_file.sh @@ -0,0 +1,14 @@ +delete_file() { + path="$1" + + if [ "$DELETE_OBSOLETE" = 'YES' ]; then + if [ -e "$path" -o -e "$path.old" ]; then + echo '===' + if [ -e "$path" ]; then echo "rm -f \"$path\""; fi + if [ -e "$path.old" ]; then echo "rm -f \"$path.old\""; fi + if [ "$DRY" != 'YES' ]; then + rm -f "$path" "$path.old" + fi + fi + fi +} diff --git a/script/install_dir.sh b/script/install_dir.sh new file mode 100644 index 0000000..a476ad0 --- /dev/null +++ b/script/install_dir.sh @@ -0,0 +1,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 +} diff --git a/script/install_file.sh b/script/install_file.sh new file mode 100644 index 0000000..71ff624 --- /dev/null +++ b/script/install_file.sh @@ -0,0 +1,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 +} |
