UPSTREAM_REMOTE=origin

source ~/.config/linux-stable-queue

# Get base version, i.e. the Linus stable release that a version is based on
base_version() {
    local ver
    ver="${1%-rc*}"
    case "$ver" in
	2.6.*.* | [3-9].*.* | ??.*.*)
	    ver="${ver%.*}"
	    ;;
    esac
    echo "$ver"
}

add_update() {
    local base update
    base="$(base_version "$1")"
    update="${1#$base.}"
    if [ "$update" = "$1" ]; then
	update=0
    fi
    update="$((update + $2))"
    if [ $update = 0 ]; then
	echo "$base"
    else
	echo "$base.$update"
    fi
}

# Get last stable update version (or Linus stable release, for .1)
last_update() {
    add_update "$1" -1
}

# Get next stable update version
next_update() {
    add_update "$1" 1
}

_validate_base_ver() {
    for base_ver in $STABLE_BASE_VERSIONS; do
	if [ "$1" = "$base_ver" ]; then
	    return 0
	fi
    done
    echo >&2 "E: Invalid base version: $1"
    return 1
}

# Get patch queue directory for a given base version
get_queue() {
    _validate_base_ver "$1" || return 1
    local queue="$STABLE_QUEUES/queue-$1"
    mkdir -p "$queue"
    echo "$queue"
}

# Get git repo directory for a given base version
get_git() {
    _validate_base_ver "$1" || return 1
    local var_name
    var_name=STABLE_GIT_${1//./_}
    eval echo \$$var_name
}
