X-Git-Url: http://git.pld-linux.org/?a=blobdiff_plain;f=builder.sh;h=f138da9af25e46e02793b48882daade552a61618;hb=947500436acb28d51898eff42b7eb0a6b0159faa;hp=ea97dba746ac8a925396154f08191945328c911e;hpb=e93ee6d958877be59f6b78a24f057df1ac2486d2;p=packages%2Frpm-build-tools.git diff --git a/builder.sh b/builder.sh index ea97dba..f138da9 100755 --- a/builder.sh +++ b/builder.sh @@ -111,6 +111,7 @@ PACKAGE_VERSION="" PACKAGE_NAME="" ASSUMED_NAME="" PROTOCOL="http" +IPOPT="" # use lftp by default when available USE_LFTP= @@ -202,38 +203,19 @@ if [ "$SCHEDTOOL" = "auto" ]; then fi if [ -n "$USE_PROZILLA" ]; then - GETURI="proz --no-getch -r -P ./ -t$WGET_RETRIES $PROZILLA_OPTS" - GETURI2="$GETURI" - OUTFILEOPT="-O" + GETURI=download_proz elif [ -n "$USE_AXEL" ]; then - GETURI="axel -a $AXEL_OPTS" - GETURI2="$GETURI" - OUTFILEOPT="-o" + GETURI=download_axel elif [ -n "$USE_LFTP" ]; then GETURI=download_lftp - GETURI2=$GETURI - OUTFILEOPT="" else - wget --help 2>&1 | grep -q -- ' --no-check-certificate ' && WGET_OPTS="$WGET_OPTS --no-check-certificate" - wget --help 2>&1 | grep -q -- ' --inet ' && WGET_OPTS="$WGET_OPTS --inet" - wget --help 2>&1 | grep -q -- ' --retry-connrefused ' && WGET_OPTS="$WGET_OPTS --retry-connrefused" - wget --help 2>&1 | grep -q -- ' --no-iri ' && WGET_OPTS="$WGET_OPTS --no-iri" - WGET_OPTS="$WGET_OPTS --user-agent=$USER_AGENT" - - GETURI="wget --passive-ftp -c -nd -t$WGET_RETRIES $WGET_OPTS" - GETURI2="wget -c -nd -t$WGET_RETRIES $WGET_OPTS" - OUTFILEOPT="-O" + GETURI=download_wget fi -GETLOCAL="cp -a" +GETLOCAL=${GETLOCAL:-cp -a} -if rpm --version 2>&1 | grep -q '4.0.[0-2]'; then - RPM="rpm" - RPMBUILD="rpm" -else - RPM="rpm" - RPMBUILD="rpmbuild" -fi +RPM="rpm" +RPMBUILD="rpmbuild" # # sanity checks @@ -269,12 +251,53 @@ run_poldek() { #--------------------------------------------- # functions +download_prozilla() { + local outfile=$1 url=$2 retval + + proz --no-getch -r -P ./ -t$WGET_RETRIES $PROZILLA_OPTS -O "$outfile" "$url" + retval=$? + + return $retval +} + +download_axel() { + local outfile=$1 url=$2 retval + + axel -a $AXEL_OPTS -o "$outfile" "$url" + retval=$? + + return $retval +} + +download_wget() { + local outfile=$1 url=$2 retval + if [ -z "${WGET_OPTS_SET+x}" ]; then + wget --help 2>&1 | grep -q -- ' --no-check-certificate ' && WGET_OPTS="$WGET_OPTS --no-check-certificate" + wget --help 2>&1 | grep -q -- ' --inet ' && WGET_OPTS="$WGET_OPTS --inet" + wget --help 2>&1 | grep -q -- ' --retry-connrefused ' && WGET_OPTS="$WGET_OPTS --retry-connrefused" + wget --help 2>&1 | grep -q -- ' --no-iri ' && WGET_OPTS="$WGET_OPTS --no-iri" + WGET_OPTS="-c -nd -t$WGET_RETRIES $WGET_OPTS --user-agent=$USER_AGENT $IPOPT --passive-ftp" + WGET_OPTS_SET=1 + fi + + wget $WGET_OPTS -O "$outfile" "$url" + retval=$? + if [ $retval -ne 0 ]; then + if [ "`echo $url | grep -E 'ftp://'`" ]; then + ${GETURI} -O "$outfile" "$url" + retval=$? + fi + fi + return $retval +} + download_lftp() { local outfile=$1 url=$2 retval tmpfile - # TODO: use mktemp - tmpfile=$outfile.tmp + tmpfile=$(tempfile) || exit 1 lftp -c " $([ "$DEBUG" = "yes" ] && echo "debug 5;") + $([ "$IPOPT" = "-4" ] && echo "set dns:order \"inet\";") + $([ "$IPOPT" = "-6" ] && echo "set dns:order \"inet6\";") set ssl:verify-certificate no; set net:max-retries $WGET_RETRIES; set http:user-agent \"$USER_AGENT\"; @@ -603,8 +626,6 @@ set_spec_target() { # runs rpm with minimal macroset minirpm() { - safe_macrofiles=$(rpm $TARGET_SWITCH --showrc | awk -F: '/^macrofiles/ { gsub(/^macrofiles[ \t]+:/, "", $0); print $0 } ') - # TODO: move these to /usr/lib/rpm/macros cat > $BUILDER_MACROS <<'EOF' %x8664 x86_64 amd64 ia32e @@ -667,7 +688,12 @@ EOF %_sourcedir ./ EOF fi - eval PATH=$CLEAN_PATH $RPMBUILD $TARGET_SWITCH --macros "$safe_macrofiles:$BUILDER_MACROS" $QUIET $RPMOPTS $RPMBUILDOPTS $BCOND $* 2>&1 + if rpm --version 2>&1 | grep -qE '5\.[0-9]+\.[0-9]+'; then + safe_macrofiles=$(rpm $TARGET_SWITCH --showrc | awk -F: '/^macrofiles/ { gsub(/^macrofiles[ \t]+:/, "", $0); print $0 } ') + eval PATH=$CLEAN_PATH $RPMBUILD $TARGET_SWITCH --macros "$safe_macrofiles:$BUILDER_MACROS" $QUIET $RPMOPTS $RPMBUILDOPTS $BCOND $* 2>&1 + else + eval PATH=$CLEAN_PATH $RPMBUILD $TARGET_SWITCH --load "$BUILDER_MACROS" $QUIET $RPMOPTS $RPMBUILDOPTS $BCOND $* 2>&1 + fi } cache_rpm_dump() { @@ -950,7 +976,7 @@ get_spec() { if [ "$NOCVSSPEC" != "yes" ]; then if [ -z "$DEPTH" ]; then if [ -d "$PACKAGE_DIR/.git" ]; then - git fetch $REMOTE_PLD || Exit_error err_no_spec_in_repo + git fetch $IPOPT $REMOTE_PLD || Exit_error err_no_spec_in_repo elif [ "$ADD_PACKAGE_CVS" = "yes" ]; then if [ ! -r "$PACKAGE_DIR/$SPECFILE" ]; then echo "ERROR: No package to add ($PACKAGE_DIR/$SPECFILE)" >&2 @@ -960,10 +986,10 @@ get_spec() { else ( unset GIT_WORK_TREE - git clone -o $REMOTE_PLD ${GIT_SERVER}/${PACKAGES_DIR}/${ASSUMED_NAME}.git || { + git clone $IPOPT -o $REMOTE_PLD ${GIT_SERVER}/${PACKAGES_DIR}/${ASSUMED_NAME}.git || { # softfail if new package, i.e not yet added to PLD rep [ ! -f "$PACKAGE_DIR/$SPECFILE" ] && Exit_error err_no_spec_in_repo - echo "Warning: package not in CVS - assuming new package" + echo "Warning: package not in Git - assuming new package" NOCVSSPEC="yes" } git config --local --add "remote.$REMOTE_PLD.fetch" 'refs/notes/*:refs/notes/*' @@ -991,12 +1017,12 @@ get_spec() { if [ -z "$ALL_BRANCHES" ]; then refs="${CVSTAG}:remotes/${REMOTE_PLD}/${CVSTAG}" fi - git fetch $DEPTH $REMOTE_PLD $refs || { + git fetch $IPOPT $DEPTH $REMOTE_PLD $refs || { echo >&2 "Error: branch $CVSTAG does not exist" exit 3 } fi - git fetch $REMOTE_PLD 'refs/notes/*:refs/notes/*' + git fetch $IPOPT $REMOTE_PLD 'refs/notes/*:refs/notes/*' cvsignore_df .gitignore @@ -1023,7 +1049,7 @@ get_spec() { fi if [ -n "$CVSTAG" ]; then - if git rev-parse --verify -q "$CVSTAG"; then + if git rev-parse --verify -q "$CVSTAG" >/dev/null; then git checkout "$CVSTAG" -- elif git rev-parse --verify -q "refs/remotes/${REMOTE_PLD}/$CVSTAG"; then git checkout -t "refs/remotes/${REMOTE_PLD}/$CVSTAG" > /dev/null @@ -1031,7 +1057,8 @@ get_spec() { if [ $(git rev-parse "$CVSTAG") != $(git rev-parse HEAD) ]; then Exit_error "err_no_checkut" "$CVSTAG" fi - git merge --ff-only '@{u}' + + git merge --ff-only '@{u}' git symbolic-ref -q HEAD > /dev/null && [ "$NOCVSSPEC" != "yes" ] && if [ -n "$CVSDATE" ]; then git checkout $(git rev-list -n1 --before="'$CVSDATE'" $CVSTAG) || exit 1 @@ -1333,11 +1360,7 @@ get_files() { uri="df: $uri" fi update_shell_title "${GETURI%% *}: $uri" - ${GETURI} ${OUTFILEOPT} "$target" "$url" || \ - if [ "`echo $url | grep -E 'ftp://'`" ]; then - update_shell_title "${GETURI2%% *}: $url" - ${GETURI2} ${OUTFILEOPT} "$target" "$url" - fi + ${GETURI} "$target" "$url" fi # is it empty file? @@ -1348,11 +1371,7 @@ get_files() { ${GETLOCAL} $url_attic $target else update_shell_title "${GETURI%% *}: $url_attic" - ${GETURI} ${OUTFILEOPT} "$target" "$url_attic" || \ - if [ "`echo $url_attic | grep -E 'ftp://'`" ]; then - update_shell_title "${GETURI2%% *}: $url_attic" - ${GETURI2} ${OUTFILEOPT} "$target" "$url_attic" - fi + ${GETURI} "$target" "$url_attic" test -s "$target" || rm -f "$target" fi fi @@ -1372,11 +1391,7 @@ get_files() { im="$i" fi update_shell_title "${GETURI%% *}: $im" - ${GETURI} ${OUTFILEOPT} "$target" "$im" || \ - if [ "`echo $im | grep -E 'ftp://'`" ]; then - update_shell_title "${GETURI2%% *}: $im" - ${GETURI2} ${OUTFILEOPT} "$target" "$im" - fi + ${GETURI} "$target" "$im" test -s "$target" || rm -f "$target" fi @@ -1401,19 +1416,11 @@ get_files() { FROM_DISTFILES=2 rm -f $target update_shell_title "${GETURI%% *}: $url" - ${GETURI} ${OUTFILEOPT} "$target" "$url" || \ - if [ "`echo $url | grep -E 'ftp://'`" ]; then - update_shell_title "${GETURI2%% *}: $url" - ${GETURI2} ${OUTFILEOPT} "$target" "$url" - fi + ${GETURI} "$target" "$url" if [ ! -s "$target" ]; then rm -f "$target" update_shell_title "${GETURI%% *}: $url_attic" - ${GETURI} ${OUTFILEOPT} "$target" "$url_attic" || \ - if [ "`echo $url_attic | grep -E 'ftp://'`" ]; then - update_shell_title "${GETURI2%% *}: $url_attic" - ${GETURI2} ${OUTFILEOPT} "$target" "$url_attic" - fi + ${GETURI} "$target" "$url_attic" fi test -s "$target" || rm -f "$target" fi @@ -1497,7 +1504,7 @@ tag_files() { if tag_exist $_tag || [ -n "$CVS_FORCE" ]; then update_shell_title "tag sources: $_tag" git $OPTIONS $_tag || exit - git push $CVS_FORCE $REMOTE_PLD tag $_tag || Exit_error err_remote_problem $REMOTE_PLD + git push $IPOPT $CVS_FORCE $REMOTE_PLD tag $_tag || Exit_error err_remote_problem $REMOTE_PLD else echo "Tag $_tag already exists and points to the same commit" fi @@ -1667,11 +1674,12 @@ build_package() { # this may be set by user unset GIT_SSH # may be set by user - unset GIT_COMMITTER_NAME GIT_COMMITTER_EMAIL GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL + unset GIT_COMMITTER_NAME GIT_COMMITTER_EMAIL GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL GIT_TESTING_PORCELAIN_COMMAND_LIST # fail if something still set env | grep ^GIT_ && Exit_error err_build_fail local specdir=$(insert_gitlog $SPECFILE) + ulimit -c unlimited # FIXME: eval here is exactly why? PATH=$CLEAN_PATH eval teeboth "'$logfile'" ${TIME_COMMAND} ${NICE_COMMAND} $RPMBUILD $TARGET_SWITCH $BUILD_SWITCH -v $QUIET $CLEAN $RPMOPTS $RPMBUILDOPTS $BCOND --define \'_specdir $PACKAGE_DIR\' --define \'_sourcedir $PACKAGE_DIR\' $specdir/$SPECFILE retval=$? @@ -1861,9 +1869,9 @@ run_sub_builder() { # @return exit code from poldek # # this requires following sudo rules: -# - poldek --noask --caplookup -uG +# - poldek --noask --caplookup -ug poldek_install() { - LANG=C $POLDEK_CMD --noask --caplookup --uniq -uG "$@" + LANG=C $POLDEK_CMD --noask --caplookup --uniq -ug "$@" } # install packages @@ -1874,7 +1882,7 @@ install_packages() { # sync poldek indexes once per invocation if [ -z "$package_indexes_updated" ]; then update_shell_title "poldek: update indexes" - $POLDEK_CMD -q --update --upa + $POLDEK_CMD -q --update --upa --mo=nodesc package_indexes_updated=true fi @@ -2039,7 +2047,7 @@ init_repository() { local localrepo=$2 if [ ! -e $localrepo ]; then - git clone -o $REMOTE_PLD ${GIT_SERVER}/$remoterepo $localrepo + git clone $IPOPT -o $REMOTE_PLD ${GIT_SERVER}/$remoterepo $localrepo git --git-dir=$localrepo/.git remote set-url --push $REMOTE_PLD ssh://${GIT_PUSH}/$remoterepo fi } @@ -2095,9 +2103,7 @@ fi while [ $# -gt 0 ]; do case "${1}" in -4|-6) - # NOTE: we should be fetcher specific, like fille WGET_OPTS, but - # unfortunately $GETURI is already formed - GETURI="$GETURI $1" + IPOPT="${1}" shift ;; -5 | --update-md5) @@ -2599,6 +2605,7 @@ case "$COMMAND" in fi get_files $SOURCES $PATCHES check_md5 $SOURCES + fetch_build_requires ;; "update_md5" ) init_builder