X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=bin%2Fget-pick-list.sh;h=40a1388f96cf52f50423b217ad8301aad36915cd;hb=3b143369a55d1b79f7db14dda587e18f6b27c975;hp=c1f2bf11ca535bee03404097305a606ade751d7a;hpb=181203f3c5e9c6b3e95e0b93ad3b22630c3c0437;p=mesa.git diff --git a/bin/get-pick-list.sh b/bin/get-pick-list.sh index c1f2bf11ca5..40a1388f96c 100755 --- a/bin/get-pick-list.sh +++ b/bin/get-pick-list.sh @@ -13,37 +13,54 @@ is_stable_nomination() { - git show --summary "$1" | grep -q -i -o "CC:.*mesa-stable" + git show --pretty=medium --summary "$1" | grep -q -i -o "CC:.*mesa-stable" } is_typod_nomination() { - git show --summary "$1" | grep -q -i -o "CC:.*mesa-dev" + git show --pretty=medium --summary "$1" | grep -q -i -o "CC:.*mesa-dev" } -is_fixes_nomination() +fixes= + +# Helper to handle various mistypos of the fixes tag. +# The tag string itself is passed as argument and normalised within. +# +# Resulting string in the global variable "fixes" and contains entries +# in the form "fixes:$sha" +is_sha_nomination() { fixes=`git show --pretty=medium -s $1 | tr -d "\n" | \ - sed -e 's/fixes:[[:space:]]*/\nfixes:/Ig' | \ - grep "fixes:" | sed -e 's/\(fixes:[a-zA-Z0-9]*\).*$/\1/'` + sed -e 's/'"$2"'/\nfixes:/Ig' | \ + grep -Eo 'fixes:[a-f0-9]{4,40}'` - fixes_count=`echo "$fixes" | wc -l` - if [ $fixes_count -eq 0 ] ; then - return 0 + fixes_count=`echo "$fixes" | grep "fixes:" | wc -l` + if test $fixes_count -eq 0; then + return 1 fi - while [ $fixes_count -gt 0 ] ; do + + # Throw a warning for each invalid sha + while test $fixes_count -gt 0; do # Treat only the current line id=`echo "$fixes" | tail -n $fixes_count | head -n 1 | cut -d : -f 2` fixes_count=$(($fixes_count-1)) - - # Bail out if we cannot find suitable id. - # Any specific validation the $id is valid and not some junk, is - # implied with the follow up code - if [ "x$id" = x ] ; then - continue + if ! git show $id >/dev/null 2>&1; then + echo WARNING: Commit $1 lists invalid sha $id fi + done - #Check if the offending commit is in branch. + return 0 +} + +# Checks if at least one of offending commits, listed in the global +# "fixes", is in branch. +sha_in_range() +{ + fixes_count=`echo "$fixes" | grep "fixes:" | wc -l` + while test $fixes_count -gt 0; do + # Treat only the current line + id=`echo "$fixes" | tail -n $fixes_count | head -n 1 | cut -d : -f 2` + fixes_count=$(($fixes_count-1)) # Be that cherry-picked ... # ... or landed before the branchpoint. @@ -55,6 +72,25 @@ is_fixes_nomination() return 1 } +is_fixes_nomination() +{ + is_sha_nomination "$1" "fixes:[[:space:]]*" + if test $? -eq 0; then + return 0 + fi + is_sha_nomination "$1" "fixes[[:space:]]\+" +} + +is_brokenby_nomination() +{ + is_sha_nomination "$1" "broken by" +} + +is_revert_nomination() +{ + is_sha_nomination "$1" "This reverts commit " +} + # Use the last branchpoint as our limit for the search latest_branchpoint=`git merge-base origin/master HEAD` @@ -67,11 +103,11 @@ git log --reverse --pretty=medium --grep="cherry picked from commit" $latest_bra sed -e 's/^[[:space:]]*(cherry picked from commit[[:space:]]*//' -e 's/)//' > already_picked # Grep for potential candidates -git log --reverse --pretty=%H -i --grep='^CC:.*mesa-stable\|^CC:.*mesa-dev\|fixes:' $latest_branchpoint..origin/master |\ +git log --reverse --pretty=%H -i --grep='^CC:.*mesa-stable\|^CC:.*mesa-dev\|\\|\\|This reverts commit' $latest_branchpoint..origin/master |\ while read sha do # Check to see whether the patch is on the ignore list. - if [ -f bin/.cherry-ignore ] ; then + if test -f bin/.cherry-ignore; then if grep -q ^$sha bin/.cherry-ignore ; then continue fi @@ -82,18 +118,32 @@ do continue fi - if is_stable_nomination "$sha"; then + if is_fixes_nomination "$sha"; then + tag=fixes + elif is_brokenby_nomination "$sha"; then + tag=brokenby + elif is_revert_nomination "$sha"; then + tag=revert + elif is_stable_nomination "$sha"; then tag=stable elif is_typod_nomination "$sha"; then tag=typod - elif is_fixes_nomination "$sha"; then - tag=fixes else continue fi + case "$tag" in + fixes | brokenby | revert ) + if ! sha_in_range; then + continue + fi + ;; + * ) + ;; + esac + printf "[ %8s ] " "$tag" - git --no-pager show --summary --oneline $sha + git --no-pager show --no-patch --pretty=oneline $sha done rm -f already_picked