aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Hutchings <ben@decadent.org.uk>2016-05-06 21:30:48 +0100
committerBen Hutchings <ben@decadent.org.uk>2016-05-06 21:37:36 +0100
commit12fe9efbc6955472f1fca74dbe7848f18e4e4572 (patch)
tree68b41eee05c1ab011bdba3a3a25fbc84348f7eca
parentd25555f7983511550944bd867b0100d3b6a7ab22 (diff)
downloadkernel_replicant_linux-12fe9efbc6955472f1fca74dbe7848f18e4e4572.tar.gz
kernel_replicant_linux-12fe9efbc6955472f1fca74dbe7848f18e4e4572.tar.bz2
kernel_replicant_linux-12fe9efbc6955472f1fca74dbe7848f18e4e4572.zip
stable-update: Rewrite stable-update.sh in Python
This fixes some of the problems dch was causing: - Putting the stable log in the wrong place - Updating the date unnecessarily Change stable-update.sh to be a wrapper for stable-update. Delete ckt-stable-update.sh; if we need it again in future, it can be implemented more cleanly as part of the new script.
-rw-r--r--debian/README.source7
-rwxr-xr-xdebian/bin/ckt-stable-update.sh76
-rwxr-xr-xdebian/bin/stable-update126
-rwxr-xr-xdebian/bin/stable-update.sh80
-rw-r--r--debian/changelog1
5 files changed, 132 insertions, 158 deletions
diff --git a/debian/README.source b/debian/README.source
index 05718907591f..86c0a46ef405 100644
--- a/debian/README.source
+++ b/debian/README.source
@@ -75,10 +75,9 @@ Aside from those general rules:
list all changes that are relevant to our package and that fix bugs
that we would consider 'important' or higher severity
- - The script debian/bin/stable-update.sh updates the changelog
- version and inserts the list of changes (but it doesn't always
- put it in the right place!). It doesn't attempt to filter out
- irrelevant or unimportant changes.
+ - The script debian/bin/stable-update updates the changelog
+ version and inserts the list of changes. It doesn't attempt to
+ filter out irrelevant or unimportant changes.
- The script debian/bin/ckt-stable-update.sh does the same for
stable updates by the Canonical Kernel Team.
diff --git a/debian/bin/ckt-stable-update.sh b/debian/bin/ckt-stable-update.sh
deleted file mode 100755
index 729e18b783f2..000000000000
--- a/debian/bin/ckt-stable-update.sh
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/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 stable release that a branch started from
-base_version() {
- local ver
- ver="${1%-rc*}"
- case "$ver" in
- *-ckt*)
- ver="${ver%-*}"
- ;;
- esac
- echo "$ver"
-}
-
-add_update() {
- local base update
- base="$(base_version "$1")"
- update="${1#$base-ckt}"
- if [ "$update" = "$1" ]; then
- update=0
- fi
- update="$((update + $2))"
- if [ $update = 0 ]; then
- echo "$base"
- else
- echo "$base-ckt$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
- *~exp*)
- new_pkg_ver="$new_ver-1~exp1"
- ;;
- *)
- new_pkg_ver="$new_ver-1"
- ;;
-esac
-
-# dch insists on word-wrapping everything, so just add the first line initially
-dch -v "$new_pkg_ver" --preserve --multimaint-merge -D UNRELEASED \
- --release-heuristic=changelog 'New upstream stable update:'
-
-# Then append the shortlogs with sed
-sed -i '1,/^ --/ { /New upstream stable update:/ { a\
-'"$(
-while [ "v$cur_ver" != "v$new_ver" ]; do
- next_ver="$(next_update "$cur_ver")"
- echo " http://kernel.ubuntu.com/stable/ChangeLog-$next_ver\\"
- git log --reverse --pretty=' - %s\' "v$cur_ver..v$next_ver^"
- cur_ver="$next_ver"
-done)"'
-
-} }' debian/changelog
diff --git a/debian/bin/stable-update b/debian/bin/stable-update
new file mode 100755
index 000000000000..7a79348dc10e
--- /dev/null
+++ b/debian/bin/stable-update
@@ -0,0 +1,126 @@
+#!/usr/bin/python3
+
+import sys
+sys.path.append(sys.path[0] + "/../lib/python")
+
+import os, re, subprocess
+
+from debian_linux.debian import Changelog, VersionLinux
+
+def base_version(ver):
+ # Assume base version is at least 3.0, thus only 2 components wanted
+ match = re.match(r'^(\d+\.\d+)', ver)
+ assert match
+ return match.group(1)
+
+def add_update(ver, inc):
+ base = base_version(ver)
+ if base == ver:
+ update = 0
+ else:
+ update = int(ver[len(base)+1:])
+ update += inc
+ if update == 0:
+ return base
+ else:
+ return '{}.{}'.format(base, update)
+
+def next_update(ver):
+ return add_update(ver, 1)
+
+def print_stable_log(log, cur_ver, new_ver):
+ major_ver = re.sub(r'^(\d+)\..*', r'\1', cur_ver)
+ while cur_ver != new_ver:
+ next_ver = next_update(cur_ver)
+ print(' https://www.kernel.org/pub/linux/kernel/v{}.x/ChangeLog-{}'
+ .format(major_ver, next_ver),
+ file=log)
+ log.flush() # serialise our output with git's
+ subprocess.check_call(['git', 'log', '--reverse',
+ '--pretty= - %s',
+ 'v{}..v{}^'.format(cur_ver, next_ver)],
+ stdout=log)
+ cur_ver = next_ver
+
+def main(repo, new_ver):
+ os.environ['GIT_DIR'] = repo + '/.git'
+
+ changelog = Changelog(version=VersionLinux)
+ cur_pkg_ver = changelog[0].version
+ cur_ver = cur_pkg_ver.linux_upstream_full
+
+ if base_version(new_ver) != base_version(cur_ver):
+ print('{} is not on the same stable series as {}'
+ .format(new_ver, cur_ver),
+ file=sys.stderr)
+ sys.exit(2)
+
+ new_pkg_ver = new_ver + '-1'
+ if cur_pkg_ver.linux_revision_experimental:
+ new_pkg_ver += '~exp1'
+
+ # Three possible cases:
+ # 1. The current version has been released so we need to add a new
+ # version to the changelog.
+ # 2. The current version has not been released so we're changing its
+ # version string.
+ # (a) There are no stable updates included in the current version,
+ # so we need to insert an introductory line, the URL(s) and
+ # git log(s) and a blank line at the top.
+ # (b) One or more stable updates are already included in the current
+ # version, so we need to insert the URL(s) and git log(s) after
+ # them.
+
+ changelog_intro = 'New upstream stable update:'
+
+ # Case 1
+ if changelog[0].distribution != 'UNRELEASED':
+ subprocess.check_call(['dch', '-v', new_pkg_ver, '-D', 'UNRELEASED',
+ changelog_intro])
+
+ with open('debian/changelog', 'r') as old_log:
+ with open('debian/changelog.new', 'w') as new_log:
+ line_no = 0
+ inserted = False
+ intro_line = ' * {}\n'.format(changelog_intro)
+
+ for line in old_log:
+ line_no += 1
+
+ # Case 2
+ if changelog[0].distribution == 'UNRELEASED' and line_no == 1:
+ print('{} ({}) UNRELEASED; urgency={}'
+ .format(changelog[0].source, new_pkg_ver,
+ changelog[0].urgency),
+ file=new_log)
+ continue
+
+ if not inserted:
+ # Case 2(a)
+ if line_no == 3 and line != intro_line:
+ new_log.write(intro_line)
+ print_stable_log(new_log, cur_ver, new_ver)
+ new_log.write('\n')
+ inserted = True
+ # Case 1 or 2(b)
+ elif line_no > 3 and line == '\n':
+ print_stable_log(new_log, cur_ver, new_ver)
+ inserted = True
+
+ # Check that we inserted before hitting the end of the
+ # first version entry
+ assert not (line.startswith(' -- ') and not inserted)
+
+ new_log.write(line)
+
+ os.rename('debian/changelog.new', 'debian/changelog')
+
+if __name__ == '__main__':
+ if len(sys.argv) != 3:
+ print('''\
+Usage: {} REPO VERSION"
+REPO is the git repository to generate a changelog from
+VERSION is the stable version (without leading v)'''.format(sys.argv[0]),
+ file=sys.stderr)
+ sys.exit(2)
+ main(*sys.argv[1:])
diff --git a/debian/bin/stable-update.sh b/debian/bin/stable-update.sh
index 102ed168adc9..bd86860c63fc 100755
--- a/debian/bin/stable-update.sh
+++ b/debian/bin/stable-update.sh
@@ -1,78 +1,2 @@
-#!/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
- *~exp*)
- new_pkg_ver="$new_ver-1~exp1"
- ;;
- *)
- 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 "https://www.kernel.org/pub/linux/kernel/v${cur_ver%%.*}.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
+#!/bin/sh -e
+exec "$(dirname "$0")/stable-update" "$@"
diff --git a/debian/changelog b/debian/changelog
index a1e56ac506aa..95880d321ffa 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -11,6 +11,7 @@ linux (4.5.2-2) UNRELEASED; urgency=medium
(Closes: #823603)
* bpf: fix refcnt overflow (CVE-2016-4558)
* bpf: fix check_map_func_compatibility logic (CVE-2016-XXXX)
+ * stable-update: Rewrite stable-update.sh in Python
-- Uwe Kleine-König <ukleinek@debian.org> Sun, 01 May 2016 16:13:04 +0200