X-Git-Url: http://git.pld-linux.org/?a=blobdiff_plain;f=builder.sh;h=d6595afaf2398daa7bea41b90834d01355964f20;hb=8cc8f5c0019f74c8fa342c17916a3be75f1dee56;hp=134c650ab54fa574a871c989ff5c8f863c421b9f;hpb=390d081dd5565adf10d8aafd2b0bf87528c3a69d;p=packages%2Frpm-build-tools.git diff --git a/builder.sh b/builder.sh old mode 100644 new mode 100755 index 134c650..d6595af --- a/builder.sh +++ b/builder.sh @@ -17,6 +17,7 @@ # 9 - Requested tag already exist # 10 - Refused to build fractional release # 100 - Unknown error (should not happen) +# 110 - Functions not yet implemented # Notes (todo/bugs): # - when Icon: field is present, -5 and -a5 doesn't work @@ -34,7 +35,7 @@ PROGRAM=${0##*/} APPDIR=$(d=$0; [ -L "$d" ] && d=$(readlink -f "$d"); dirname "$d") -RCSID='$Id$' r=${RCSID#* * } rev=${r%% *} +RCSID='$Id: builder,v 1.645 2011/02/13 17:54:10 glen Exp $' r=${RCSID#* * } rev=${r%% *} VERSION="v0.35/$rev" VERSIONSTRING="\ Build package utility from PLD Linux Packages repository @@ -54,7 +55,6 @@ QUIET="" CLEAN="" DEBUG="" NOURLS="" -NOCVS="" NOCVSSPEC="" NODIST="" NOINIT="" @@ -64,7 +64,6 @@ ADD5="" NO5="" ALWAYS_CVSUP=${ALWAYS_CVSUP:-"yes"} CVSROOT="" -GREEDSRC="" # use rpm 4.4.6+ digest format instead of comments if non-zero USEDIGEST= @@ -114,6 +113,9 @@ CVSIGNORE_DF="yes" CVS_RETRIES=${MAX_CVS_RETRIES:-1000} CVS_SERVER="cvs.pld-linux.org" CVSTAG="" +GIT_SERVER="git://github.com/draenog" +HEAD_DETACHED="" +DEPTH="" RES_FILE="" @@ -220,13 +222,6 @@ if [ -d $HOME/rpm/SOURCES ]; then exit 1 fi -# -# are we using cvs-nserver ? -# -CVS_NSERVER=0 -$CVS_COMMAND --version 2>&1 | grep -q 'CVS-nserver' -[ $? -eq 0 ] && CVS_NSERVER=1 - POLDEK_INDEX_DIR="$($RPM --eval %_rpmdir)/" POLDEK_CMD="$SU_SUDO /usr/bin/poldek --noask" @@ -254,11 +249,11 @@ usage() { echo "\ Usage: builder [-D|--debug] [-V|--version] [--short-version] [--as_anon] [-a|--add_cvs] [-b|-ba|--build] [-bb|--build-binary] [-bs|--build-source] [-bc] [-bi] [-bl] [-u|--try-upgrade] -[{-cf|--cvs-force}] [{-B|--branch} ] [{-d|--cvsroot} ] +[{-cf|--cvs-force}] [{-B|--branch} ] [{-d|--cvsroot} ] [--depth ] [-g|--get] [-h|--help] [--ftp] [--http] [{-l|--logtofile} ] [-m|--mr-proper] [-q|--quiet] [--date [-r ] [{-T|--tag ] [-Tvs|--tag-version-stable] [-Ts|--tag-stable] [-Tv|--tag-version] -[{-Tp|--tag-prefix} ] [{-tt|--test-tag}] [--use-greed-sources] +[{-Tp|--tag-prefix} ] [{-tt|--test-tag}] [-nu|--no-urls] [-v|--verbose] [--opts ] [--short-circuit] [--show-bconds] [--with/--without ] [--define ] [.spec][:cvstag] @@ -294,6 +289,8 @@ Usage: builder [-D|--debug] [-V|--version] [--short-version] [--as_anon] [-a|--a - setup \$CVSROOT, --define - define a macro with value , +--depth + - make shallow fetch --alt_kernel - same as --define 'alt_kernel ' --nodeps - rpm won't check any dependences @@ -304,7 +301,6 @@ Usage: builder [-D|--debug] [-V|--version] [--short-version] [--as_anon] [-a|--a --ftp, --http - use ftp or http protocol to access distfiles server -l , --logtofile - log all to file, --nc, --no-cvs - don't download sources from CVS, if source URL is given, -ncs, --no-cvs-specs - don't check specs in CVS -nd, --no-distfiles - don't download from distfiles @@ -367,9 +363,6 @@ Usage: builder [-D|--debug] [-V|--version] [--short-version] [--as_anon] [-a|--a - as above, but allow float version php-pear-Services_Digg/ --upgrade-version - upgrade to specified version in try-upgrade ---use-greed-sources - - try download source from tag head if don't find it in - current tag -U, --update - refetch sources, don't use distfiles, and update md5 comments -Upi, --update-poldek-indexes - refresh or make poldek package index files. @@ -399,6 +392,31 @@ tempfile() { mktemp -t builder.XXXXXX || ${TMPDIR:-/tmp}/builder.$RANDOM.$$ } +# inserts git log instead of %changelog +# outputs name of modified file created by tempfile +insert_gitlog() { + local SPECFILE=$1 specfile=$(tempfile) gitlog=$(tempfile) speclog=$(tempfile) + + # allow this being customized + local log_entries=$(rpm -E '%{?_buildchangelogtruncate}') + + # rpm5.org/rpm.org do not parse any other date format than 'Wed Jan 1 1997' + # otherwise i'd use --date=iso here + # http://rpm5.org/cvs/fileview?f=rpm/build/parseChangelog.c&v=2.44.2.1 + # http://rpm.org/gitweb?p=rpm.git;a=blob;f=build/parseChangelog.c#l31 + # NOTE: changelog date is always in UTC for rpmbuild + # * 1265749244 +0000 Random Hacker 9370900 + git log -${log_entries:-20} --format=format:"* %ad %an <%ae> %h%n%s%n" --date=raw > $gitlog + gawk '/^\* /{printf("* %s %s\n", strftime("%a %b %d %Y", $2), substr($0, length($1)+length($2)+length($3)+4)); next}{print}' $gitlog > $speclog + sed '/^%changelog/,$d' $SPECFILE | sed -e "\${ + a%changelog + r $speclog + } + " > $specfile + rm -f $gitlog $speclog + echo $specfile +} + # change dependency to specname # common changes: # - perl(Package::Name) -> perl-Package-Name @@ -689,6 +707,10 @@ Exit_error() { remove_build_requires echo >&2 "Error: conditions reject building this spec (${2})." exit 12 ;; + "err_not_implemented" ) + remove_build_requires + echo >&2 "Error: functionality not yet imlemented" + exit 110 ;; esac echo >&2 "Unknown error." exit 100 @@ -719,6 +741,8 @@ init_builder() { REPO_DIR="." PACKAGE_DIR="." fi + export GIT_WORK_TREE=$PACKAGE_DIR + export GIT_DIR=$PACKAGE_DIR/.git __PWD=$(pwd) } @@ -739,36 +763,41 @@ get_spec() { fi if [ "$NOCVSSPEC" != "yes" ]; then - if [ ! -s CVS/Root -a "$NOCVSSPEC" != "yes" ]; then - echo "Warning: No CVS access defined - using local .spec file" - NOCVSSPEC="yes" - fi - - if [ -d "$ASSUMED_NAME" -a -s "$ASSUMED_NAME/CVS/Root" ]; then - cvsup "$ASSUMED_NAME/$SPECFILE" || Exit_error err_no_spec_in_repo - elif [ "$ADD_PACKAGE_CVS" = "yes" ]; then - if [ ! -r "$ASSUMED_NAME/$SPECFILE" ]; then - echo "ERROR: No package to add ($ASSUMED_NAME/$SPECFILE)" >&2 - exit 101 - fi - if [ ! -s "$ASSUMED_NAME/CVS/Root" ]; then - cvsup -a $ASSUMED_NAME || Exit_error err_cvs_add_failed + if [ -z "$DEPTH" ]; then + if [ -d "$ASSUMED_NAME/.git" ]; then + git fetch origin || Exit_error err_no_spec_in_repo + elif [ "$ADD_PACKAGE_CVS" = "yes" ]; then + if [ ! -r "$ASSUMED_NAME/$SPECFILE" ]; then + echo "ERROR: No package to add ($ASSUMED_NAME/$SPECFILE)" >&2 + exit 101 + fi + Exit_error err_not_implemented + else + ( + unset GIT_WORK_TREE + git clone ${GIT_SERVER}/${ASSUMED_NAME}.git || { + # softfail if new package, i.e not yet added to cvs + [ ! -f "$ASSUMED_NAME/$SPECFILE" ] && Exit_error err_no_spec_in_repo + echo "Warning: package not in CVS - assuming new package" + NOCVSSPEC="yes" + } + ) fi - cvsup -a "$ASSUMED_NAME/$SPECFILE" || Exit_error err_cvs_add_failed else - cvsup -c -d $ASSUMED_NAME "packages/$ASSUMED_NAME/$SPECFILE" || { - # softfail if new package, i.e not yet added to cvs - [ ! -f "$ASSUMED_NAME/$SPECFILE" ] && Exit_error err_no_spec_in_repo - echo "Warning: package not in CVS - assuming new package" - NOCVSSPEC="yes" - NOCVS="yes" + if [ ! -d "$ASSUMED_NAME/.git" ]; then + if [ ! -d "$ASSUMED_NAME" ]; then + mkdir $ASSUMED_NAME + fi + git init + git remote add origin ${GIT_SERVER}/${ASSUMED_NAME}.git + fi + git fetch "$DEPTH" origin ${CVSTAG}:remotes/origin/${CVSTAG} || { + echo >&2 "Error: branch $CVSTAG does not exist" + exit 3 } - - # remove Entries.Static -- so 'cvs up' would update all files in a repo - rm -f "$ASSUMED_NAME/CVS/Entries.Static" fi - cvsignore_df .cvsignore + cvsignore_df .gitignore # add default log format to .cvsignore if it is relative to package dir if [ -n "$LOGFILE" -a "$LOGFILE" = "${LOGFILE##*/}" ]; then @@ -789,6 +818,15 @@ get_spec() { fi fi + if [ -n "$CVSTAG" ]; then + git checkout "$CVSTAG" -- 2>/dev/null || git checkout -t "origin/$CVSTAG" > /dev/null || exit + git symbolic-ref -q HEAD > /dev/null && + git merge '@{u}' + if [ -n "$CVSDATE" ]; then + git checkout $(git rev-list -n1 --before="'$CVSDATE'" $CVSTAG) || exit 1 + fi + fi + if [ ! -f "$ASSUMED_NAME/$SPECFILE" ]; then Exit_error err_no_spec_in_repo fi @@ -844,13 +882,8 @@ src_md5() { local md5 if [ -f additional-md5sums ]; then - local spec_rev=$(grep $SPECFILE CVS/Entries 2>/dev/null | sed -e s:/$SPECFILE/:: -e s:/.*::) - if [ -z "$spec_rev" ]; then - spec_rev=$(head -n 1 $SPECFILE | sed -e 's/.*\$Revision: \([0-9.]*\).*/\1/') - fi - local spec="$SPECFILE[0-9.,]*,$(echo $spec_rev | sed 's/\./\\./g')" md5=$(grep -s -v '^#' additional-md5sums | \ - grep -E "[ ]$(basename "$1")[ ]+${spec}([ ,]|\$)" | \ + grep -E "[ ]$(basename "$1")([ ,]|\$)" | \ sed -e 's/^\([0-9a-f]\{32\}\).*/\1/' | \ grep -E '^[0-9a-f]{32}$') @@ -908,7 +941,7 @@ cvsignore_df() { if [ "$CVSIGNORE_DF" != "yes" ]; then return fi - cvsignore=${PACKAGE_DIR}/.cvsignore + cvsignore=${PACKAGE_DIR}/.gitignore # add only if not yet there if ! awk -vf="$1" -vc=1 '$0 == f { c = 0 } END { exit c }' $cvsignore 2>/dev/null; then @@ -916,67 +949,6 @@ cvsignore_df() { fi } -cvsup() { - update_shell_title "cvsup" - local OPTIONS="" ACTION="up" - - # checkout - if [ "$1" = "-c" ]; then - ACTION="co" - shift - fi - # add - if [ "$1" = "-a" ]; then - ACTION="add" - shift - fi - - OPTIONS="$ACTION " - - if [ -n "$CVSROOT" ]; then - OPTIONS="-d $CVSROOT $OPTIONS" - fi - - if [ "$ACTION" != "add" ]; then - if [ -z "$CVSDATE" -a -z "$CVSTAG" ]; then - OPTIONS="$OPTIONS -A" - else - if [ -n "$CVSDATE" ]; then - OPTIONS="$OPTIONS -D $CVSDATE" - fi - if [ -n "$CVSTAG" ]; then - # FIXME: cvs add actually works with -r ? - OPTIONS="$OPTIONS -r $CVSTAG" - fi - fi - fi - - local result=1 - local retries_counter=0 - if [ $# = 1 ]; then - update_shell_title "cvsup: $*" - else - update_shell_title "cvsup: $# files" - fi - while [ "$result" != "0" -a "$retries_counter" -le "$CVS_RETRIES" ]; do - retries_counter=$(( $retries_counter + 1 )) - output=$(LC_ALL=C $CVS_COMMAND $OPTIONS "$@" 2>&1) - result=$? - [ -n "$output" ] && echo "$output" - if echo "$output" | grep -qE "(Cannot connect to|connect to .* failed|Connection reset by peer|Connection timed out|Unknown host)" \ - && [ "$result" -ne "0" -a "$retries_counter" -le "$CVS_RETRIES" ]; then - echo "Trying again [$*]... ($retries_counter)" - update_shell_title "cvsup: retry #$retries_counter" - sleep 2 - continue - else - break - fi - done - update_shell_title "cvsup: done!" - return $result -} - # returns true if "$1" is ftp, http or https protocol url is_url() { case "$1" in @@ -1085,11 +1057,6 @@ get_files() { if [ $# -gt 0 ]; then cd "$PACKAGE_DIR" - if [ ! -s CVS/Root -a "$NOCVS" != "yes" ]; then - echo "Warning: No CVS access defined for SOURCES" - NOCVS="yes" - fi - local nc=0 local get_files_cvs="" for i in "$@"; do @@ -1182,14 +1149,6 @@ get_files() { rm -f "$target" FROM_DISTFILES=0 fi - elif [ "$NOCVS" != "yes" -a -z "$srcmd5" ]; then - if [ $# -gt 1 ]; then - get_files_cvs="$get_files_cvs $fp" - update_shell_title "$fp (will cvs up later)" - cvsup=1 - else - cvsup $fp - fi fi if [ -z "$NOURLS" ] && [ ! -f "$fp" -o -n "$UPDATE" ] && [ "`echo $i | grep -E 'ftp://|http://|https://'`" ]; then @@ -1215,11 +1174,7 @@ get_files() { # the md5 check must be moved elsewhere as if we've called from update_md5 the md5 is wrong. if [ ! -f "$fp" -a "$FAIL_IF_NO_SOURCES" != "no" ]; then - if [ -n "GREEDSRC" ]; then - get_greed_sources $i - else - Exit_error err_no_source_in_repo $i - fi + Exit_error err_no_source_in_repo $i fi # we check md5 here just only to refetch immediately @@ -1251,9 +1206,6 @@ get_files() { done SHELL_TITLE_PREFIX="" - if [ "$get_files_cvs" ]; then - cvsup $get_files_cvs - fi if [ "$CHMOD" = "yes" ]; then CHMOD_FILES=$(nourl "$@") @@ -1289,26 +1241,6 @@ make_tagver() { echo -n "$TAGVER" } -# bool is_tag_a_branch(tag) -# -# returns 1 if a tag is a branch set on SPECFILE -is_tag_a_branch() { - if [ -n "$DEBUG" ]; then - set -x - set -v - fi - - if [ $# -ne 1 ]; then - return 0; - fi - - TAG=$1 - - cd "$PACKAGE_DIR" - $CVS_COMMAND status -v $SPECFILE | grep -Eiq "${TAG}.+(branch: [0-9.]+)" - return $? -} - tag_files() { TAG_FILES="$@" @@ -1323,114 +1255,45 @@ tag_files() { local TAGVER if [ "$TAG_VERSION" = "yes" ]; then TAGVER=`make_tagver` - echo "CVS tag: $TAGVER" + echo "tag: $TAGVER" fi if [ -n "$TAG" ]; then - echo "CVS tag: $TAG" + echo "tag: $TAG" fi local OPTIONS="tag $CVS_FORCE" - if [ -n "$CVSROOT" ]; then - OPTIONS="-d $CVSROOT $OPTIONS" - fi - # if a tagname we are about to set already exists - # and happens to be a branch (common case with AC-branch) - # pass -B (allows -F to disturb branch tag) local _tag=$TAG if [ "$TAG_VERSION" = "yes" ]; then _tag=$TAGVER fi; - is_tag_a_branch $_tag - if [ $? -eq 0 -a $CVS_NSERVER -eq 0 ]; then - OPTIONS="$OPTIONS -B" - fi; cd "$PACKAGE_DIR" - local tag_files - for i in $TAG_FILES; do - # don't tag files stored on distfiles - [ -n "`src_md5 $i`" ] && continue - local fp=`nourl "$i"` - if [ -f "$fp" ]; then - tag_files="$tag_files $fp" - elif [ -n "GREEDSRC" ]; then - get_greed_sources $i - else - Exit_error err_no_source_in_repo $i - fi - done - if [ "$tag_files" ]; then - if [ "$TAG_VERSION" = "yes" ]; then - update_shell_title "tag sources: $TAGVER" - printf "Tagging %d files\n" $(echo $tag_files | wc -w) - $CVS_COMMAND $OPTIONS $TAGVER $tag_files || exit - fi - if [ -n "$TAG" ]; then - update_shell_title "tag sources: $TAG" - - while [ "$tag_files" ]; do - local chunk=$(echo $tag_files | tr ' ' '\n' | head -n 100) - printf "Tagging %d files\n" $(echo $chunk | wc -w) - $CVS_COMMAND $OPTIONS $TAG $chunk || exit - tag_files=$(echo $tag_files | tr ' ' '\n' | tail +101) - done - fi - fi - - cd "$PACKAGE_DIR" if [ "$TAG_VERSION" = "yes" ]; then - update_shell_title "tag spec: $TAGVER" - $CVS_COMMAND $OPTIONS $TAGVER $SPECFILE || exit + update_shell_title "tag sources: $TAGVER" + git $OPTIONS $TAGVER || exit fi if [ -n "$TAG" ]; then - update_shell_title "tag spec: $TAG" - $CVS_COMMAND $OPTIONS $TAG $SPECFILE || exit + update_shell_title "tag sources: $TAG" + git $OPTIONS $TAG $chunk || exit fi } branch_files() { TAG=$1 - echo "CVS branch tag: $TAG" + echo "Git branch: $TAG" shift - TAG_FILES="$@" - if [ -n "$DEBUG" ]; then set -x set -v fi - local OPTIONS="tag $CVS_FORCE -b" - - # branch exists? - is_tag_a_branch $TAG - if [ $? -eq 1 ]; then - OPTIONS="$OPTIONS -B" - fi - - if [ -n "$CVSROOT" ]; then - OPTIONS="-d $CVSROOT $OPTIONS" - fi - cd "$PACKAGE_DIR" - local tag_files - for i in $TAG_FILES; do - local fp=`nourl "$i"` - if [ -f "$fp" ]; then - tag_files="$tag_files $fp" - elif [ -n "GREEDSRC" ]; then - get_greed_sources $i - else - Exit_error err_no_source_in_repo $i - fi - done - if [ "$tag_files" ]; then - $CVS_COMMAND $OPTIONS $TAG $tag_files || exit - fi + local OPTIONS="branch $CVS_FORCE" cd "$PACKAGE_DIR" - $CVS_COMMAND $OPTIONS $TAG $SPECFILE || exit + git $OPTIONS $TAG || exit } @@ -1561,10 +1424,11 @@ build_package() { echo "LASTLOG=$LOG" > $LASTLOG_FILE fi RES_FILE=$(tempfile) + local specfile=$(insert_gitlog $SPECFILE) - (time eval ${NICE_COMMAND} $RPMBUILD $TARGET_SWITCH $BUILD_SWITCH -v $QUIET $CLEAN $RPMOPTS $RPMBUILDOPTS $BCOND --define \'_specdir $PACKAGE_DIR\' --define \'_sourcedir $PACKAGE_DIR\' $SPECFILE; echo $? > $RES_FILE) 2>&1 |tee $LOG + (time eval ${NICE_COMMAND} $RPMBUILD $TARGET_SWITCH $BUILD_SWITCH -v $QUIET $CLEAN $RPMOPTS $RPMBUILDOPTS $BCOND --define \'_specdir $PACKAGE_DIR\' --define \'_sourcedir $PACKAGE_DIR\' $specfile; echo $? > $RES_FILE) 2>&1 |tee $LOG RETVAL=`cat $RES_FILE` - rm $RES_FILE + rm $RES_FILE $specfile if [ -n "$LOGDIROK" ] && [ -n "$LOGDIRFAIL" ]; then if [ "$RETVAL" -eq "0" ]; then mv $LOG $LOGDIROK @@ -1808,7 +1672,7 @@ display_bconds() { display_branches() { if [ "$NOCVSSPEC" != "yes" ]; then echo -n "Available branches: " - $CVS_COMMAND status -v "${SPECFILE}" | awk '!/Sticky Tag:/ && /\(branch:/ { print $1 } ' | xargs + git branch -r | grep '^ origin' | grep -v origin/HEAD | sed 's#^ *origin/##' | xargs fi } @@ -2079,18 +1943,6 @@ init_rpm_dir() { echo "- edit $TOP_DIR/CVS/Root" } -get_greed_sources() { - CVSROOT=":pserver:cvs@$CVS_SERVER:/cvsroot" - if [ -n "BE_VERBOSE" ]; then - echo "Try greed download: $1 from: $CVSROOT" - fi - $CVS_COMMAND -d $CVSROOT get SOURCES/$1 - if [ $? != 0 ]; then - Exit_error err_no_source_in_repo $1 - fi - -} - # remove entries from CVS/Entries cvs_entry_remove() { local cvsdir="$1"; shift @@ -2114,11 +1966,11 @@ mr_proper() { get_spec parse_spec - # remove from CVS/Entries - cvs_entry_remove $PACKAGE_DIR $SPECFILE $SOURCES $PATCHES - # remove spec and sources - $RPMBUILD --clean --rmsource --rmspec --nodeps --define \'_specdir $PACKAGE_DIR\' --define \'_sourcedir $PACKAGE_DIR\' $SPECFILE + $RPMBUILD --clean --rmsource --rmspec --nodeps --define "_specdir $PACKAGE_DIR" --define "_sourcedir $PACKAGE_DIR" $SPECFILE + rm -rf $PACKAGE_DIR/.git .gitignore + cd $__PWD + rmdir --ignore-fail-on-non-empty $PACKAGE_DIR } #--------------------------------------------- @@ -2139,7 +1991,6 @@ while [ $# -gt 0 ]; do -a5 | --add-md5 ) COMMAND="update_md5" NODIST="yes" - NOCVS="yes" NOCVSSPEC="yes" ADD5="yes" shift ;; @@ -2176,9 +2027,13 @@ while [ $# -gt 0 ]; do -c | --clean ) CLEAN="--clean"; shift ;; -cf | --cvs-force ) - CVS_FORCE="-F"; shift;; + CVS_FORCE="-f"; shift;; -d | --cvsroot ) shift; CVSROOT="${1}"; shift ;; + --depth ) + DEPTH="--depth=$2" + shift 2 + ;; -g | --get ) COMMAND="get"; shift ;; -h | --help ) @@ -2203,8 +2058,6 @@ while [ $# -gt 0 ]; do SKIP_EXISTING_FILES="yes"; shift ;; -m | --mr-proper ) COMMAND="mr-proper"; shift ;; - -nc | --no-cvs ) - NOCVS="yes"; shift ;; -ncs | --no-cvs-specs ) NOCVSSPEC="yes"; shift ;; -nd | --no-distfiles ) @@ -2218,7 +2071,6 @@ while [ $# -gt 0 ]; do -ns0 | --no-source0 ) NOSOURCE0="yes"; shift ;; -nn | --no-net ) - NOCVS="yes" NOCVSSPEC="yes" NODIST="yes" NOMIRRORS="yes" @@ -2271,14 +2123,16 @@ while [ $# -gt 0 ]; do -q | --quiet ) QUIET="--quiet"; shift ;; --date ) - CVSDATE="${2}"; shift 2 ;; + CVSDATE="${2}"; shift 2 + date -d "$CVSDATE" > /dev/null 2>&1 || { echo >&2 "No valid date specified"; exit 3; } + ;; -r | --cvstag ) CVSTAG="$2" shift 2 ;; -A) shift - CVSTAG="HEAD" + CVSTAG="master" ;; -R | --fetch-build-requires) FETCH_BUILD_REQUIRES="yes" @@ -2350,9 +2204,6 @@ while [ $# -gt 0 ]; do --init-rpm-dir) COMMAND="init_rpm_dir" shift ;; - --use-greed-sources ) - GREEDSRC="1" - shift;; -u | --try-upgrade ) TRY_UPGRADE="1"; shift ;; --upgrade-version ) @@ -2417,15 +2268,20 @@ while [ $# -gt 0 ]; do esac done -[ -d "$ASSUMED_NAME" ] && CVS_ENTRIES="$ASSUMED_NAME/CVS/Entries" || CVS_ENTRIES="CVS/Entries" -if [ -f "$CVS_ENTRIES" ] && [ -z "$CVSTAG" ]; then - CVSTAG=$(awk -vSPECFILE=$(basename $SPECFILE) -F/ '$2 == SPECFILE && $6 ~ /^T/{print substr($6, 2)}' ${CVS_ENTRIES}) - if [ "$CVSTAG" ]; then - echo >&2 "builder: Sticky tag $CVSTAG active. Use -r TAGNAME to override." +[ -d "$ASSUMED_NAME" ] && GIT_DIR="$ASSUMED_NAME/.git" || GIT_DIR=.git +if [ -d "$GIT_DIR" ] && [ -z "$CVSTAG" ]; then + if CVSTAG=$(GIT_DIR=$GIT_DIR git symbolic-ref HEAD) 2>/dev/null; then + CVSTAG=${CVSTAG#refs/heads/} + if [ "$CVSTAG" != "master" ]; then + echo >&2 "builder: Active branch $CVSTAG. Use -r BRANCHNAME to override" + fi + else + echo >&2 "On detached HEAD. Use -r BRANCHNAME to override" + HEAD_DETACHED="yes" fi elif [ "$CVSTAG" = "HEAD" ]; then # assume -r HEAD is same as -A - CVSTAG="" + CVSTAG="master" fi if [ "$CVSTAG" ]; then @@ -2536,17 +2392,14 @@ case "$COMMAND" in if [ -n "$TEST_TAG" ]; then local TAGVER=`make_tagver` echo "Searching for tag $TAGVER..." - TAGREL=$($CVS_COMMAND status -v $SPECFILE | grep -E "^[[:space:]]*${TAGVER}[[[:space:]]" | sed -e 's#.*(revision: ##g' -e 's#).*##g') - if [ -n "$TAGREL" ]; then - Exit_error err_tag_exists "$TAGVER" "$TAGREL" - fi + git show-ref --quiet --verify "refs/tags/$TAGVER" && Exit_error err_tag_exists "$TAGVER" "$TAGREL" # - do not allow to build from HEAD when XX-branch exists TREE_PREFIX=$(echo "$TAG_PREFIX" | sed -e 's#^auto-\([a-zA-Z]\+\)-.*#\1#g') if [ "$TREE_PREFIX" != "$TAG_PREFIX" ]; then TAG_BRANCH="${TREE_PREFIX}-branch" - TAG_STATUS=$($CVS_COMMAND status -v $SPECFILE | grep -Ei "${TAG_BRANCH}.+(branch: [0-9.]+)") - if [ -n "$TAG_STATUS" -a "$CVSTAG" = "HEAD" ]; then + TAG_STATUS=$(git branch -r | grep -i "origin/$TAG_BRANCH$" | sed 's# *origin/##') + if [ -n "$TAG_STATUS" -a -z "$CVSTAG" ]; then Exit_error err_branch_exists "$TAG_STATUS" fi fi @@ -2581,16 +2434,7 @@ case "$COMMAND" in get_spec parse_spec - # don't fetch sources from remote locations - new_SOURCES="" - for file in $SOURCES; do - [ -n "`src_md5 $file`" ] && continue - new_SOURCES="$new_SOURCES $file" - done - SOURCES="$new_SOURCES" - get_files $SOURCES $PATCHES - check_md5 $SOURCES - branch_files $TAG $SOURCES $PATCHES $ICONS + branch_files $TAG ;; "add_cvs" ) init_builder @@ -2646,17 +2490,7 @@ case "$COMMAND" in get_spec parse_spec - - # don't fetch sources from remote locations - new_SOURCES="" - for file in $SOURCES; do - [ -n "`src_md5 $file`" ] && continue - new_SOURCES="$new_SOURCES $file" - done - SOURCES="$new_SOURCES" - get_files $SOURCES $PATCHES - check_md5 $SOURCES - tag_files $SOURCES $PATCHES $ICONS + tag_files ;; "mr-proper" ) mr_proper