From 389478c4e904f5d2c82485e56bdcb0195f1850d0 Mon Sep 17 00:00:00 2001 From: Emil Velikov Date: Sat, 11 Feb 2017 16:47:56 +0000 Subject: [PATCH] bin/get-fixes-pick-list.sh: add new script The script parses the "Fixes" tags and nominates respective commit if applicable. Cc: "13.0 17.0" Signed-off-by: Emil Velikov Reviewed-by: Eric Engestrom --- bin/get-fixes-pick-list.sh | 61 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100755 bin/get-fixes-pick-list.sh diff --git a/bin/get-fixes-pick-list.sh b/bin/get-fixes-pick-list.sh new file mode 100755 index 00000000000..4ce9c92f8aa --- /dev/null +++ b/bin/get-fixes-pick-list.sh @@ -0,0 +1,61 @@ +#!/bin/bash + +# 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 --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 + # For each one try to extract the tag + fixes_count=`git show $sha | grep -i "fixes:" | wc -l` + if [ "x$fixes_count" != x1 ] ; then + echo WARNING: Commit $sha has nore than one Fixes tag + fi + fixes=`git show $sha | grep -i "fixes:" | head -n 1` + # The following sed/cut combination is borrowed from GregKH + id=`echo ${fixes} | sed -e 's/^[ \t]*//' | cut -f 2 -d ':' | sed -e 's/^[ \t]*//' | cut -f 1 -d ' '` + + # 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 + + # Finally nominate the fix if it hasn't landed yet. + if grep -q ^$sha already_picked ; then + continue + fi + + echo Commit $sha fixes $id + fi + +done + +rm -f already_picked +rm -f already_landed -- 2.30.2