--- subversion-2.eclass 2008-02-19 16:34:15.000000000 -0500 +++ subversion-3.eclass 2008-02-20 11:07:57.000000000 -0500 @@ -75,6 +75,14 @@ # : ${ESVN_REPO_URI:=} +# @ECLASS-VARIABLE: ESVN_REVISION +# @DESCRIPTION: +# user configurable revision to use from the repo +# +# useful for live svn or trunk svn ebuilds to allow pegging to +# a specific revision +: ${ESVN_REVISION:=} + # @ECLASS-VARIABLE: ESVN_PROJECT # @DESCRIPTION: @@ -143,9 +151,14 @@ # function subversion_fetch() { - local repo_uri="$(subversion__get_repository_uri "${1}")" + local repo_uri="$(subversion__get_repository_uri "${1:-${ESVN_REPO_URI}}")" + local revision="$(subversion__get_peg_revision "${1:-${ESVN_REPO_URI}}")" local S_dest="${2}" + if [[ -n "${ESVN_REVISION}" ]]; then + revision="${ESVN_REVISION}" + fi + # check for the protocol local protocol="${repo_uri%%:*}" @@ -180,6 +193,15 @@ local wc_path="$(subversion__get_wc_path "${repo_uri}")" local options="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion" + if [[ -n "${revision}" ]]; then + options="${options} -r ${revision}" + fi + + if [[ "${ESVN_OPTIONS}" = *-r* ]]; then + ewarn "\${ESVN_OPTIONS} contains -r, this usage is unsupported. Please" + ewarn "see \${ESVN_REPO_URI}" + fi + debug-print "${FUNCNAME}: wc_path = \"${wc_path}\"" debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\"" debug-print "${FUNCNAME}: options = \"${options}\"" @@ -187,7 +209,7 @@ if [[ ! -d "${wc_path}/.svn" ]]; then # first check out einfo "subversion check out start -->" - einfo " repository: ${repo_uri}" + einfo " repository: ${repo_uri}${revision:+@}${revision}" debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}" @@ -198,10 +220,10 @@ else subversion_wc_info "${repo_uri}" || die "${ESVN}: unknown problem occurred while accessing working copy." - if [ "${ESVN_WC_URL}" != "$(subversion__get_repository_uri "${repo_uri}" 1)" ]; then + if [ "${ESVN_WC_URL}" != "$(subversion__get_repository_uri "${repo_uri}")" ]; then einfo "subversion switch start -->" einfo " old repository: ${ESVN_WC_URL}" - einfo " new repository: ${repo_uri}" + einfo " new repository: ${repo_uri}${revision:+@}${revision}" debug-print "${FUNCNAME}: ${ESVN_SWITCH_CMD} ${options}" @@ -210,7 +232,7 @@ else # update working copy einfo "subversion update start -->" - einfo " repository: ${repo_uri}" + einfo " repository: ${repo_uri}${revision:+@}${revision}" debug-print "${FUNCNAME}: ${ESVN_UPDATE_CMD} ${options}" @@ -297,7 +319,7 @@ # default src-Unpack. fetches and bootstraps function subversion_src_unpack() { - subversion_fetch || die "${ESVN}: unknown problem occurred in subversion_fetch." + subversion_fetch || die "${ESVN}: unknown problem occurred in subversion_fetch." subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap." } @@ -352,8 +374,6 @@ ## -- subversion__get_repository_uri() --------------------------------------- # # # @param $1 - a repository URI. -# @param $2 - a peg revision is deleted from a return value if this is -# specified. # function subversion__get_repository_uri() { @@ -361,7 +381,6 @@ local remove_peg_revision="${2}" debug-print "${FUNCNAME}: repo_uri = ${repo_uri}" - debug-print "${FUNCNAME}: remove_peg_revision = ${remove_peg_revision}" if [[ -z "${repo_uri}" ]]; then die "${ESVN}: ESVN_REPO_URI (or specified URI) is empty." @@ -372,14 +391,7 @@ repo_uri="${repo_uri%/}" fi - if [[ -n "${remove_peg_revision}" ]]; then - if subversion__has_peg_revision "${repo_uri}"; then - repo_uri="${repo_uri%@*}" - - debug-print "${FUNCNAME}: repo_uri has a peg revision" - debug-print "${FUNCNAME}: repo_uri = ${repo_uri}" - fi - fi + repo_uri="${repo_uri%@*}" echo "${repo_uri}" @@ -392,7 +404,7 @@ # function subversion__get_wc_path() { - local repo_uri="$(subversion__get_repository_uri "${1}" 1)" + local repo_uri="$(subversion__get_repository_uri "${1}")" debug-print "${FUNCNAME}: repo_uri = ${repo_uri}" @@ -401,11 +413,11 @@ } -## -- subversion__has_peg_revision() ----------------------------------------- # +## -- subversion__get_peg_revision() ----------------------------------------- # # # @param $1 - a repository URI. # -function subversion__has_peg_revision() { +function subversion__get_peg_revision() { local repo_uri="${1}" @@ -414,39 +426,11 @@ # repo_uri has peg revision ? if [[ "${repo_uri}" != *@* ]]; then debug-print "${FUNCNAME}: repo_uri does not have a peg revision." - return 1 fi local peg_rev="${repo_uri##*@}" - case "$(subversion__to_upper_case "${peg_rev}")" in - [[:digit:]]*) - # NUMBER - ;; - HEAD|BASE|COMMITED|PREV) - ;; - {[^}]*}) - # DATE - ;; - *) - debug-print "${FUNCNAME}: repo_uri does not have a peg revision." - return 1 - ;; - esac - debug-print "${FUNCNAME}: peg_rev = ${peg_rev}" - return 0 - -} - - -## -- subversion__to_upper_case() ----------------------------------------- # -# -# @param $@ - the strings to upper case. -# -function subversion__to_upper_case() { - - echo "${@}" | tr "[:lower:]" "[:upper:]" - + echo "${peg_rev}" }