summaryrefslogtreecommitdiffstats
path: root/scripts/rebase.sh
blob: ac6522a4ce94a9cdab158fcabdd50c6d5555fb1a (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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
#!/bin/bash

KORG26="http://ftp.kernel.org/pub/linux/kernel/v2.6"
KORG26SNAPS="${KORG26}/snapshots"
KORG26TESTING="${KORG26}/testing"

if [ ! -f /usr/bin/curl ]; then
  echo yum install curl
  exit 0
fi

# Current kernel bits
if [ `grep -c patch-2.6 sources` -ge 1 ]; then
  export OLD=`grep patch-2.6 sources | awk '{print $2}' | tail -n1 | sed s/patch-// | sed s/\.bz2//`
else
  export OLD=`grep linux-2.6 sources | awk '{print $2}' | tail -n1 | sed s/linux-// | sed s/\.tar\.bz2//`
fi
export OLDBASE=`echo $OLD | sed s/-/\ /g | sed s/2\.6\.// | awk '{ print $1 }'`
if [ `echo $OLD | grep -c rc` -ge 1 ]; then
  export OLDRC=`echo $OLD | sed s/-/\ /g | sed s/rc// | awk '{ print $2 }'`
  if [ `echo $OLD | grep -c git` -ge 1 ]; then
    export OLDGIT=`echo $OLD | sed s/-/\ /g | sed s/git// | awk '{ print $3 }'`
  else
    export OLDGIT=0
  fi
else
  export OLDRC=0
  if [ `echo $OLD | grep -c git` -ge 1 ]; then
    export OLDGIT=`echo $OLD | sed s/-/\ /g | sed s/git// | awk '{ print $2 }'`
  else
    export OLDGIT=0
  fi
fi

# Is there a new snapshot or prepatch ?
NEW=`curl -s http://www.kernel.org/kdist/finger_banner | grep "latest snapshot 2.6 version"`
if [ -z "$NEW" ] ; then
  NEW=`curl -s http://www.kernel.org/kdist/finger_banner | grep "latest mainline 2.6 version"`
  if [ -z "$NEW" ] ; then
    if [ "$OLDRC" -ne 0 ] ; then
      NEW=`curl -s http://www.kernel.org/kdist/finger_banner | grep "latest stable 2.6." | head -n1`
    else
      echo "No new rc or git snapshot of stable branch".
      exit 0
    fi
  fi
fi
export N=`echo $NEW | awk '{ print $11 }'`
if [ -z "$N" ]; then
  # "Stable version"
  export NEW=`echo $NEW | awk '{ print $10 }'`
else
  export NEW=`echo $NEW | awk '{ print $11 }'`
fi

export NEWBASE=`echo $NEW | sed s/-/\ /g | sed s/2\.6\.// | awk '{ print $1 }'`
if [ `echo $NEW | grep -c rc` -ge 1 ]; then
  export NEWRC=`echo $NEW | sed s/-/\ /g | sed s/rc// | awk '{ print $2 }'`
  if [ `echo $NEW | grep -c git` -ge 1 ]; then
    export NEWGIT=`echo $NEW | sed s/-/\ /g | sed s/git// | awk '{ print $3 }'`
  else
    export NEWGIT=0
  fi
else
  export NEWRC=0
  if [ `echo $NEW | grep -c git` -ge 1 ]; then
    export NEWGIT=`echo $NEW | sed s/-/\ /g | sed s/git// | awk '{ print $2 }'`
  else
    export NEWGIT=0
  fi
fi

echo "OLD kernel was $OLD  BASE=$OLDBASE RC=$OLDRC GIT=$OLDGIT"
echo "NEW kernel is  $NEW  BASE=$NEWBASE RC=$NEWRC GIT=$NEWGIT"

if [ "$OLDRC" -eq 0 -a "$OLDGIT" -eq 0 -a "$OLDGIT" -ne "$NEWGIT" ]; then
  echo "Rebasing from a stable release to a new git snapshot"
  perl -p -i -e 's/^%define\ released_kernel\ 1/\%define\ released_kernel\ 0/' kernel.spec
  perl -p -i -e 's/^%define\ rawhide_skip_docs\ 1/\%define\ rawhide_skip_docs\ 0/' kernel.spec
  # force these to zero in this case, they may not have been when we rebased to stable
  perl -p -i -e 's/^%define\ rcrev.*/\%define\ rcrev\ 0/' kernel.spec
  perl -p -i -e 's/^%define\ gitrev.*/\%define\ gitrev\ 0/' kernel.spec
fi

# make sure we build docs at least once per -rc kernel, shut it off otherwise
if [ "$OLDRC" -ne 0 -a "$NEWRC" -gt "$OLDRC" ]; then
  perl -p -i -e 's/^%define\ rawhide_skip_docs\ 1/\%define\ rawhide_skip_docs\ 0/' kernel.spec
else
  if [ "$NEWRC" -eq "$OLDRC" -a "$NEWGIT" -gt "$OLDGIT" ]; then
    # common case, same -rc, new -git, make sure docs are off.
    perl -p -i -e 's/^%define\ rawhide_skip_docs\ 0/\%define\ rawhide_skip_docs\ 1/' kernel.spec
  fi
fi

if [ "$NEWRC" -eq 0 -a "$NEWGIT" -eq 0 ]; then
  echo "Rebasing from -rc to final release."
  perl -p -i -e 's/^%define\ released_kernel\ 0/\%define\ released_kernel\ 1/' kernel.spec
  perl -p -i -e 's/^%define\ rawhide_skip_docs\ 1/\%define\ rawhide_skip_docs\ 0/' kernel.spec
  export OLD_TARBALL_BASE=$(($OLDBASE-1))
  perl -p -i -e 's/^%define\ base_sublevel\ $ENV{OLD_TARBALL_BASE}/%define\ base_sublevel\ $ENV{NEWBASE}/' kernel.spec
  perl -p -i -e 's/^%define\ rcrev.*/\%define\ rcrev\ 0/' kernel.spec
  perl -p -i -e 's/^%define\ gitrev.*/\%define\ gitrev\ 0/' kernel.spec

  grep -v kernel-2.6.$OLD_TARBALL_BASE .gitignore >.gitignore.tmp ; mv .gitignore.tmp .gitignore
  echo kernel-2.6.$NEWBASE >> .gitignore

  for i in sources .gitignore
  do
   grep -v linux-2.6.$OLD_TARBALL_BASE.tar.bz2 $i > .$i.tmp; mv .$i.tmp $i
   grep -v patch-2.6.$OLDBASE-rc$OLDRC.bz2 $i > .$i.tmp; mv .$i.tmp $i
   grep -v patch-2.6.$OLDBASE-rc$OLDRC-git$OLDGIT.bz2 $i > .$i.tmp; mv .$i.tmp $i
  done

  rm -f linux-2.6.$OLD_TARBALL_BASE.tar.bz2
  rm -f patch-2.6.$OLDBASE-rc$OLDRC.bz2
  rm -f patch-2.6.$OLDBASE-rc$OLDRC-git$OLDGIT.bz2

  curl -O $KORG26/linux-$NEW.tar.bz2
  fedpkg upload linux-$NEW.tar.bz2

  exit 1
fi

if [ "$OLDRC" != "$NEWRC" ]; then
  echo "Different rc. Rebasing from $OLDRC to $NEWRC"
  perl -p -i -e 's/^%define\ rcrev.*/\%define\ rcrev\ $ENV{"NEWRC"}/' kernel.spec
  perl -p -i -e 's/$ENV{OLDBASE}-rc$ENV{OLDRC}.bz2/$ENV{NEWBASE}-rc$ENV{NEWRC}.bz2/' .gitignore
  grep -v patch-2.6.$OLDBASE-rc$OLDRC.bz2 sources > .sources.tmp; mv .sources.tmp sources
  grep -v patch-2.6.$OLDBASE-rc$OLDRC-git$OLDGIT.bz2 .gitignore >.gitignore.tmp ; mv .gitignore.tmp .gitignore
  if [ `grep -c patch-2.6.$NEWBASE-rc$NEWRC.bz2 sources` -eq 0 ]; then
    echo patch-2.6.$NEWBASE-rc$NEWRC.bz2 >> .gitignore
  fi
  rm -f patch-2.6.$OLDBASE-rc$OLDRC.bz2

  curl -O $KORG26TESTING/patch-2.6.$NEWBASE-rc$NEWRC.bz2
  fedpkg upload FILES=patch-2.6.$NEWBASE-rc$NEWRC.bz2

  # Another awkward (albeit unlikely) corner case.
  # Moving from say 26-rc3-git1 to 26-rc4-git1
  # The above will grab the new -rc, but the below will
  # think that the -git hasn't changed.
  # Fudge around this, by pretending the old git was something crazy.
  OLDGIT=99
fi

if [ "$OLDGIT" != "$NEWGIT" ]; then
  if [ "$OLDRC" -eq 0 -a "$OLDGIT" -eq 0 ]; then
    echo "Rebasing to pre-rc git$NEWGIT"
  else
    echo "Different git. Rebasing from git$OLDGIT to git$NEWGIT"
  fi
  perl -p -i -e 's/^%define\ gitrev.*/\%define\ gitrev\ $ENV{"NEWGIT"}/' kernel.spec
  if [ "$OLDGIT" -ne 0 ]; then
    if [ "$NEWGIT" -ne 0 ]; then
      perl -p -i -e 's/$ENV{OLD}/$ENV{NEW}/' .gitignore
    fi
    grep -v patch-$OLD.bz2 sources > .sources.tmp; mv .sources.tmp sources
  else
    echo patch-$NEW.bz2 >> .gitignore
  fi

  if [ "$NEWGIT" -ne 0 ]; then
  	curl -O $KORG26SNAPS/patch-$NEW.bz2
  fi
  fedpkg upload patch-$NEW.bz2

  if [ "$OLDGIT" -ne 0 ]; then
    rm -f patch-$OLD.bz2
  fi
fi

if [ "$OLDRC" != "$NEWRC" -o "$OLDGIT" != "$NEWGIT" ]; then
  perl -p -i -e 's|^ApplyPatch\ git-linus.diff|#ApplyPatch\ git-linus.diff|' kernel.spec
  > git-linus.diff
  fedpkg clog
  exit 1
else
  exit 0
fi