]> TLD Linux GIT Repositories - tld-builder.git/blobdiff - client/make-request.sh
- PLD merge, fully (re)TLDized
[tld-builder.git] / client / make-request.sh
index d73c08ab19df1ae1b7db69cd5fa97d0554141745..a14bd7c5ffadd4308f3f7a125f7f5e4f3d094988 100755 (executable)
@@ -1,4 +1,6 @@
 #!/bin/sh
+# vim:noet:ts=4:sw=4
+VERSION=1.89
 
 # prevent "*" from being expanded in builders var
 set -f
@@ -16,6 +18,8 @@ url=
 no_depend=no
 verbose=no
 autotag=no
+requester_override=
+relup=no
 
 if [ -x /usr/bin/python ]; then
        send_mode="python"
@@ -34,14 +38,14 @@ if [ ! -f "$USER_CFG" ]; then
        echo "Creating config file $USER_CFG. You *must* edit it."
        cat > $USER_CFG <<EOF
 priority=2
-requester=deviloper@pld-linux.org
-default_key=deviloper@pld-linux.org
+requester=deviloper@tld-linux.org
+default_key=deviloper@tld-linux.org
 send_mode="$send_mode"
 url="$url"
-mailer="/usr/sbin/sendmail -t"
+mailer="/usr/lib/sendmail -t"
 gpg_opts=""
-dist=th
-url="http://src.th.pld-linux.org:1234/"
+dist=ti
+url="http://kraz.tld-linux.org:1231/"
 
 # defaults:
 f_upgrade=yes
@@ -61,6 +65,8 @@ fi
 specs=
 df_fetch=no
 upgrade_macros=no
+upgrade_scripts=no
+cr=$(printf "\r")
 
 # Set colors
 c_star=$(tput setaf 2)
@@ -82,20 +88,26 @@ send_request() {
        # switch to mail mode, if no url set
        [ -z "$url" ] && send_mode="mail"
 
+       if [ -n "$wait" ]; then
+               msg "Waiting $wait seconds before sending request"
+               sleep $wait
+               msg "Wait has ended, proceeding!"
+       fi
+
        case "$send_mode" in
        "mail")
                msg "Sending using mail mode"
                cat - | $mailer
                ;;
        *)
-               msg "Sending using http mode to $url"
+               msg "Sending using HTTP mode to $url"
                cat - | python -c '
 import sys, socket, urllib2
 
 try:
         data = sys.stdin.read()
         url = sys.argv[1]
-        socket.setdefaulttimeout(10)
+        socket.setdefaulttimeout(30)
         req = urllib2.Request(url, data)
         f = urllib2.urlopen(req)
         f.close()
@@ -108,6 +120,12 @@ print >> sys.stdout, "Request queued via HTTP."
        esac
 }
 
+# htmlspecialchars: escape <, > and &
+hsc() {
+       local input=$1
+       echo -E "$input" | sed -e 's,&,\&amp;,g;s,<,\&lt;,g;s,>,\&gt;,g'
+}
+
 # simple df_fetcher, based on packages/fetchsrc_request
 # TODO: tcp (smtp) mode
 # TODO: adjust for ~/.requestrc config
