## # get_commit # # Resolve a revision to a commit ID, exit via fatal error if # resolution cannot take place. ## function get_commit { # local repository # if [[ "$remote" == "" ]]; then if [[ "$1" == "HEAD" ]]; then cat "$path/HEAD" elif [[ "$1" == "BASE" ]]; then cat ".systr/BASE" elif [[ "$1" == "TRAC" ]]; then read trac <.systr/TRAC get_commit "$trac" elif [[ "$1" == "NULL" ]]; then echo "NULL" elif [ -f "$path/refs/$1" ]; then cat "$path/refs/$1" elif [[ ${1:0:5} == "refs/" ]]; then if [ -f "$path/$1" ]; then cat "$path/$1" fi elif [ -f "$path/$1/.commit.systr" ]; then echo "$1" else echo "Error: $1 not a revision" >&2 exit 1 fi # remote repository # else exit 1 fi } ## # get_symref # # Resolve a revision to a symbolic reference, exit via fatal # error if resolution cannot take place. ## function get_symref { # local repository # if [[ "$remote" == "" ]]; then if [[ "$1" == "HEAD" ]]; then echo "HEAD" elif [[ "$1" == "BASE" ]]; then echo "BASE" elif [[ "$1" == "TRAC" ]]; then cat ".systr/TRAC" elif [[ "$1" == "NULL" ]]; then echo "NULL" elif [ -f "$path/refs/$1" ]; then echo "refs/$1" elif [ -f "$path/$1/.commit.systr" ]; then echo "$1" else echo "Error: $1 not a revision" >&2 exit 1 fi # remote repository # else exit 1 fi }