bin/get-pick-list.sh: handle reverts prior to the branchpoint
[mesa.git] / bin / get-pick-list.sh
index 05dd3820e1262852ba30b245799152650860d934..9f9cbc44026d320097f00d95ddd894c2c0313484 100755 (executable)
@@ -21,17 +21,19 @@ is_typod_nomination()
        git show --summary "$1" | grep -q -i -o "CC:.*mesa-dev"
 }
 
-is_fixes_nomination()
+# Helper to handle various mistypos of the fixes tag.
+# The tag string itself is passed as argument and normalised within.
+is_sha_nomination()
 {
        fixes=`git show --pretty=medium -s $1 | tr -d "\n" | \
-               sed -e 's/fixes:[[:space:]]*/\nfixes:/Ig' | \
+               sed -e 's/'"$2"'/\nfixes:/Ig' | \
                grep -Eo 'fixes:[a-f0-9]{8,40}'`
 
        fixes_count=`echo "$fixes" | wc -l`
-       if [ $fixes_count -eq 0 ] ; then
+       if test $fixes_count -eq 0; then
                return 0
        fi
-       while [ $fixes_count -gt 0 ] ; do
+       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))
@@ -39,7 +41,7 @@ is_fixes_nomination()
                # 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
+               if test "x$id" = x; then
                        continue
                fi
 
@@ -55,6 +57,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 +88,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\|\<fixes\>\|\<broken by\>\|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
@@ -88,6 +109,10 @@ do
                tag=typod
        elif is_fixes_nomination "$sha"; then
                tag=fixes
+       elif is_brokenby_nomination "$sha"; then
+               tag=brokenby
+       elif is_revert_nomination "$sha"; then
+               tag=revert
        else
                continue
        fi