summaryrefslogtreecommitdiff
path: root/vsvs-extract
blob: f5c4817c2970bd45e16cba511c1e95d0962d0a04 (plain)
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
#!/bin/bash
after () { test -z "${2##*$1*}" && echo -n "${2#*$1}"; }
res="$(vsvs-locate "$2" || exit 1)"
path="${res%% *}"
vsvspath=$(after " " "$res")
if test -f "$path"
then
    lockfile="$base/proc/$proc/lock/"
    if test "${path::1}" == "."
    then lockfile="$lockfile$base$path"
    else lockfile="$lockfile$path"
    fi
    mkdir -p -- "${lockfile%/*}"
    echo $proc > $lockfile
    lockpath="$path.lock"
    ln $lockfile $lockpath || exit 1 # Error, cannot lock
    data="$(cat $path)"
    rm $lockpath
    rm $lockfile
    until test -z "$vsvspath"
    do
        data="$(echo -n "$data" | vsvs-parse "test \"\$key\" == \"${vsvspath%%/*}\" && echo \"\$value\" && exit 0")"
        vsvspath=$(after / "$vsvspath")
    done
    echo -n "$data" | vsvs-parse "$1"
else
    for key in `ls -a $path`
    do
        test "$key" == "." || test "$key" == ".." && continue
        if test -f "$path/$key"
        then value=$(cat "$path/$key")
        else
            savedpath=$(pwd)
            cd "$path/$key"
            value=$(vsvs-archive)
            cd "$savedpath"
        fi
        eval "$1"
    done
fi