[CentOS-devel] [PATCH 2/3] + [PATCH 3/3] show_possible_srpms.sh

Fri Jun 13 22:43:58 UTC 2014
Elias Persson <delreich at takeit.se>


On 2014-06-13 23:53, Pat Riehecky wrote:
<snip>
> +# setup args in the right order for making getopt evaluation
> +# nice and easy.  You'll need to read the manpages for more info
> +# or review getopt-parse.bash under /usr/share/doc from which much was borrowed
> +args=$(getopt -o hrcq -- "$@")
> +if [[ $? -ne 0 ]]; then
> +    usage
> +fi
> +eval set -- "$args"
> +
> +RHELTAG=0
> +QUIET=0
> +WITHCOMMITHASH=0
> +for arg in "$@"; do

This should be a while loop. `shift` alters the script's parameter
list, not the list looped over by `for`.
(The getopt-parse.bash example should probably have emphasised that
as well as the need for quoting...)

Potential problem cases with this structure as it stands right now:

$0 -r -b c7 ...     # BRANCH=-b (I think)
$0 -b -b c7         # will probably trip unset variable error

In other words, do `while true`, shift the appropriate amount in
each case, and make sure to break / exit where appropriate
(including a catch-all should-not-happen case, as in the sample).


> +    case $1 in
> +        -- )
> +            # end of getopt args, shift off the -- and get out of the loop
> +            shift
> +            break 2

Not that it's likely to matter, but you only have one loop to break
out of here.


> +           ;;
> +         -r )
> +            # skip any package with 'centos' in the dist area
> +            RHELTAG=1
> +           ;;
> +         -c )
> +            # return with the commit hash as a prefix of the resulting srpm
> +            WITHCOMMITHASH=1
> +           ;;
> +         -q )
> +            # suppress warnings
> +            QUIET=1
> +           ;;
> +         -b )
> +            # Check this particular branch
> +            BRANCH=$2
> +            shift
> +            shift
> +           ;;
> +         -h )
> +            # get help
> +            usage
> +           ;;
> +    esac
> +done
> +
<snip>
> +
> +if [[ "x${BRANCH}" != 'x' ]]; then
> +    echo "Someone with git-foo, a little help?"
> +    exit 1

See Mike's additions to get_sources [1] for a way to find
branches containing HEAD and/or the current branch.

> +else
> +    loglist=$(git log --pretty="%H|%s" | filter)
> +fi


[1] 
https://git.centos.org/blobdiff/centos-git-common.git/c61c1ca/get_sources.sh
lines 62 to 86