Blame return_disttag.sh

Pat Riehecky 4d96e5
#!/bin/bash -u
Pat Riehecky 4d96e5
#
Pat Riehecky 4d96e5
# Extracts what appears to be the value of %{dist} from the commit message
Pat Riehecky 4d96e5
#
Pat Riehecky 4d96e5
# Might want to drop this in ~/bin/ and chmod u+x it
Pat Riehecky 4d96e5
Pat Riehecky 4d96e5
#####################################################################
Pat Riehecky 4d96e5
usage() {
Pat Riehecky 4d96e5
    echo ''                                               >&2
Pat Riehecky 4d96e5
    echo "$0 [-hr]"                                       >&2
Pat Riehecky 4d96e5
    echo ''                                               >&2
Pat Riehecky 4d96e5
    echo ' -h: This help message'                         >&2
Pat Riehecky 4d96e5
    echo ' -r: Use the Redhat tag rather than centos tag' >&2
Mike McLean e5597e
    echo ' -q: Suppress warnings'                         >&2
Pat Riehecky 4d96e5
    echo ''                                               >&2
Pat Riehecky 4d96e5
    echo '  Attempt to extract what appears to be the value of %{dist}' >&2
Pat Riehecky 4d96e5
    echo '  from the git.centos.org commit message'       >&2
Pat Riehecky 4d96e5
    exit 1
Pat Riehecky 4d96e5
}
Pat Riehecky 4d96e5
Pat Riehecky 4d96e5
Pat Riehecky 4d96e5
#####################################################################
Pat Riehecky 4d96e5
# setup args in the right order for making getopt evaluation
Pat Riehecky 4d96e5
# nice and easy.  You'll need to read the manpages for more info
Mike McLean e5597e
args=$(getopt -o hrq -- "$@")
Pat Riehecky 4d96e5
if [[ $? -ne 0 ]]; then
Pat Riehecky 4d96e5
    usage
Pat Riehecky 4d96e5
fi
Pat Riehecky 4d96e5
eval set -- "$args"
Pat Riehecky 4d96e5
Pat Riehecky 4d96e5
RHELTAG=0
Mike McLean e5597e
QUIET=0
Mike McLean e5597e
for arg in "$@"; do
Pat Riehecky 4d96e5
    case $1 in
Pat Riehecky 4d96e5
        -- )
Pat Riehecky 4d96e5
            # end of getopt args, shift off the -- and get out of the loop
Pat Riehecky 4d96e5
            shift
Pat Riehecky 4d96e5
            break 2
Pat Riehecky 4d96e5
           ;;
Pat Riehecky 4d96e5
         -r )
Pat Riehecky 4d96e5
            # skip any package with 'centos' in the dist area
Pat Riehecky 4d96e5
            RHELTAG=1
Pat Riehecky 4d96e5
           ;;
Mike McLean e5597e
         -q )
Mike McLean e5597e
            # suppress warnings
Mike McLean e5597e
            QUIET=1
Mike McLean e5597e
           ;;
Pat Riehecky 4d96e5
         -h )
Pat Riehecky 4d96e5
            # get help
Pat Riehecky 4d96e5
            usage
Pat Riehecky 4d96e5
           ;;
Pat Riehecky 4d96e5
    esac
Pat Riehecky 4d96e5
done
Pat Riehecky 4d96e5
Mike McLean e5597e
warn () {
Mike McLean e5597e
    [[ ${QUIET} -eq 1 ]] && return
Mike McLean e5597e
    echo 1>&2 "$@"
Mike McLean e5597e
}
Pat Riehecky 4d96e5
Mike McLean e5597e
if [[ ! -d .git ]] || [[ ! -d SPECS ]]; then
Pat Riehecky 4d96e5
    echo 'You need to run this from inside a sources git repo'
Pat Riehecky 4d96e5
    exit 1
Pat Riehecky 4d96e5
fi
Pat Riehecky 4d96e5
Mike McLean e5597e
# check metadata file and extract package name
Mike McLean e5597e
packagename=""
Mike McLean e5597e
shopt -s nullglob
Mike McLean e5597e
for fn in .*.metadata
Mike McLean e5597e
do
Mike McLean e5597e
    pn=${fn%.metadata}
Mike McLean e5597e
    pn=${pn#.}
Mike McLean e5597e
    if [ -e "SPECS/$pn.spec" ]
Mike McLean e5597e
    then
Mike McLean e5597e
        packagename="$pn"
Mike McLean e5597e
        break
Mike McLean e5597e
    fi
Mike McLean e5597e
done
Mike McLean e5597e
if [ -z "$packagename" ]
Mike McLean e5597e
then
Mike McLean e5597e
    echo 'Missing metadata or spec. Please run from inside a sources git repo'
Pat Riehecky 4d96e5
    exit 1
Pat Riehecky 4d96e5
fi
Pat Riehecky 4d96e5
Mike McLean e5597e
filter () {
Mike McLean e5597e
    # filter used for log messages
Mike McLean e5597e
    if [[ ${RHELTAG} -eq 1 ]]
Mike McLean e5597e
    then
Mike McLean e5597e
        grep -v centos | grep import
Mike McLean e5597e
    else
Mike McLean e5597e
        grep import
Mike McLean e5597e
    fi
Mike McLean e5597e
}
Mike McLean e5597e
Mike McLean e5597e
# extract nvr from commit message of last import
Mike McLean e5597e
msg=$(git log --pretty=format:"%s" | filter | head -n 1)
Mike McLean e5597e
set -- $msg
Mike McLean e5597e
pkg="$2"
Mike McLean e5597e
Mike McLean a6a9e5
# strip .src.rpm if present
Mike McLean a6a9e5
nvr1="${pkg%.src.rpm}"
Pat Riehecky 4d96e5
Mike McLean a6a9e5
#now get nvr from spec with placeholder dist
Mike McLean a6a9e5
mydist="XXXjsdf9ur7qlkasdh4gygXXX"
Mike McLean a6a9e5
nvr2=$(rpm --define "dist $mydist" -q --specfile "SPECS/$packagename.spec" --qf '%{n}-%{v}-%{r}\n' 2>/dev/null | head -n 1)
Mike McLean a6a9e5
Mike McLean a6a9e5
#use our placeholder dist to split the nvr
Mike McLean a6a9e5
head=${nvr2%$mydist*}
Mike McLean a6a9e5
Mike McLean a6a9e5
if [ ".$head" = ".$nvr2" ]
Mike McLean a6a9e5
then
Mike McLean a6a9e5
    #no dist tag
Mike McLean a6a9e5
    echo ""
Mike McLean a6a9e5
    exit
Mike McLean a6a9e5
fi
Mike McLean a6a9e5
Mike McLean a6a9e5
tail=${nvr2#*$mydist}
Mike McLean a6a9e5
Mike McLean a6a9e5
frag=${nvr1#$head}
Mike McLean a6a9e5
dist=${frag%$tail}
Mike McLean a6a9e5
Mike McLean e5597e
# sanity check
Mike McLean e5597e
nvr3=$(rpm --define "dist $dist" -q --specfile "SPECS/$packagename.spec" --qf '%{n}-%{v}-%{r}\n' 2>/dev/null | head -n 1)
Mike McLean e5597e
if [ ".$nvr3" != ".$nvr1" ]
Mike McLean e5597e
then
Mike McLean e5597e
    warn "Warning: $nvr3 != $nvr1"
Mike McLean e5597e
    warn "Warning: check failed. The %{dist} value may be incorrect"
Mike McLean e5597e
fi
Mike McLean e5597e
Mike McLean a6a9e5
echo "$dist"