aboutsummaryrefslogtreecommitdiff
path: root/debian.linaro/scripts/mkflavourbranches
blob: 9df01ddae8f18d12af4cba9975bfbda849be67f5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#!/bin/bash
#set -x
#set -e

DEBIAN=debian.linaro
source_pkg_name=$(dpkg-parsechangelog -l${DEBIAN}/changelog|grep Source|sed 's/^.*Source: //')
source_pkg_version=$(dpkg-parsechangelog -l${DEBIAN}/changelog|grep Version|sed 's/^.*Version: //')
common_flavour_prefix=linaro


function fail {
    echo $1
    exit -1
}

function checkclean {
    status=$(git status -s)
    test -z "$status" || fail "Only run this script in a clean repo"
}

function setup_working_branch {
    hoser=$(git branch -a | grep "  $1$")
    test -z "$hoser" || fail "$1 already exists"
    git checkout -b $1
}

function cleanup {
    git reset --hard  HEAD
    git clean -d -f -x
}

flavours=(shared ${DEBIAN}/control.d/vars.*)
flavours=(${flavours[*]##*vars.${common_flavour_prefix}-})
sharedflavour=${flavours[0]}

function do_flavour_branches {
    for flavour in ${flavours[*]}; do
        echo sharedflavour is $sharedflavour
        echo flavour is $flavour
        otherflavours=(${flavours[*]##$flavour})
        echo otherflavours are ${otherflavours[*]}

        single_flavour_branch=${working_branch}-$flavour-only
        git branch -f $single_flavour_branch HEAD
        git checkout $single_flavour_branch

        sed -i -e "s/^${source_pkg_name}/${source_pkg_name}-$flavour/" ${DEBIAN}/changelog
        git add ${DEBIAN}/changelog

        for otherflavour in ${otherflavours[*]}; do
            git rm ${DEBIAN}/config/armel/config.flavour.${common_flavour_prefix}-$otherflavour
            git rm ${DEBIAN}/control.d/vars.${common_flavour_prefix}-$otherflavour
            sed -i -e "/${common_flavour_prefix}-$otherflavour/d" ${DEBIAN}/d-i/kernel-versions.in
            git add ${DEBIAN}/d-i/kernel-versions.in
            sed -i -e "s/${common_flavour_prefix}-$otherflavour//" ${DEBIAN}/rules.d/armel.mk
            if [ "$flavour" = "$sharedflavour" ]; then
                # shared is where arch headers and tools debs are made
                sed -i -e "s/do_common_headers_indep.*=.*/do_common_headers_indep = false/" ${DEBIAN}/rules.d/armel.mk
                sed -i -e "s/do_tools.*=.*/do_tools = true/" ${DEBIAN}/rules.d/armel.mk
            else
                sed -i -e "s/do_common_headers_indep.*=.*/do_common_headers_indep = true/" ${DEBIAN}/rules.d/armel.mk
                sed -i -e "s/do_tools.*=.*/do_tools = false/" ${DEBIAN}/rules.d/armel.mk
            fi
            git add ${DEBIAN}/rules.d/armel.mk
        done

        git status
        if [ "$flavour" != "$sharedflavour" ]; then
            fakeroot ./debian/rules clean
            fakeroot ./debian/rules updateconfigs
            cat >> debian.linaro/config/armel/config.flavour.${common_flavour_prefix}-$flavour << END
#
# Single flavour kernel packages have no flavour dependent config options
# look in ../config.common.ubuntu for full config
#
END
            cat >> debian.linaro/config/armel/config.common.armel << END
#
# Single flavour kernel packages have no arch dependent config options
# look in ../config.common.ubuntu for full config
#
END
            git commit -s -m "LINARO: Cleanup configs after removing other flavours" debian.linaro/config
        fi
        git commit -s -m "LINARO: Linaro-${source_pkg_version} $flavour only"
        tagname="Linaro-${source_pkg_version}-${flavour}-only"
        git tag -f -s -m "$tagname" $tagname HEAD

        git push $remote_push -f HEAD:$flavour-only
        git push $remote_push -f $tagname

        git reset --hard HEAD
        git checkout $working_branch

        cleanup
    done
}

test $# -eq 1 || fail "must provide a pushable remote"

working_branch="tbranch$(dd 2>/dev/null if=/dev/urandom bs=10 count=1 | od -X | awk '{ print $2 }')"
echo Using $working_branch as working branch name

remote_push=$1

orig_branch=$(git symbolic-ref HEAD 2>/dev/null)
orig_branch=${orig_branch##refs/heads/}

checkclean

setup_working_branch $working_branch

git push $remote_push -f $working_branch:master
tagname="Linaro-${source_pkg_version}"
git tag -f -s -m "$tagname" $tagname HEAD
git push $remote_push -f $tagname

do_flavour_branches

git checkout $orig_branch
git branch -D $working_branch

cleanup