Blob Blame History Raw
#!/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
    echo "$0 [-htq] [-b branch] [-c shasum]"              >&2
    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
    echo ' -t: Set srpm timestamp to commit date'         >&2
    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
KEEPTIMESTAMP=0
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
args=$(getopt -o htqb:c: -- "$@")
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
           ;;
         -t )
            # suppress warnings
            KEEPTIMESTAMP=1
            shift
           ;;
         -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

if [[ ${KEEPTIMESTAMP} -eq 1 ]]; then
    timestamp=$(git log --pretty=%ai -1)
    find . -type f -name \*.src.rpm -exec touch -d "${timestamp}" {} \;
fi

if [[ ${RC} -ne 0 ]]; then
    if [[ $QUIET -eq 1 ]]; then
        echo "$0 failed to recreate srpm" >&2
    fi
    exit 1
fi