command_flags=
gpg_opts=
default_branch='HEAD'
-distro=
+dist=
url=
no_depend=no
verbose=no
+autotag=no
if [ -x /usr/bin/python ]; then
send_mode="python"
url="$url"
mailer="/usr/sbin/sendmail -t"
gpg_opts=""
-distro=th
+dist=th
url="http://src.th.pld-linux.org:1234/"
# defaults:
if [ -f "$USER_CFG" ]; then
. $USER_CFG
+ # legacy fallback
+ if [ "${distro:+set}" = "set" ]; then
+ dist=$distro
+ fi
fi
# internal options, not to be overriden
done
}
+# autotag from rpm-build-macros
+# displays latest used tag for a specfile
+autotag() {
+ local out s
+ for s in "$@"; do
+ # strip branches
+ s=${s%:*}
+ # ensure package ends with .spec
+ s=${s%.spec}.spec
+ out=$(cvs status -v $s | awk "!/Sticky/&&/auto-$dist-/{if (!a++) print \$1}")
+ echo "$s:$out"
+ done
+}
+
+# get autotag for specs
+# WARNING: This may checkout some files from CVS
+get_autotag() {
+ local pkg spec rpmdir
+
+ rpmdir=$(rpm -E %_topdir)
+ cd $rpmdir
+ for pkg in "$@"; do
+ # strip branches
+ pkg=${pkg%:*}
+ # strip .spec extension
+ pkg=${pkg%.spec}
+ # checkout only if missing
+ if [ ! -e $pkg/$pkg.spec ]; then
+ $rpmdir/builder -g $pkg -ns -r HEAD 1>&2
+ fi
+ if [ ! -e $pkg/$pkg.spec ]; then
+ # just print it out, to fallback to base pkg name
+ echo "$pkg"
+ else
+ autotag $pkg/$pkg.spec
+ fi
+ done
+}
+
usage() {
cat <<EOF
Usage: make-request.sh [OPTION] ... [SPECFILE] ....
--config-file /path/to/config/file
Source additional config file (after $USER_CFG), useful when
when sending build requests to Ac/Th from the same account
+ -a
+ Try to use latest auto-tag for the spec when building
+ WARNING: This will checkout new files to your packages dir
-b 'BUILDER BUILDER ...', --builder='BUILDER BUILDER ...'
- Sends request to given builders (in 'version-arch' format)
+ Sends request to given builders (in 'version-arch' format)
--with VALUE, --without VALUE
Build package with(out) a given bcond
--kernel VALUE
-j, --jobs
Number of parallel jobs for single build
-f, --flag
- -d, --distro DISTRO
- Specify value for \$distro
+ -d, --dist DISTRIBUTION_ID
+ Specify value for \$dist
-df, --distfiles-fetch[-request] PACKAGE
Send distfiles request to fetch sources for PACKAGE
-cf, --command-flag
exit 0
}
-# validate distro, set $distro
-set_distro() {
+# validate distro, set $dist
+set_dist() {
case "$1" in
ac)
;;
aidath)
;;
*)
- die "distro \`$1' not known"
+ die "dist \`$1' not known"
;;
esac
- distro=$1
+ dist=$1
}
while [ $# -gt 0 ] ; do
case "$1" in
- --distro | -d)
- set_distro $2
+ -d | --dist | --distro)
+ set_dist $2
shift
;;
shift
;;
+ -a)
+ autotag=yes
+ ;;
+
--with)
with="$with $(echo "$2" | tr ',' ' ')"
shift
shift
done
-case "$distro" in
+case "$dist" in
ac)
builder_email="builder-ac@pld-linux.org"
default_builders="ac-*"
url="http://ep09.pld-linux.org:1289/"
control_url="http://ep09.pld-linux.org/~buildsrc"
;;
-ac-java) # fake "distro" for java available ac architectures
+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 "distro" for xen-enabled architectures
+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"
url="http://src.th.pld-linux.org:1234/"
control_url="http://src.th.pld-linux.org"
;;
-th-java) # fake "distro" for java available th architectures
+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/"
default_builders="aidath-*"
;;
*)
- die "distro \`$distro' not known"
+ die "dist \`$dist' not known"
;;
esac
-# need to do this after distro selection
+# need to do this after dist selection
if [ "$skip" ]; then
skip=$(skip="$skip" control_url="$control_url" python -c '
import urllib2
priority=-1
command="skip:$skip"
command_flags="no-chroot"
- builders="$distro-src"
+ builders="$dist-src"
fi
branch=${branch:-$default_branch}
specs=`for s in $specs; do
case "$s" in
^)
- # skip marker
+ # skip marker - pass it along
echo $s
;;
*.spec:*) # spec with branch
esac
done`
+if [ "$autotag" = "yes" ]; then
+ msg "Auto autotag build enabled"
+ specs=$(get_autotag $specs)
+fi
+
if [ "$df_fetch" = "yes" ]; then
df_fetch $specs
exit 0
if [ "$upgrade_macros" = "yes" ]; then
command="poldek --up; poldek -uv rpm-build-macros"
- builders="$distro-src"
+ builders="$dist-src"
f_upgrade=no
build_mode=test
fi
msg "Using jobs $jobs"
echo " <maxjobs>$jobs</maxjobs>"
fi
- msg "Build mode: $build_mode"
if [ -z "$url" ]; then
msg "Using email $builder_email"
else
msg "Using URL $url"
fi
+
+ if [ "$build_mode" = "ready" ]; then
+ msg "Build mode: $(tput setaf 2)$build_mode$c_norm"
+ else
+ msg "Build mode: $(tput setaf 3)$build_mode$c_norm"
+ fi
+
msg "Queue-ID: $id"
echo
gen_email () {
# make request first, so the STDERR/STDOUT streams won't be mixed
- local req=$(gen_req)
+ local tmp req
+ tmp=$(mktemp)
+ gen_req > $tmp
if [ "$verbose" = "yes" ]; then
- echo >&2 -E "$req"
+ cat $tmp >&2
fi
-cat <<EOF
-From: $requester
-To: $builder_email
-Subject: build request
-Message-Id: <$id@$(hostname)>
-X-New-PLD-Builder: request
-X-Requester-Version: \$Id$
-
-$(echo -E "$req" | gpg --clearsign --default-key $default_key $gpg_opts)
-EOF
+
+ cat <<-EOF
+ From: $requester
+ To: $builder_email
+ Subject: build request
+ Message-Id: <$id@$(hostname)>
+ X-New-PLD-Builder: request
+ X-Requester-Version: \$Id$
+
+ EOF
+
+ gpg --clearsign --default-key $default_key $gpg_opts --output=- $tmp
+ rm -f $tmp
}
gen_email | send_request