summaryrefslogblamecommitdiffstats
path: root/resolvers.sh
blob: dc0af377003df6922cbc2556051824fd84b2b6a9 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
















                                                            

                                  






                                         




                                            




                                                  
                  



                         
              

































                                                            
                  



                         
              


      
##
# get_commit <version>
#
# 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 <version>
#
# 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
}