github.com/datadog/cilium@v1.6.12/contrib/backporting/cherry-pick (about)

     1  #!/bin/bash
     2  set -e
     3  
     4  source $(dirname $(readlink -ne $BASH_SOURCE))/common.sh
     5  
     6  cherry_pick () {
     7    CID=$1
     8    BRANCHES=`git branch -q -r --contains $CID $REM/master 2> /dev/null`
     9    if ! echo ${BRANCHES} | grep -q ".*$REM/master.*"; then
    10      echo "Commit $CID not in $REM/master!"
    11      exit 1
    12    fi
    13    TMPF=`mktemp cp.XXXXXX`
    14    FROM=`git show --pretty=email $CID | head -n 2 | grep "From: "`
    15    FULL_ID=`git show $CID | head -n 1 | cut -f 2 -d ' '`
    16    git format-patch -1 $FULL_ID --stdout | sed '/^$/Q' > $TMPF
    17    echo "" >> $TMPF
    18    echo "[ upstream commit $FULL_ID ]" >> $TMPF
    19    git format-patch -1 $FULL_ID --stdout | sed -n '/^$/,$p' >> $TMPF
    20    echo "Applying: $(git log -1 --oneline $FULL_ID)"
    21    git am --quiet -3 --signoff $TMPF
    22    rm $TMPF
    23  }
    24  
    25  main () {
    26    REM="$(get_remote)"
    27    for CID in "$@"; do
    28      cherry_pick "$CID"
    29    done
    30  }
    31  
    32  if [ $# -lt 1 ]; then
    33    echo "Usage: $0 <commit-id> [commit-id ...]"
    34    exit 1
    35  fi
    36  
    37  main "$@"