diff options
Diffstat (limited to 'bin/rcup.in')
-rwxr-xr-x | bin/rcup.in | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/bin/rcup.in b/bin/rcup.in index bdae664..de11751 100755 --- a/bin/rcup.in +++ b/bin/rcup.in @@ -130,6 +130,18 @@ is_identical() { diff -c "$1" "$2" > /dev/null 2>&1 } +is_linked() { + local src="$1" + local dest="$2" + + if [ -h "$dest" ]; then + local link_dest=$(readlink $dest) + [ "$link_dest" == "$src" ] + else + return 1 + fi +} + handle_dir() { local dest="$1" @@ -148,7 +160,12 @@ handle_file() { if [ "$generate" -ne 1 -a -e "$dest" ]; then if is_identical "$src" "$dest"; then - $VERBOSE "identical $dest" + if [ "x$sigil" != "xX" ] && ! is_linked "$src" "$dest"; then + $VERBOSE "replacing identical but unlinked $dest" + replace_file "$src" "$dest" "$sigil" + else + $VERBOSE "identical $dest" + fi elif [ $REPLACE_ALL -eq 1 ]; then replace_file "$src" "$dest" "$sigil" else |