1*22ce4affSfengbojiang#!/bin/bash 2*22ce4affSfengbojiang 3*22ce4affSfengbojiangset -e 4*22ce4affSfengbojiang 5*22ce4affSfengbojiangcd $(dirname $0)/.. 6*22ce4affSfengbojiang 7*22ce4affSfengbojiangUPSTREAM_GIT="git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git" 8*22ce4affSfengbojiang 9*22ce4affSfengbojiangBRANCHES="master filter-state upstream/master upstream/dts" 10*22ce4affSfengbojiang 11*22ce4affSfengbojiangif [ ! -f scripts/filter.sh ] ; then 12*22ce4affSfengbojiang echo "`pwd`: does not appear to be a device-tree.git" 1>&2 13*22ce4affSfengbojiang exit 1 14*22ce4affSfengbojiangfi 15*22ce4affSfengbojiang 16*22ce4affSfengbojiangif [ -z "$LATEST_VERSION" ] ; then 17*22ce4affSfengbojiang FINGER_BANNER="https://www.kernel.org/finger_banner" 18*22ce4affSfengbojiang LATEST_VERSION=$(wget --quiet -O - "$FINGER_BANNER" |\ 19*22ce4affSfengbojiang sed -n -e '0,/^The latest mainline version of the Linux kernel is:\s*\(.*\)$/s//\1/p') 20*22ce4affSfengbojiangfi 21*22ce4affSfengbojiang 22*22ce4affSfengbojiangif [ -z "$LATEST_VERSION" ] ; then 23*22ce4affSfengbojiang echo "Unable to determine latest version" 1>&2 24*22ce4affSfengbojiang exit 1 25*22ce4affSfengbojiangfi 26*22ce4affSfengbojiang 27*22ce4affSfengbojiangecho "Latest Version: v$LATEST_VERSION" 28*22ce4affSfengbojiangif ! git show-ref --quiet --verify refs/tags/v${LATEST_VERSION} ; then 29*22ce4affSfengbojiang echo "Latest version is new" 30*22ce4affSfengbojiangfi 31*22ce4affSfengbojiangif ! git show-ref --quiet --verify refs/tags/v${LATEST_VERSION}-dts ; then 32*22ce4affSfengbojiang echo "Latest version is unmerged" 33*22ce4affSfengbojiangfi 34*22ce4affSfengbojiangecho 35*22ce4affSfengbojiang 36*22ce4affSfengbojiangecho "Current State:" 37*22ce4affSfengbojiangfor branch in $BRANCHES ; do 38*22ce4affSfengbojiang REF=$(git show-ref --verify refs/heads/${branch}) 39*22ce4affSfengbojiang if [ $? -ne 0 ] ; then 40*22ce4affSfengbojiang echo "Tree is missing required branch ${branch}, aborting" 1>&2 41*22ce4affSfengbojiang exit 1 42*22ce4affSfengbojiang fi 43*22ce4affSfengbojiang echo " ${REF}" 44*22ce4affSfengbojiangdone 45*22ce4affSfengbojiangecho 46*22ce4affSfengbojiang 47*22ce4affSfengbojiangtrap ' 48*22ce4affSfengbojiangif [ -n "$FILTER_OUTPUT" ] ; then 49*22ce4affSfengbojiang echo "---------------------------------------------------------------------" 50*22ce4affSfengbojiang echo "Filter Output:" 51*22ce4affSfengbojiang echo "---------------------------------------------------------------------" 52*22ce4affSfengbojiang echo "$FILTER_OUTPUT" 53*22ce4affSfengbojiang echo 54*22ce4affSfengbojiangfi 55*22ce4affSfengbojiangif [ -n "$MERGE_OUTPUT" ] ; then 56*22ce4affSfengbojiang echo "---------------------------------------------------------------------" 57*22ce4affSfengbojiang echo "Merge Output:" 58*22ce4affSfengbojiang echo "---------------------------------------------------------------------" 59*22ce4affSfengbojiang echo "$MERGE_OUTPUT" 60*22ce4affSfengbojiang echo 61*22ce4affSfengbojiangfi 62*22ce4affSfengbojiang' EXIT 63*22ce4affSfengbojiang 64*22ce4affSfengbojiangFILTER_OUTPUT=`( 65*22ce4affSfengbojiangset -e 66*22ce4affSfengbojiangecho "Switching to master branch" 67*22ce4affSfengbojianggit checkout master 68*22ce4affSfengbojiang 69*22ce4affSfengbojiangecho "Fetching $UPSTREAM_GIT master" 70*22ce4affSfengbojianggit fetch --tags "$UPSTREAM_GIT" master 71*22ce4affSfengbojiangecho 72*22ce4affSfengbojiang 73*22ce4affSfengbojiangecho "Filtering" 74*22ce4affSfengbojiang./scripts/filter.sh 75*22ce4affSfengbojiangecho 76*22ce4affSfengbojiang) 2>&1 ` 77*22ce4affSfengbojiang 78*22ce4affSfengbojiang#git push --dry-run origin filter-state upstream/dts upstream/master 79*22ce4affSfengbojiang#git push --dry-run origin --tags 80*22ce4affSfengbojiang#echo 81*22ce4affSfengbojiang 82*22ce4affSfengbojiangDATE=$(date +%Y%m%d) 83*22ce4affSfengbojiangTESTBRANCH=test-${DATE} 84*22ce4affSfengbojiangMERGE_OUTPUT=`( 85*22ce4affSfengbojiangset -e 86*22ce4affSfengbojianggit checkout -b ${TESTBRANCH} origin/master 87*22ce4affSfengbojianggit merge --no-edit upstream/dts 88*22ce4affSfengbojiang) 2>&1 ` 89*22ce4affSfengbojiangREF=$(git show-ref --verify refs/heads/${TESTBRANCH}) 90*22ce4affSfengbojiangecho "Testing: ${REF}" 91*22ce4affSfengbojiangif git log ${TESTBRANCH} -- MAINTAINERS | grep --quiet . ; then 92*22ce4affSfengbojiang echo "Filter branch has upstream-only content (MAINTAINERS file)" 93*22ce4affSfengbojiang exit 1 94*22ce4affSfengbojiangfi 95*22ce4affSfengbojiang 96*22ce4affSfengbojiangmake clean -s 97*22ce4affSfengbojiangTEST_OUTPUT=`make -k -s 2>&1 || true` 98*22ce4affSfengbojiangif [ -z "${TEST_OUTPUT}" ]; then 99*22ce4affSfengbojiang echo "Success!" 100*22ce4affSfengbojiangelse 101*22ce4affSfengbojiang echo "---------------------------------------------------------------------" 102*22ce4affSfengbojiang echo "Test Output:" 103*22ce4affSfengbojiang echo "---------------------------------------------------------------------" 104*22ce4affSfengbojiang echo "$TEST_OUTPUT" 105*22ce4affSfengbojiangfi 106*22ce4affSfengbojiangecho 107*22ce4affSfengbojiang 108*22ce4affSfengbojiangecho "Switching back to master branch" 109*22ce4affSfengbojianggit checkout master 110*22ce4affSfengbojiang 111*22ce4affSfengbojiangecho "Recording refs/tests/${DATE}" 112*22ce4affSfengbojianggit update-ref refs/tests/${DATE} ${TESTBRANCH} 113*22ce4affSfengbojiang 114*22ce4affSfengbojiangecho "Removing ${TESTBRANCH}" 115*22ce4affSfengbojianggit branch -D "${TESTBRANCH}" 116*22ce4affSfengbojiang 117*22ce4affSfengbojiangecho "Final State:" 118*22ce4affSfengbojiangfor branch in ${BRANCHES} ; do 119*22ce4affSfengbojiang REF=$(git show-ref --verify refs/heads/${branch}) 120*22ce4affSfengbojiang echo " ${REF}" 121*22ce4affSfengbojiangdone 122*22ce4affSfengbojiangecho 123*22ce4affSfengbojiang 124*22ce4affSfengbojiangexit 0 125