~ubuntu-branches/ubuntu/utopic/xen/utopic

« back to all changes in this revision

Viewing changes to xen/arch/ia64/tools/sparse-merge

  • Committer: Bazaar Package Importer
  • Author(s): Bastian Blank
  • Date: 2010-05-06 15:47:38 UTC
  • mto: (1.3.1) (15.1.1 sid) (4.1.1 experimental)
  • mto: This revision was merged to the branch mainline in revision 3.
  • Revision ID: james.westby@ubuntu.com-20100506154738-agoz0rlafrh1fnq7
Tags: upstream-4.0.0
ImportĀ upstreamĀ versionĀ 4.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/bin/bash
 
2
# Generate a patch for each of the ia64 files in the linux-2.6-xen-sparse tree
 
3
 
 
4
# Path to mercurial tree of upstream Linux
 
5
# WARNING: This will do an 'hg up -C' on the upstream Linux tree, you
 
6
#          will lose data if there's anything there you care about.
 
7
: ${LINUXPATH:=/tmp/linux-2.6}
 
8
# Tag of current base upstream image for Xen files
 
9
: ${OLDTAG:=v$(awk '/^LINUX_VER/{print $NF}' buildconfigs/mk.linux-2.6-xen)}
 
10
# Tag of new upstream base to go to
 
11
: ${NEWTAG:=v$(wget -O- -o/dev/null http://kernel.org/kdist/finger_banner \
 
12
    | awk '/latest stable/{print $NF}')}
 
13
# Restrict merge to specific arch (set to . for all)
 
14
: ${ARCH:=ia64}
 
15
 
 
16
SPARSEDIR=linux-2.6-xen-sparse
 
17
WD=$PWD
 
18
 
 
19
if [ ! -d $SPARSEDIR ]; then
 
20
        echo "Can't find $SPARSEDIR directory."
 
21
        exit
 
22
fi
 
23
 
 
24
# Check for modified files in the sparse tree before starting
 
25
if hg st $SPARSEDIR | head | grep .; then
 
26
    echo
 
27
    echo "$SPARSEDIR contains modifications, please clean it up first"
 
28
    exit
 
29
fi
 
30
 
 
31
# We want the linux upstream tree to be at the OLDTAG to get the OLDTAG-Xen diff.
 
32
# Save current revision to restore when done
 
33
cd $LINUXPATH || exit 1
 
34
OLDCSET=$(hg parents | awk '/^changeset:/{print($2)}' | cut -f 1 -d :)
 
35
for t in $OLDTAG $NEWTAG; do
 
36
    [[ $t == *.* ]] || continue
 
37
    if ! hg tags | cut -f1 -d' ' | grep -Fx $t; then
 
38
        echo "Tag $t not found, ketching up"
 
39
        if [[ $t == *-* ]]; then
 
40
            # rc/pre/git versions start at the previous stable release
 
