paulsd / centos-git-common

Forked from centos-git-common 4 years ago
Clone
Blob Blame History Raw
#!/bin/bash -u
#
# Finds all possible srpms for a given repo
#
# Might want to drop this in ~/bin/ and chmod u+x it

#####################################################################
usage() {
    echo ''                                               >&2
    echo "$0 [-hrcq] [-b branch]"                         >&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 ' -r: Use the Redhat tag rather than centos tag' >&2
    echo ' -c: Return in sha:srpm format'                 >&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 ''                                               >&2
    echo "  $0 -b c7"                                     >&2
    echo "  $0 -r -b c7"                                  >&2
    echo "  $0 -c -b remotes/origin/c7"                   >&2
    exit 1
}

#####################################################################
warn () {
    [[ ${QUIET} -eq 1 ]] && return
    echo 1>&2 "$@"
}

#####################################################################
filter () {
    # filter used for log messages
    if [[ ${RHELTAG} -eq 1 ]]
    then
        grep -v centos | grep import
    else
        grep import
    fi
}

#####################################################################
if [[ $? -ne 0 ]]; then
    usage
fi

if [[ ! -d .git ]] || [[ ! -d SPECS ]]; then
    echo 'You need to run this from inside a sources git repo'
    exit 1
fi

RHELTAG=0
QUIET=0
WITHCOMMITHASH=0
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 hrcqb: -- "$@")
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
           ;;
         -r )
            # skip any package with 'centos' in the dist area
            RHELTAG=1
            shift
           ;;
         -c )
            # return with the commit hash as a prefix of the resulting srpm
            WITHCOMMITHASH=1
            shift
           ;;
         -q )
            # suppress warnings
            QUIET=1
            shift
           ;;
         -b )
            # Check this particular branch 
            BRANCH=$2
            shift
            shift
           ;;
         -h )
            # get help
            usage
           ;;
    esac
done

# 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