summaryrefslogtreecommitdiff
path: root/packaging/update_git.sh
blob: 9583f1c8d465282c86d16a2d8f36f34c1635815c (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
#!/bin/bash -e
#
# While updating versions of QEMU to 1.0 I got fed up with the
# quilt workflow and just put up a git tree that contains all
# the commits on top of a stable tarball.
#
# When updating this package, just either update the git tree
# below (use rebase!) or change the tree path and use your own
#
# That way we can easily rebase against the next stable release
# when it comes.

GIT_TREE=git://github.com/openSUSE/qemu.git
GIT_LOCAL_TREE=~/git/qemu-opensuse
GIT_BRANCH=opensuse-2.0
GIT_UPSTREAM_TAG=v2.0.0
QEMU_TMP=/dev/shm/qemu-tmp

restore_file_to_package() {
# If the processed file matches the previous one, move the previous
# one back in place, otherwise add the processed file.

    if cmp -s "$1" saved."$1"; then
        osc mv --force saved."$1" "$1"
    else
        osc add "$1"
    fi
}

# save files in case they remain unchanged
if [ -e 0001-* ]; then
    for i in 0*; do
        osc mv $i saved.$i
    done
fi
osc mv qemu.spec saved.qemu.spec
osc mv qemu-linux-user.spec saved.qemu-linux-user.spec

# fetch all patches
rm -rf $QEMU_TMP
OSCDIR="$(pwd)"
if [ -d "$GIT_LOCAL_TREE" ]; then
    git clone -ls $GIT_LOCAL_TREE $QEMU_TMP
    cd $QEMU_TMP
else
    git clone $GIT_TREE $QEMU_TMP
    cd $QEMU_TMP
    git remote add upstream git://git.qemu.org/qemu.git
    git remote update
fi
git checkout $GIT_BRANCH 
git format-patch -N $GIT_UPSTREAM_TAG -o "$OSCDIR"
QEMU_VERSION=`cat VERSION`
cd "$OSCDIR"
rm -rf $QEMU_TMP

# cut off file name after 40 bytes, so we work around git version differences
# while at it, also remove the signature.
for i in 0*; do
    PATCHNAME=${i%.patch}
    PATCHNAME=${PATCHNAME:0:40}.patch
    head -n $(expr $(wc -l $i | cut -d ' ' -f 1) - 3) $i > "$PATCHNAME.tmp"
    rm "$i"
    mv "$PATCHNAME.tmp" "$PATCHNAME"
    restore_file_to_package "$PATCHNAME"
done

# we have all patches as files now - generate the spec files!
for package in qemu qemu-linux-user; do
  while IFS= read -r line; do
    if [ "$line" = "PATCH_FILES" ]; then
        for i in 0*; do
            NUM=${i%%-*}
            echo -e "Patch$NUM:      $i"
        done
    elif [ "$line" = "PATCH_EXEC" ]; then
        for i in 0*; do
            NUM=${i%%-*}
            echo "%patch$NUM -p1"
        done
    elif [ "$line" = "QEMU_VERSION" ]; then
        echo "Version:        $QEMU_VERSION"
    elif [[ "$line" =~ ^Source: ]]; then
        QEMU_TARBALL=qemu-`echo "$line" | cut -d '-' -f 2-`
        VERSION_FILE=${QEMU_TARBALL%.tar.bz2}/roms/seabios/.version
        SEABIOS_VERSION=`tar jxfO "$QEMU_TARBALL" "$VERSION_FILE"`
        SEABIOS_VERSION=`echo $SEABIOS_VERSION | cut -d '-' -f 2`
        echo "$line"
    elif [ "$line" = "SEABIOS_VERSION" ]; then
        echo "Version:        $SEABIOS_VERSION"
    else
        echo "$line"
    fi
  done < $package.spec.in > $package.spec
done

restore_file_to_package qemu.spec
restore_file_to_package qemu-linux-user.spec

# remove any remaining saved files
files=(saved.*)
if [ -e "${files[0]}" ]; then
    osc rm --force saved.*
fi