2014-06-25 12:38:48 -05:00
|
|
|
#!/bin/bash -u
|
|
|
|
#
|
|
|
|
# Turn a centos git repo into a .src.rpm file
|
|
|
|
#
|
|
|
|
# Might want to drop this in ~/bin/ and chmod u+x it
|
|
|
|
|
|
|
|
#
|
|
|
|
# License: GPLv2
|
|
|
|
#
|
|
|
|
# Initial Author: Pat Riehecky <riehecky at fnal.gov>
|
|
|
|
#
|
|
|
|
|
|
|
|
#####################################################################
|
|
|
|
usage() {
|
|
|
|
echo '' >&2
|
2014-07-10 10:46:03 -05:00
|
|
|
echo "$0 [-htq] [-b branch] [-c shasum]" >&2
|
2014-06-25 12:38:48 -05:00
|
|
|
echo '' >&2
|
|
|
|
echo 'You need to run this from inside a sources git repo' >&2
|
|
|
|
echo '' >&2
|
|
|
|
echo ' -h: This help message' >&2
|
|
|
|
echo ' -q: Suppress warnings' >&2
|
2014-07-10 10:46:03 -05:00
|
|
|
echo ' -t: Set srpm timestamp to commit date' >&2
|
2014-06-25 12:38:48 -05:00
|
|
|
echo '' >&2
|
|
|
|
echo ' -b: specify a branch to examine' >&2
|
|
|
|
echo " defaults to repo's current branch" >&2
|
|
|
|
echo " NOTE: your repo will be set to this branch">&2
|
|
|
|
echo '' >&2
|
|
|
|
echo ' -c: specify a commit id' >&2
|
|
|
|
echo " defaults to repo's current commit id" >&2
|
|
|
|
echo " NOTE: your repo will be set to this commit">&2
|
|
|
|
echo '' >&2
|
|
|
|
echo " $0" >&2
|
|
|
|
echo " $0 -b c7" >&2
|
|
|
|
echo " $0 -b remotes/origin/c7" >&2
|
|
|
|
echo " $0 -c 865ae5909b2b5d5fb37971b7ad7960f1fd5a5ffa" >&2
|
|
|
|
echo " $0 -b c7 -c 865ae5909b2b5d5fb37971b7ad7960f1fd5a5ffa" >&2
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
|
|
|
#####################################################################
|
|
|
|
|
|
|
|
QUIET=0
|
2014-07-10 10:46:03 -05:00
|
|
|
KEEPTIMESTAMP=0
|
2014-06-25 12:38:48 -05:00
|
|
|
COMMITHASH=""
|
|
|
|
BRANCH=""
|
|
|
|
|
|
|
|
#####################################################################
|
|
|
|
# setup args in the right order for making getopt evaluation
|
|
|
|
# nice and easy. You'll need to read the manpages for more info
|
|
|
|
# utilizing 'while' construct rather than 'for arg' to avoid unnecessary
|
|
|
|
# shifting of program args
|
2014-07-10 10:46:03 -05:00
|
|
|
args=$(getopt -o htqb:c: -- "$@")
|
2014-06-25 12:38:48 -05:00
|
|
|
eval set -- "$args"
|
|
|
|
|
|
|
|
while [[ 0 -eq 0 ]]; do
|
|
|
|
case $1 in
|
|
|
|
-- )
|
|
|
|
# end of getopt args, shift off the -- and get out of the loop
|
|
|
|
shift
|
|
|
|
break
|
|
|
|
;;
|
2014-07-10 10:46:03 -05:00
|
|
|
-t )
|
|
|
|
# suppress warnings
|
|
|
|
KEEPTIMESTAMP=1
|
|
|
|
shift
|
|
|
|
;;
|
2014-06-25 12:38:48 -05:00
|
|
|
-q )
|
|
|
|
# suppress warnings
|
|
|
|
QUIET=1
|
|
|
|
shift
|
|
|
|
;;
|
|
|
|
-c )
|
|
|
|
# Use this commit id
|
|
|
|
COMMITHASH=$2
|
|
|
|
shift
|
|
|
|
shift
|
|
|
|
;;
|
|
|
|
-b )
|
|
|
|
# Check this particular branch
|
|
|
|
BRANCH=$2
|
|
|
|
shift
|
|
|
|
shift
|
|
|
|
;;
|
|
|
|
-h )
|
|
|
|
# get help
|
|
|
|
usage
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
|
|
|
if [[ ! -d .git ]] || [[ ! -d SPECS ]]; then
|
|
|
|
echo 'You need to run this from inside a sources git repo' >&2
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
which git >/dev/null 2>&1
|
|
|
|
if [[ $? -ne 0 ]]; then
|
|
|
|
echo 'You need git in PATH' >&2
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
which get_sources.sh >/dev/null 2>&1
|
|
|
|
if [[ $? -ne 0 ]]; then
|
|
|
|
echo 'You need get_sources.sh from centos-git-common in PATH' >&2
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
which return_disttag.sh >/dev/null 2>&1
|
|
|
|
if [[ $? -ne 0 ]]; then
|
|
|
|
echo 'You need return_disttag.sh from centos-git-common in PATH' >&2
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
which get_sources.sh >/dev/null 2>&1
|
|
|
|
if [[ $? -ne 0 ]]; then
|
|
|
|
echo 'You need get_sources.sh from centos-git-common in PATH' >&2
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ "x${BRANCH}" != 'x' ]]; then
|
|
|
|
if [[ $QUIET -eq 1 ]]; then
|
|
|
|
git fetch >/dev/null
|
|
|
|
git checkout ${BRANCH} >/dev/null
|
|
|
|
else
|
|
|
|
git fetch
|
|
|
|
git checkout ${BRANCH}
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ "x${COMMITHASH}" != 'x' ]]; then
|
|
|
|
if [[ $QUIET -eq 1 ]]; then
|
|
|
|
git fetch >/dev/null
|
|
|
|
git checkout ${COMMITHASH} >/dev/null
|
|
|
|
else
|
|
|
|
git fetch
|
|
|
|
git checkout ${COMMITHASH}
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ $QUIET -eq 1 ]]; then
|
|
|
|
get_sources.sh
|
|
|
|
else
|
|
|
|
get_sources.sh -q
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ $QUIET -eq 1 ]]; then
|
|
|
|
rpmbuild --define "%_topdir `pwd`" --define "%dist `return_disttag.sh -q`" -bs --nodeps SPECS/*.spec
|
|
|
|
RC=$?
|
|
|
|
else
|
|
|
|
rpmbuild --define "%_topdir `pwd`" --define "%dist `return_disttag.sh`" -bs --nodeps SPECS/*.spec
|
|
|
|
RC=$?
|
|
|
|
fi
|
|
|
|
|
2014-07-10 10:46:03 -05:00
|
|
|
if [[ ${KEEPTIMESTAMP} -eq 1 ]]; then
|
|
|
|
timestamp=$(git log --pretty=%ai -1)
|
|
|
|
find . -type f -name \*.src.rpm -exec touch -d "${timestamp}" {} \;
|
|
|
|
fi
|
|
|
|
|
2014-06-25 12:38:48 -05:00
|
|
|
if [[ ${RC} -ne 0 ]]; then
|
|
|
|
if [[ $QUIET -eq 1 ]]; then
|
|
|
|
echo "$0 failed to recreate srpm" >&2
|
|
|
|
fi
|
|
|
|
exit 1
|
|
|
|
fi
|