diff --git a/contrib/scripts/checkpatch-feature-branch.sh b/contrib/scripts/checkpatch-feature-branch.sh index 2e0b589194..e2fe5b422f 100755 --- a/contrib/scripts/checkpatch-feature-branch.sh +++ b/contrib/scripts/checkpatch-feature-branch.sh @@ -1,26 +1,35 @@ #!/bin/bash die() { - printf "%s\n" "$@" - exit 1 + printf "%s\n" "$@" + exit 1 } HEAD="${1:-HEAD}" BASE_DIR="$(dirname "$0")" -BASE_REF="refs/remotes/origin/" +if printf '%s' "$HEAD" | grep -q '\.\.'; then + # Check the explicitly specified range from the argument. + REFS=( $(git log --reverse --format='%H' "$HEAD") ) || die "not a valid range (HEAD is $HEAD)" +else + BASE_REF="refs/remotes/origin/" -RANGES=( $(git show-ref | sed 's#^\(.*\) '"$BASE_REF"'\(master\|nm-1-[0-9]\+\)$#\1..'"$HEAD"'#p' -n) ) + # the argument is only a single ref (or the default "HEAD"). + # Find all commits that branch off one of the stable branches or master + # and lead to $HEAD. These are the commits of the feature branch. -[ "${#RANGES[@]}" != 0 ] || die "cannot detect git-ranges (HEAD is $(git rev-parse HEAD))" + RANGES=( $(git show-ref | sed 's#^\(.*\) '"$BASE_REF"'\(master\|nm-1-[0-9]\+\)$#\1..'"$HEAD"'#p' -n) ) -REFS=( $(git log --reverse --format='%H' "${RANGES[@]}") ) + [ "${#RANGES[@]}" != 0 ] || die "cannot detect git-ranges (HEAD is $(git rev-parse HEAD))" -if [ "${#REFS[@]}" == 0 ] ; then - # no refs detected. This means, $HEAD is already on master (or one of the - # stable nm-1-* branches. Just check the patch itself. - REFS=( $HEAD ) + REFS=( $(git log --reverse --format='%H' "${RANGES[@]}") ) + + if [ "${#REFS[@]}" == 0 ] ; then + # no refs detected. This means, $HEAD is already on master (or one of the + # stable nm-1-* branches. Just check the patch itself. + REFS=( $HEAD ) + fi fi SUCCESS=0