@@ -115,7 +133,7 @@ df_fetch() {
        local specs="$@"
 
        # Sending by
-       local MAILER='/usr/sbin/sendmail'
+       local MAILER='/usr/lib/sendmail'
        # MAILER='/usr/bin/msmtp'
        # Sending via
        local VIA="SENDMAIL"
@@ -126,23 +144,24 @@ df_fetch() {
        # VIA_ARGS='-a gmail'
        #
        # DISTFILES EMAIL
-       local DMAIL="distfiles@pld-linux.org"
+       local DMAIL="df@tld-linux.org"
 
        local HOST=$(hostname -f)
        local LOGIN=${requester%@*}
 
+       local SPEC BRANCH
        for spec in $specs; do
-               local SPEC=$(echo "$spec" | sed -e 's|:.*||')
-               local BRANCH=$(echo "$spec" | sed -e 's|.*:||')
+               SPEC=$(echo "$spec" | sed -e 's|:.*||')
+               SPEC=${SPEC%.spec}
+               BRANCH=$(echo "$spec" | sed -e 's|.*:||')
                echo >&2 "Distfiles Request: $SPEC:$BRANCH via $MAILER ${VIA_ARGS:+ ($VIA_ARGS)}"
                cat <<-EOF | "$MAILER" -t -i $VIA_ARGS
                        To: $DMAIL
                        From: $LOGIN <$LOGIN@$HOST>
                        Subject: fetchsrc_request notify
-                       X-CVS-Module: SPECS
                        X-distfiles-request: yes
                        X-Login: $LOGIN
-                       X-Spec: $SPEC
+                       X-Package: $SPEC
                        X-Branch: $BRANCH
                        X-Flags: force-reply
 
@@ -160,19 +179,21 @@ autotag() {
                s=${s%:*}
                # ensure package ends with .spec
                s=${s%.spec}.spec
-               out=$(cvs status -v $s | awk "!/Sticky/&&/auto-$dist-/{if (!a++) print \$1}")
+               git fetch --tags
+               out=$(git for-each-ref --count=1 --sort=-authordate refs/tags/auto/$dist \
+                       --format='%(refname:short)')
                echo "$s:$out"
        done
 }
 
 # get autotag for specs
-# WARNING: This may checkout some files from CVS
+# WARNING: This may checkout some files from VCS
 get_autotag() {
        local pkg spec rpmdir
 
        rpmdir=$(rpm -E %_topdir)
-       cd $rpmdir
        for pkg in "$@"; do
+               cd $rpmdir
                # strip branches
                pkg=${pkg%:*}
                # strip .spec extension
@@ -185,11 +206,17 @@ get_autotag() {
                        # just print it out, to fallback to base pkg name
                        echo "$pkg"
                else
-                       autotag $pkg/$pkg.spec
+                       cd $pkg
+                       autotag $pkg.spec
                fi
        done
 }
 
+relup() {
+       local script=$(dirname $(rpm -E %_topdir))/rpm-build-tools/relup.sh
+       $script -u -i "$@"
+}
+
 usage() {
        cat <<EOF
 Usage: make-request.sh [OPTION] ... [SPECFILE] ....
@@ -210,8 +237,10 @@ Mandatory arguments to long options are mandatory for short options too.
             set alt_kernel to VALUE
       --target VALUE
             set --target to VALUE
+      -D "NAME VALUE"|--define "NAME VALUE"
+            define macro named NAME with value VALUE
       -s BUILD_ID, --skip BUILD_ID[,BUILD_ID][,BUILD_ID]
-            mark build ids on src builder to be skipped
+            mark build ids on src builder to be skipped (instructs srcbuilder to create 'skipme' file)
       --branch VALUE
             specify default branch for specs in request
       -t, --test-build
@@ -222,6 +251,10 @@ Mandatory arguments to long options are mandatory for short options too.
             (and later moved by release manager staff to ready/ and main ftp tree)
       -u, --upgrade
             Forces package upgrade (for use with -c or -q, not -t)
+      --relup
+            Bump package release, see also --relup
+      -m, --message
+            Set commit message for relup
       -n, --no-upgrade
             Disables package upgrade (for use with -r)
       -ni, --no-install-br
@@ -251,14 +284,24 @@ Mandatory arguments to long options are mandatory for short options too.
             Updates builders infrastructure (outside chroot)
       --update-macros
             Updates rpm-build-macros on src builder
+      --update-scripts
+            Updates ~/rpm/rpm-build-tools on builder
+      --requester username
+            Override the requester
       -q
             shortcut for --command rpm -q ARGS
       -g, --gpg-opts "opts"
             Pass additional options to gpg binary
       -p, --priority VALUE
             sets request priority (default 2)
+      -w SECONDS
+            Wait SECONDS before sending actual request. Note: gpg passphrase is still asked immediately.
+            This may be useful if you just commited package and want to send it
+            for test build after distfiles has fetched the file.
       -h, --help
             Displays this help message
+      -v
+            Verbose. Print some more debug on screen
 EOF
        exit 0
 }
@@ -266,20 +309,10 @@ EOF
 # validate distro, set $dist
 set_dist() {
        case "$1" in
-       ac)
-               ;;
-       ac-java|ac-xen)
-               ;;
        ti)
                ;;
        ti-dev)
                ;;
