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