diff --git a/bin/git-missing b/bin/git-missing index 76d5116a8..81d2ad73c 100755 --- a/bin/git-missing +++ b/bin/git-missing @@ -1,21 +1,46 @@ #!/usr/bin/env bash -# grab first two non-option arguments -for arg in $*; do - if [ -n "${arg}" ]; then - test -z "$firstbranch" && firstbranch="${arg}" && continue - test -z "$secondbranch" && secondbranch="${arg}" && continue - else - # add anything else to a passthrough - passthrough="$passthrough $arg" - fi +usage() { + echo 1>&2 "usage: git missing [] []" +} + +if [ "${#}" -lt 1 ] +then + usage + exit 1 +fi + +declare -a git_log_args=() +declare -a branches=() +firstbranch= +secondbranch= +for arg in "$@" ; do + + case "$arg" in + --*) + git_log_args+=( "$arg" ) + ;; + *) + branches+=( "$arg" ) + ;; + esac done -test -z "$firstbranch" && echo "at least one branch required" && exit 1 +if [ ${#branches[@]} -eq 2 ] +then + firstbranch="${branches[0]}" + secondbranch="${branches[1]}" +elif [ ${#branches[@]} -eq 1 ] +then + secondbranch="${branches[0]}" +else + echo >&2 "error: at least one branch required" + exit 1 +fi if test -z "$secondbranch"; then secondbranch=$firstbranch firstbranch= fi -git log $passthrough $firstbranch...$secondbranch --format="%m %h %s" --left-right +git log "${git_log_args[@]}" "$firstbranch"..."$secondbranch" --format="%m %h %s" --left-right