-       th)
-               ;;
-       th-java)
-               ;;
-       aidath)
-               ;;
        *)
                die "dist \`$1' not known"
                ;;
@@ -288,7 +321,7 @@ set_dist() {
        dist=$1
 }
 
-while [ $# -gt 0 ] ; do
+while [ $# -gt 0 ]; do
        case "$1" in
                -d | --dist | --distro)
                        set_dist $2
@@ -311,6 +344,15 @@ while [ $# -gt 0 ] ; do
                        autotag=yes
                        ;;
 
+               -m)
+                       shift
+                       message=$1
+                       ;;
+
+               --relup)
+                       relup=yes
+                       ;;
+
                --with)
                        with="$with $(echo "$2" | tr ',' ' ')"
                        shift
@@ -336,6 +378,13 @@ while [ $# -gt 0 ] ; do
                        shift
                        ;;
 
+               -D|--define)
+                       value=${2#* }
+                       name=${2%% *}
+                       define="$define$cr$name=$value"
+                       shift
+                       ;;
+
                -s|--skip)
                        skip="$2"
                        shift
@@ -380,6 +429,11 @@ while [ $# -gt 0 ] ; do
                        jobs="${1#-j}"
                        ;;
 
+               -w)
+                       wait="$2"
+                       shift
+                       ;;
+
                -v)
                        verbose=yes
                        ;;
@@ -445,6 +499,10 @@ while [ $# -gt 0 ] ; do
                        upgrade_macros="yes"
                        ;;
 
+               --update-scripts)
+                       upgrade_scripts='yes'
+                       ;;
+
                -df | --distfiles-fetch | --distfiles-fetch-request)
                        df_fetch=yes
                        ;;
@@ -458,6 +516,11 @@ while [ $# -gt 0 ] ; do
                        usage
                        ;;
 
+               --requester)
+                       requester_override="$2"
+                       shift
+                       ;;
+
                -*)
                        die "unknown knob: $1"
                        ;;
@@ -470,24 +533,6 @@ while [ $# -gt 0 ] ; do
 done
 
 case "$dist" in
-ac)
-       builder_email="builder-ac@pld-linux.org"
-       default_builders="ac-*"
-       default_branch="AC-branch"
-       url="http://ep09.pld-linux.org:1289/"
-       control_url="http://ep09.pld-linux.org/~buildsrc"
-       ;;
-ac-java) # fake "dist" for java available ac architectures
-       builder_email="builder-ac@pld-linux.org"
-       default_builders="ac-i586 ac-i686 ac-athlon ac-amd64"
-       default_branch="AC-branch"
-       url="http://ep09.pld-linux.org:1289/"
-       ;;
-ac-xen) # fake "dist" for xen-enabled architectures
-       builder_email="builder-ac@pld-linux.org"
-       default_builders="ac-i686 ac-athlon ac-amd64"
-       default_branch="AC-branch"
-       ;;
 ti)
        builder_email="builderti@kraz.tld-linux.org"
        default_builders="ti-*"
@@ -500,21 +545,6 @@ ti-dev)
        url="http://kraz.tld-linux.org:1232/"
        control_url="http://kraz.tld-linux.org/~buildertidev"
        ;;
-th)
-       builder_email="builderth@pld-linux.org"
-       default_builders="th-*"
-       url="http://src.th.pld-linux.org:1234/"
-       control_url="http://src.th.pld-linux.org"
-       ;;
-th-java) # fake "dist" for java available th architectures
-       builder_email="builderth@pld-linux.org"
-       default_builders="th-x86_64 th-athlon th-i686"
-       url="http://src.th.pld-linux.org:1234/"
-       ;;
-aidath)
-       builder_email="builderaidath@ep09.pld-linux.org"
-       default_builders="aidath-*"
-       ;;
 *)
        die "dist \`$dist' not known"
        ;;
