File: stable-update.sh

package info (click to toggle)
linux 3.2.78-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 693,024 kB
  • sloc: ansic: 9,721,346; asm: 244,047; xml: 40,377; makefile: 23,845; perl: 16,079; python: 4,929; sh: 4,425; cpp: 3,598; yacc: 2,979; lex: 1,726; awk: 708; pascal: 231; lisp: 218; sed: 30
file content (78 lines) | stat: -rwxr-xr-x 1,904 bytes parent folder | download | duplicates (5)
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
#!/bin/bash -eu

if [ $# -ne 2 ]; then
    echo >&2 "Usage: $0 REPO VERSION"
    echo >&2 "REPO is the git repository to generate a changelog from"
    echo >&2 "VERSION is the stable version (without leading v)"
    exit 2
fi

# Get base version, i.e. the Linus stable release that a version is based on
base_version() {
    local ver
    ver="${1%-rc*}"
    case "$ver" in
	2.6.*.* | [3-9].*.* | ??.*.*)
	    ver="${ver%.*}"
	    ;;
    esac
    echo "$ver"
}

add_update() {
    local base update
    base="$(base_version "$1")"
    update="${1#$base.}"
    if [ "$update" = "$1" ]; then
	update=0
    fi
    update="$((update + $2))"
    if [ $update = 0 ]; then
	echo "$base"
    else
	echo "$base.$update"
    fi
}

# Get next stable update version
next_update() {
    add_update "$1" 1
}

export GIT_DIR="$1/.git"

new_ver="$2"
cur_pkg_ver="$(dpkg-parsechangelog | sed -n 's/^Version: //p')"
cur_ver="${cur_pkg_ver%-*}"

if [ "$(base_version "$new_ver")" != "$(base_version "$cur_ver")" ]; then
    echo >&2 "$new_ver is not on the same stable series as $cur_ver"
    exit 2
fi

case "$cur_pkg_ver" in
    *~experimental*)
	new_pkg_ver="$new_ver-1~experimental.1"
	;;
    *)
	new_pkg_ver="$new_ver-1"
	;;
esac

# dch insists on word-wrapping everything, so just add the URLs initially
dch -v "$new_pkg_ver" --preserve --multimaint-merge -D UNRELEASED \
    --release-heuristic=changelog "$(
    echo "New upstream stable update: "
    while [ "v$cur_ver" != "v$new_ver" ]; do
        cur_ver="$(next_update "$cur_ver")"
        echo "http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-$cur_ver"
    done)"

# Then insert the shortlogs with sed
while [ "v$cur_ver" != "v$new_ver" ]; do
    next_ver="$(next_update "$cur_ver")"
    sed -i '/ChangeLog-'"${next_ver//./\\.}"'/a\
'"$(git log --reverse --pretty='    - %s\' "v$cur_ver..v$next_ver^")"'
' debian/changelog
    cur_ver="$next_ver"
done