From 181203f3c5e9c6b3e95e0b93ad3b22630c3c0437 Mon Sep 17 00:00:00 2001 From: Emil Velikov Date: Thu, 8 Nov 2018 15:05:16 +0000 Subject: bin/get-pick-list.sh: handle the fixes tag Having a separate script to handle the fixes tag, brings a number of issues, so let's fold it in get-pick-list.sh. v2: - pass the sha as argument to the function - Keep original sed pattern Cc: mesa-stable@lists.freedesktop.org Reviewed-by: Juan A. Suarez Signed-off-by: Emil Velikov --- bin/get-fixes-pick-list.sh | 81 ---------------------------------------------- bin/get-pick-list.sh | 46 ++++++++++++++++++++++++-- 2 files changed, 43 insertions(+), 84 deletions(-) delete mode 100755 bin/get-fixes-pick-list.sh (limited to 'bin') diff --git a/bin/get-fixes-pick-list.sh b/bin/get-fixes-pick-list.sh deleted file mode 100755 index 047ea3bec1..0000000000 --- a/bin/get-fixes-pick-list.sh +++ /dev/null @@ -1,81 +0,0 @@ -#!/bin/sh - -# Script for generating a list of candidates [referenced by a Fixes tag] for -# cherry-picking to a stable branch -# -# Usage examples: -# -# $ bin/get-fixes-pick-list.sh -# $ bin/get-fixes-pick-list.sh > picklist -# $ bin/get-fixes-pick-list.sh | tee picklist - -# Use the last branchpoint as our limit for the search -latest_branchpoint=`git merge-base origin/master HEAD` - -# List all the commits between day 1 and the branch point... -git log --reverse --pretty=%H $latest_branchpoint > already_landed - -# ... and the ones cherry-picked. -git log --reverse --pretty=medium --grep="cherry picked from commit" $latest_branchpoint..HEAD |\ - grep "cherry picked from commit" |\ - sed -e 's/^[[:space:]]*(cherry picked from commit[[:space:]]*//' -e 's/)//' > already_picked - -# Grep for commits with Fixes tag -git log --reverse --pretty=%H -i --grep="fixes:" $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 grep -q ^$sha bin/.cherry-ignore ; then - continue - fi - fi - - # Skip if it has been already cherry-picked. - if grep -q ^$sha already_picked ; then - continue - fi - - # Place every "fixes:" tag on its own line and join with the next word - # on its line or a later one. - fixes=`git show --pretty=medium -s $sha | tr -d "\n" | sed -e 's/fixes:[[:space:]]*/\nfixes:/Ig' | grep "fixes:" | sed -e 's/\(fixes:[a-zA-Z0-9]*\).*$/\1/'` - - # For each one try to extract the tag - fixes_count=`echo "$fixes" | wc -l` - warn=`(test $fixes_count -gt 1 && echo $fixes_count) || echo 0` - while [ $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 - fi - - # Check if the offending commit is in branch. - - # Be that cherry-picked ... - # ... or landed before the branchpoint. - if grep -q ^$id already_picked || - grep -q ^$id already_landed ; then - - printf "Commit \"%s\" fixes %s\n" \ - "`git log -n1 --pretty=oneline $sha`" \ - "$id" - warn=$(($warn-1)) - fi - - done - - if [ $warn -gt 0 ] ; then - printf "WARNING: Commit \"%s\" has more than one Fixes tag\n" \ - "`git log -n1 --pretty=oneline $sha`" - fi - -done - -rm -f already_picked -rm -f already_landed diff --git a/bin/get-pick-list.sh b/bin/get-pick-list.sh index 2476b593f1..c1f2bf11ca 100755 --- a/bin/get-pick-list.sh +++ b/bin/get-pick-list.sh @@ -21,16 +21,53 @@ is_typod_nomination() git show --summary "$1" | grep -q -i -o "CC:.*mesa-dev" } +is_fixes_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/'` + + fixes_count=`echo "$fixes" | wc -l` + if [ $fixes_count -eq 0 ] ; then + return 0 + fi + while [ $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 + fi + + #Check if the offending commit is in branch. + + # Be that cherry-picked ... + # ... or landed before the branchpoint. + if grep -q ^$id already_picked || + grep -q ^$id already_landed ; then + return 0 + fi + done + return 1 +} + # Use the last branchpoint as our limit for the search latest_branchpoint=`git merge-base origin/master HEAD` -# Grep for commits with "cherry picked from commit" in the commit message. +# List all the commits between day 1 and the branch point... +git log --reverse --pretty=%H $latest_branchpoint > already_landed + +# ... and the ones cherry-picked. git log --reverse --pretty=medium --grep="cherry picked from commit" $latest_branchpoint..HEAD |\ grep "cherry picked from commit" |\ sed -e 's/^[[:space:]]*(cherry picked from commit[[:space:]]*//' -e 's/)//' > already_picked -# Grep for commits that were marked as a candidate for the stable tree. -git log --reverse --pretty=%H -i --grep='^CC:.*mesa-stable\|^CC:.*mesa-dev' $latest_branchpoint..origin/master |\ +# Grep for potential candidates +git log --reverse --pretty=%H -i --grep='^CC:.*mesa-stable\|^CC:.*mesa-dev\|fixes:' $latest_branchpoint..origin/master |\ while read sha do # Check to see whether the patch is on the ignore list. @@ -49,6 +86,8 @@ do tag=stable elif is_typod_nomination "$sha"; then tag=typod + elif is_fixes_nomination "$sha"; then + tag=fixes else continue fi @@ -58,3 +97,4 @@ do done rm -f already_picked +rm -f already_landed -- cgit v1.2.3