41
            micro=${t%%-*}; micro=${micro##*.}
 
42
            stable=${t%%-*}; stable=${stable%.*}.$((micro-1))
 
43
            hg up -C $stable
 
44
        else
 
45
            hg up -C ${t%.*} || exit 1
 
46
        fi
 
47
        ketchup ${t#v} || exit 1
 
48
        hg addremove
 
49
        hg ci -m $t
 
50
        hg tag -l $t
 
51
    fi
 
52
done
 
53
hg up -C $OLDTAG || exit 1
 
54
 
 
55
cd $WD
 
56
for i in $(hg manifest | awk '{print($3)}' | grep $SPARSEDIR | grep "$ARCH"); do
 
57
        cd $WD
 
58
 
 
59
        FILENAME=$(basename $i)
 
60
        DIRNAME=$(dirname $i)
 
61
        DIFFPATH=$(echo $i | sed -e "s,^$SPARSEDIR,$LINUXPATH,")
 
62
 
 
63
        if [ ! -d $DIRNAME ]; then
 
64
                echo "Hmm, something bad happened parsing directory name: $i"
 
65
                continue
 
66
        fi
 
67
 
 
68
        if [ ! -e $DIFFPATH ]; then
 
69
                continue
 
70
        fi
 
71
 
 
72
        echo -n "$i ... "
 
73
 
 
74
        cd $DIRNAME
 
75
        XENDIR=$(pwd)
 
76
 
 
77
        ORIGPATH=$(echo $i | sed -e "s/^$SPARSEDIR/./")
 
78
        APATH=$(echo $i | sed -e "s/^$SPARSEDIR/a/")
 
79
        BPATH=$(echo $i | sed -e "s/^$SPARSEDIR/b/")
 
80
        cd $LINUXPATH
 
81
        hg diff -r $OLDTAG -r $NEWTAG $ORIGPATH | \
 
82
            sed -e "s,^--- $APATH,--- $FILENAME," \
 
83
                -e "s,^+++ $BPATH,+++ $FILENAME," \
 
84
            > $XENDIR/$FILENAME-$OLDTAG-$NEWTAG.diff
 
85
        cd $XENDIR
 
86
 
 
87
        # Do we have a diff file?  Did anything change?
 
88
        if [ ! -s $FILENAME-$OLDTAG-$NEWTAG.diff ]; then
 
89
                echo "SUCCESS (Upstream unchanged)"
 
90
                continue
 
91
        fi
 
92
 
 
93
        if ! patch -f -i $FILENAME-$OLDTAG-$NEWTAG.diff > /dev/null 2>&1; then
 
94
                # It failed, how badly?
 
95
                if [ ! -e ${FILENAME}.rej ]; then
 
96
                        echo "ERROR, Hmm, no .rej file, but diff failed, fix manually"
 
97
                        continue
 
98
                fi
 
99
                TONEWREJ=$(wc -l ${FILENAME}.rej | \
 
100
                           awk '{print($1)}')
 
101
                hg st $FILENAME | grep -q . && hg revert $FILENAME
 
102
                rm -f ${FILENAME}.rej ${FILENAME}.orig
 
103
                diff -uN $DIFFPATH $FILENAME | \
 
104
                    sed -e "s,^--- $DIFFPATH,--- $FILENAME," \
 
105
                    > $FILENAME-$OLDTAG-Xen.diff
 
106
 
 
107
                if [ ! -e $FILENAME-$OLDTAG-Xen.diff ]; then
 
108
                        echo "ERROR, failed to create patch file"
 
109
                        continue
 
110
                fi
 
111
 
 
112
                if ! patch -R -i $FILENAME-$OLDTAG-Xen.diff > /dev/null 2>&1; then
 
113
                        echo "ERROR, reverting Xen changes failed"
 
114
                        hg revert $FILENAME
 
115
                        continue
 
116
                fi
 
117
 
 
118
                if ! patch -f -i $FILENAME-$OLDTAG-$NEWTAG.diff > /dev/null 2>&1; then
 
119
                        echo "ERROR, new upstream patch failed on reverted file"
 
120
                        hg revert $FILENAME
 
121
                        continue
 
122
                fi
 
123
 
 
124
                if ! patch -f -i $FILENAME-$OLDTAG-Xen.diff > /dev/null 2>&1; then
 
125
                        if [ ! -e ${FILENAME}.rej ]; then
 
126
                                echo "ERROR, Hmm, no .rej file, but diff failed, fix manually"
 
127
                                continue
 
128
                        fi
 
129
                        TOXENREJ=$(wc -l ${FILENAME}.rej | \
 
130
                                   awk '{print($1)}')
 
131
 
 
132
                        if  [ $TOXENREJ -gt $TONEWREJ ]; then
 
133
                                hg revert $FILENAME
 
134
                                rm -f ${FILENAME}.rej ${FILENAME}.orig
 
135
                                patch -f -i $FILENAME-$OLDTAG-$NEWTAG.diff > /dev/null 2>&1
 
136
                                echo "MANUAL MERGE REQUIRED (Upstream reject)"
 
137
                        else
 
138
                                echo "MANUAL MERGE REQUIRED (Xen reject)"
 
139
                        fi
 
140
 
 
141
                else
 
142
                        rm -f ${FILENAME}.rej ${FILENAME}.orig
 
143
                        echo "SUCCESS (Re-applied Xen patch)"
 
144
                fi
 
145
        else
 
146
                        rm -f ${FILENAME}.rej ${FILENAME}.orig
 
147
                        echo "SUCCESS (Upstream applied)"
 
148
        fi
 
149
done
 
150
find $SPARSEDIR -name \*.diff -empty | xargs -r rm -f
 
151
cd $LINUXPATH
 
152
hg up -C $OLDCSET