From 75843344628e426b1265152faa19bb72f018eb6f Mon Sep 17 00:00:00 2001 From: Marcin Krol Date: Fri, 26 Sep 2014 17:32:57 +0000 Subject: [PATCH] - auto tagging is history, support pkgrevs --- builder.sh | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 63 insertions(+), 4 deletions(-) diff --git a/builder.sh b/builder.sh index 520f307..d421351 100755 --- a/builder.sh +++ b/builder.sh @@ -68,7 +68,7 @@ ALWAYS_CVSUP=${ALWAYS_CVSUP:-"yes"} USEDIGEST= # user agent when fetching files -USER_AGENT="PLD/Builder($VERSION)" +USER_AGENT="TLD/Builder($VERSION)" # It can be used i.e. in log file naming. # See LOGFILE example. @@ -119,6 +119,9 @@ PARALLEL_DOWNLOADS=10 WGET_RETRIES=${MAX_WGET_RETRIES:-0} +# rsync repository with git refs of packages +PKGREVS_URL="http://pkgrevs.tld-linux.org" + # TLD git/df config TLD_GIT_SERVER="git://git.tld-linux.org" TLD_GIT_PUSH="git@git.tld-linux.org" @@ -317,6 +320,7 @@ Usage: builder [--all-branches] [-D|--debug] [-V|--version] [--short-version] [ [{-Tp|--tag-prefix} ] [{-tt|--test-tag}] [-nu|--no-urls] [-v|--verbose] [--opts ] [--short-circuit] [--show-bconds] [--with/--without ] [--define ] +[--git-pld|--git-tld] [--pkgrev] [.spec][:tag] -4 - force IPv4 when transferring files @@ -462,6 +466,8 @@ Usage: builder [--all-branches] [-D|--debug] [-V|--version] [--short-version] [ --git-pld - force use of PLD git and distfiles --git-tld - force use of TLD git and distfiles (note: it will fall back to PLD git/df if package doesn't exist in TLD git) +--pkgrev - write git revision of package being built into rsync repo + (note: only official TLD source builders are allowed to do so) " } @@ -835,8 +841,14 @@ Exit_error() { echo >&2 "Error: problem with remote (${2})" exit 13 ;; "err_no_checkut" ) - echo >&2 "Error: cannot checkout $2" + echo >&2 "Error: cannot checkout ${2}" exit 14 ;; + "err_pkgrev_set" ) + echo >&2 "Error: failed to set package revision for tag ${2}" + exit 15 ;; + "err_pkgrev_get" ) + echo >&2 "Error: failed to get package revision for tag ${2}" + exit 16 ;; "err_not_implemented" ) remove_build_requires echo >&2 "Error: functionality not yet imlemented" @@ -995,6 +1007,8 @@ get_spec() { fi if [ -n "$CVSTAG" ]; then + local _rev=$(get_pkgrev "$CVSTAG") + echo "$_rev" | grep -q -E "^ERROR$" || CVSTAG="$_rev" if git rev-parse --verify -q "$CVSTAG"; then git checkout "$CVSTAG" -- elif git rev-parse --verify -q "refs/remotes/${REMOTE_PLD}/$CVSTAG"; then @@ -1469,6 +1483,36 @@ tag_files() { fi } +get_pkgrev() { + [ -z "$1" ] && return 1 + local _tmp=$(mktemp /tmp/.builder-XXXX) + rm $_tmp 2>/dev/null + $GETURI $OUTFILEOPT $_tmp $PKGREVS_URL/get/$1 1>/dev/null 2>&1 || Exit_error err_pkgrev_get "$1" + local result=$(cat $_tmp) + rm $_tmp 2>/dev/null + echo -n "$result" +} + +set_pkgrev() { + local _tag + if [ "$TAG_VERSION" = "yes" ]; then + _tag=`make_tagver` + fi + if [ -n "$TAG" ]; then + _tag="$TAG" + fi + echo "Writing git revision for tag $_tag" + local _tmp=$(mktemp /tmp/.builder-XXXX) + rm $_tmp 2>/dev/null + local _rev=$(git rev-parse HEAD) + $GETURI $OUTFILEOPT $_tmp $PKGREVS_URL/set/$_rev/$_tag 1>/dev/null 2>&1 || Exit_error err_pkgrev_get "$1" + local result=$(cat $_tmp) + rm $_tmp 2>/dev/null + echo "$result" | grep -q -E "^OK$" && return 0 + echo "$result" | grep -q -E "^EXISTS$" && Exit_error err_tag_exists "$_tag" + Exit_error err_pkgrev_set +} + branch_files() { TAG=$1 echo "Git branch: $TAG" @@ -2441,6 +2485,9 @@ while [ $# -gt 0 ]; do DISTFILES_SERVER=${TLD_DISTFILES_SERVER} ATTICDISTFILES_SERVER=${TLD_ATTICDISTFILES_SERVER} ;; + --pkgrev) + COMMAND="set_pkgrev" + shift;; -*) Exit_error err_invalid_cmdline "$1" ;; @@ -2459,7 +2506,7 @@ done # Check if given package exists in TLD git if ! git ls-remote --heads ${GIT_SERVER}/${PACKAGES_DIR}/${ASSUMED_NAME} 1>/dev/null 2>&1; then - # Nope, we don't have it in TLD, switch for PLD repositories + # Nope, we don't have it in TLD, switch to PLD repositories GIT_SERVER=${PLD_GIT_SERVER} GIT_PUSH=${PLD_GIT_PUSH} PACKAGES_DIR=${PLD_PACKAGES_DIR} @@ -2578,7 +2625,8 @@ case "$COMMAND" in # ./builder -bs test.spec -r AC-branch -Tp auto-ac- -tt if [ -n "$TEST_TAG" ]; then - local TAGVER=`make_tagver` + local TAGVER=` + make_tagver` tag_exist $TAGVER || [ $TAGVER = $CVSTAG ] || Exit_error err_tag_exists $TAGVER # check also tags created in CVS local TAGVER_CVS=$(echo $TAGVER | tr '[.@]' '[_#]') @@ -2783,6 +2831,17 @@ case "$COMMAND" in "version" ) echo "$VERSIONSTRING" ;; + "set_pkgrev" ) + init_builder + if [ -z "$SPECFILE" ]; then + Exit_error err_no_spec_in_cmdl + fi + get_spec > /dev/null + parse_spec + set_bconds_values + display_bconds + set_pkgrev + ;; esac if [ -f "`pwd`/.${SPECFILE}_INSTALLED_PACKAGES" -a "$REMOVE_BUILD_REQUIRES" != "" ]; then rm "`pwd`/.${SPECFILE}_INSTALLED_PACKAGES" -- 2.37.3