]> git.pld-linux.org Git - packages/rpm-build-tools.git/blobdiff - builder.sh
Improve rpm.org detection
[packages/rpm-build-tools.git] / builder.sh
index fcbec939e893e80a3744c3db9520886a9d14bed1..11e01efcbe992f278a9ccb96a03f19ef7bfe24fb 100755 (executable)
@@ -114,8 +114,7 @@ PROTOCOL="http"
 IPOPT=""
 
 # use lftp by default when available
-USE_LFTP=
-lftp --version > /dev/null 2>&1 && USE_LFTP=yes
+test -z "${USE_LFTP+x}" && lftp --version > /dev/null 2>&1 && USE_LFTP=yes
 PARALLEL_DOWNLOADS=10
 
 WGET_RETRIES=${MAX_WGET_RETRIES:-0}
@@ -214,13 +213,8 @@ fi
 
 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
@@ -275,16 +269,18 @@ download_axel() {
 }
 
 download_wget() {
-       local outfile=$1 url=$2 retval
-       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 -c -nd -t$WGET_RETRIES $WGET_OPTS $IPOPT"
-
-       ${GETURI} --passive-ftp -O "$outfile" "$url"
+       local outfile=$1 url=$2 retval wget_help
+       if [ -z "${WGET_OPTS_SET+x}" ]; then
+               wget_help="$(wget --help 2>&1)"
+               echo "$wget_help" | grep -q -- ' --no-check-certificate ' && WGET_OPTS="$WGET_OPTS --no-check-certificate"
+               echo "$wget_help" | grep -q -- ' --inet ' && WGET_OPTS="$WGET_OPTS --inet"
+               echo "$wget_help" | grep -q -- ' --retry-connrefused ' && WGET_OPTS="$WGET_OPTS --retry-connrefused"
+               echo "$wget_help" | 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
@@ -297,7 +293,7 @@ download_wget() {
 
 download_lftp() {
        local outfile=$1 url=$2 retval tmpfile
-       tmpfile=$(mktemp) || exit 1
+       tmpfile=$(tempfile) || exit 1
        lftp -c "
                $([ "$DEBUG" = "yes" ] && echo "debug 5;")
                $([ "$IPOPT" = "-4" ] && echo "set dns:order \"inet\";")
@@ -479,6 +475,23 @@ Usage: builder [--all-branches] [-D|--debug] [-V|--version] [--short-version]  [
 "
 }
 
+is_rpmorg() {
+       local v
+
+       v=$(rpm --version 2>&1)
+       v=${v#RPM version } # rpm 4
+       v=${v#rpm (RPM) } # rpm 5
+
+       case "$v" in
+               4.5|5.*)
+                       return 1
+                       ;;
+               4.*)
+                       return 0;
+                       ;;
+       esac
+}
+
 # create tempfile. as secure as possible
 tempfile() {
        local prefix=builder.$PACKAGE_NAME${1:+.$1}
@@ -630,8 +643,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
@@ -694,7 +705,13 @@ EOF
 %_sourcedir ./
 EOF
        fi
-       eval PATH=$CLEAN_PATH $RPMBUILD $TARGET_SWITCH --macros "$safe_macrofiles:$BUILDER_MACROS" $QUIET $RPMOPTS $RPMBUILDOPTS $BCOND $* 2>&1
+       if ! is_rpmorg; then
+               local safe_macrofiles
+               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() {
@@ -990,7 +1007,7 @@ get_spec() {
                                        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 GIT - 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/*'
@@ -1050,15 +1067,19 @@ get_spec() {
        fi
 
        if [ -n "$CVSTAG" ]; then
-               if git rev-parse --verify -q "$CVSTAG"; then
-                       git checkout "$CVSTAG" --
+               if git rev-parse --verify -q "$CVSTAG" >/dev/null; then
+                       # checkout only if differs, so this will not trash git reflog
+                       if [ $(git rev-parse "$CVSTAG") != $(git rev-parse HEAD) ]; then
+                               git checkout "$CVSTAG" --
+                       fi
                elif git rev-parse --verify -q "refs/remotes/${REMOTE_PLD}/$CVSTAG"; then
                        git checkout -t "refs/remotes/${REMOTE_PLD}/$CVSTAG" > /dev/null
                fi
                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
@@ -1674,11 +1695,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=$?
@@ -1868,9 +1890,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
@@ -1881,7 +1903,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
 
This page took 0.066469 seconds and 4 git commands to generate.