[CentOS-devel] [PATCH] Added script to turn a git.centos.org repo into a source rpm, using these tools.

Fri Jun 20 21:38:40 UTC 2014
Pat Riehecky <riehecky at fnal.gov>

KB?

On 06/17/2014 04:25 PM, Pat Riehecky wrote:
> From: Pat Riehecky <riehecky at fnal.gov>
>
> ---
>   into_srpm.sh |  173 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>   1 files changed, 173 insertions(+), 0 deletions(-)
>   create mode 100755 into_srpm.sh
>
> diff --git a/into_srpm.sh b/into_srpm.sh
> new file mode 100755
> index 0000000..2e254c4
> --- /dev/null
> +++ b/into_srpm.sh
> @@ -0,0 +1,173 @@
> +#!/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: GPLv3
> +#
> +#  Initial Author: Pat Riehecky <riehecky at fnal.gov>
> +#
> +
> +#####################################################################
> +usage() {
> +    echo ''                                               >&2
> +    echo "$0 [-hq] [-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 ''                                               >&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
> +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 hqb: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
> +           ;;
> +         -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'
> +    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'
> +    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'
> +    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
> +else
> +    rpmbuild --define "%_topdir `pwd`" --define "%dist `return_disttag.sh`" -bs --nodeps SPECS/*.spec
> +fi
> +
> +
> +
> +exit 1
> +
> +# commit message contains white space, set IFS to \n
> +IFS='
> +'
> +
> +if [[ "x${BRANCH}" != 'x' ]]; then
> +    loglist=$(git log ${BRANCH} --pretty="%H|%s" | filter)
> +    if [[ $? -ne 0 ]]; then
> +        exit 1
> +    fi
> +else
> +    loglist=$(git log --pretty="%H|%s" | filter)
> +    if [[ $? -ne 0 ]]; then
> +        exit 1
> +    fi
> +fi
> +
> +# flag for if nothing is found
> +FOUND=False
> +for entry in $loglist; do
> +    FOUND=True
> +
> +    pkg=$(echo ${entry} | cut -d' ' -f2)
> +    # strip .src.rpm if present
> +    nvr="${pkg%.src.rpm}"
> +    if [[ ${WITHCOMMITHASH} -eq 1 ]]; then
> +        shasum=$(echo ${entry} | cut -d'|' -f1)
> +        echo "${shasum}:${nvr}.src.rpm"
> +    else
> +        echo "${nvr}.src.rpm"
> +    fi
> +done
> +
> +if [ "${FOUND}" != "True" ]
> +then
> +    warn "No SRPMs found"
> +fi
> +


-- 
Pat Riehecky

Scientific Linux developer
http://www.scientificlinux.org/