@@ -587,21 +617,21 @@ specs=`for s in $specs; do
                # skip marker - pass it along
                echo $s
                ;;
-       *.spec:*) # spec with branch
-               echo $s
-               ;;
-       *.spec) # spec without branch
-               echo $(basename $s):$branch
-               ;;
        *:*) # package name with branch
-               echo $s | sed -e 's/:/.spec:/'
+               _specfile=$(basename ${s%:*})
+               echo ${_specfile%.spec}.spec:${s##*:}
                ;;
        *) # just package name
-               echo $(basename $s).spec:$branch
+               echo $(basename ${s%.spec}).spec:$branch
                ;;
        esac
 done`
 
+if [ "$relup" = "yes" ]; then
+       msg "Auto relup enabled"
+       relup ${message:+-m "$message"} $specs
+fi
+
 if [ "$autotag" = "yes" ]; then
        msg "Auto autotag build enabled"
        specs=$(get_autotag $specs)
@@ -619,8 +649,16 @@ if [ "$upgrade_macros" = "yes" ]; then
        build_mode=test
 fi
 
+if [ "$upgrade_scripts" = "yes" ]; then
+       command="cd ~/rpm/rpm-build-tools && git pull"
+       command_flags=as-builder
+       builders="$dist-src"
+       f_upgrade=no
+       build_mode=test
+fi
+
 if [[ "$requester" != *@* ]] ; then
-       requester="$requester@pld-linux.org"
+       requester="$requester@tld-linux.org"
 fi
 
 if [ -z "$builders" ] ; then
@@ -676,12 +714,16 @@ gen_req() {
                msg "Build mode: $(tput setaf 3)$build_mode$c_norm"
        fi
 
+       if [ -n "$requester_override" ] ; then
+               echo "  <requester>$requester_override</requester>"
+       fi
+
        msg "Queue-ID: $id"
        echo
 
        # job to depend on
        local depend=
-       local b i=1
+       local b i=1 val
        local name branch builders_xml
 
        for b in $builders; do
@@ -694,7 +736,7 @@ gen_req() {
                echo -E >&2 "* Command: $command"
                echo "  <batch id='$bid' depends-on=''>"
                echo "           <command flags='$command_flags'>"
-               echo -E "$command" | sed -e 's,&,\&amp;,g;s,<,\&lt;,g;s,>,\&gt;,g'
+               hsc "$command"
                echo "</command>"
                echo "           <info></info>"
                echo "$builders_xml"
@@ -725,6 +767,17 @@ gen_req() {
                echo "           <branch>$branch</branch>"
                echo "           ${kernel:+<kernel>$kernel</kernel>}"
                echo "           ${target:+<target>$target</target>}"
+
+               oIFS=$IFS; IFS=$cr
+               for b in $define; do
+                       [ -z "$b" ] && continue
+                       value=${b#*=}
+                       b=${b%%=*}
+                       echo "           <define name='$(hsc $b)'>$(hsc "$value")</define>"
+                       msg "- define $b=$value"
+               done
+               IFS=$oIFS
+
                echo "           <info></info>"
                echo
                for b in $with; do
@@ -750,7 +803,7 @@ gen_req() {
                echo -E >&2 "* Post-Command: $post_command"
                echo "  <batch id='$bid' depends-on='$depend'>"
                echo "           <command flags='$command_flags'>"
-               echo -E "$post_command" | sed -e 's,&,\&amp;,g;s,<,\&lt;,g;s,>,\&gt;,g'
+               hsc "$post_command"
                echo "</command>"
                echo "           <info></info>"
                echo "$builders_xml"
@@ -776,8 +829,8 @@ gen_email () {
        To: $builder_email
        Subject: build request
        Message-Id: <$id@$(hostname)>
-       X-New-PLD-Builder: request
-       X-Requester-Version: \$Id$
+       X-New-TLD-Builder: request
+       X-Requester-Version: $VERSION
 
        EOF