tbetter parses for bind-hooks - tomb - the crypto undertaker
 (HTM) git clone git://parazyd.org/tomb.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 828579e10d7660155b6656f499e94119c9d8f6d9
 (DIR) parent 9097a6963151b904aaa47d1d33cc152fff707d12
 (HTM) Author: Jaromil <jaromil@dyne.org>
       Date:   Fri, 14 Nov 2014 17:42:49 +0100
       
       better parses for bind-hooks
       
       rw global vars VERSION etc facilitate re-source in test environment
       
       Diffstat:
         M tomb                                |      23 +++++++++++++++++------
       
       1 file changed, 17 insertions(+), 6 deletions(-)
       ---
 (DIR) diff --git a/tomb b/tomb
       t@@ -39,9 +39,9 @@
        
        # {{{ Global variables
        
       -typeset -r VERSION="1.7"
       -typeset -r DATE="Oct/2014"
       -typeset -r TOMBEXEC=$0
       +typeset VERSION="1.7"
       +typeset DATE="Oct/2014"
       +typeset TOMBEXEC=$0
        
        # Tomb is using some global variables set by the shell:
        # TMPPREFIX, UID, GID, PATH, TTY, USERNAME
       t@@ -1422,7 +1422,6 @@ forge_key() {
        
        lock_tomb_with_key() {
            local tombpath="$1"      # First argument is the path to the tomb
       -    local tombkey="$2"       # Second argument is the path to the key file
        
            [[ -n $tombpath ]] || {
                _warning "No tomb specified for locking."
       t@@ -1772,14 +1771,26 @@ exec_safe_bind_hooks() {
                _warning "Cannot exec bind hooks without a mounted tomb." 
                return 1 }
        
       -    [[ ! -r "$mnt/bind-hooks" ]] && {
       +    [[ -r "$mnt/bind-hooks" ]] || {
                _verbose "bind-hooks not found in ::1 mount point::" $mnt
                return 1 }
        
            typeset -Al maps        # Maps of files and directories to mount
            typeset -al mounted     # Track already mounted files and directories
        
       -    maps=($(<"$mnt/bind-hooks"))
       +    # better parsing for bind hooks checks for two separated words on
       +    # each line, using zsh word separator array subscript
       +    _bindhooks="`cat $mnt/bind-hooks`"
       +    for h in ${(f)_bindhooks}; do
       +        s="${h[(w)1]}"
       +        d="${h[(w)2]}"
       +        [[ "$s" = "" ]] && { _warning "bind-hooks file is broken"; return 1 }
       +        [[ "$d" = "" ]] && { _warning "bind-hooks file is broken"; return 1 }
       +        maps+=($s $d)
       +        _verbose "bind-hook found: $s -> $d"
       +    done
       +    unset _bindhooks
       +
            for dir in ${(k)maps}; do
                [[ "${dir[1]}" == "/" || "${dir[1,2]}" == ".." ]] && {
                    _warning "bind-hooks map format: local/to/tomb local/to/\$HOME"