lib/pvl/apply/link.sh
author Tero Marttila <tero.marttila@aalto.fi>
Thu, 26 Feb 2015 21:38:09 +0200
changeset 627 a81206440be2
permissions -rw-r--r--
(none)
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     1
## Compare symlink to target:
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     2
#
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     3
#   link_check $lnk $tgt && do_link $lnk $tgt || ...
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     4
#
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     5
# Tests if the symlink exists, and the target matches.
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     6
# Fails if the symlink needs updating.
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     7
function link_check {
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     8
    local out="$1"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     9
    local lnk="$2"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    10
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    11
    [ -e "$out" ] || return 1
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    12
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    13
    [ -L "$out" ] || fail "$out: is not a link"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    14
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    15
    [ "$(readlink "$out")" == "$lnk" ] || return 1
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    16
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    17
    return 0
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    18
}
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    19
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    20
## Update symlink to point to target:
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    21
#
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    22
#   do_link $lnk $tgt
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    23
#
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    24
function link_apply {
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    25
    local out="$1"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    26
    local lnk="$2"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    27
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    28
    cmd ln -srf "$lnk" "$out"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    29
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    30
    [ -e "$out" ] || fail "$out: given target does not exist: $lnk"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    31
}
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    32
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    33
# Create symlink if not exists.
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    34
function apply_link {
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    35
    local out="$1"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    36
    local lnk="$2"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    37
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    38
    if link_check "$out" "$lnk"; then
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    39
        log_skip "$out: not changed: $lnk"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    40
    elif [ "$APPLY" = 0 ]; then
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    41
        log_noop "$out: skip link: $tgt"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    42
    else
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    43
        log_apply "$out: $tgt..."
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    44
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    45
        link_apply "$out" "$lnk"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    46
    fi
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    47
}