blob: ef7510c2842fee93ef726f7322b66fd8693b0606 (
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
|
#!/bin/sh
TEMP_D=""
error() { echo "$@" 1>&2; }
fail() { [ $# -eq 0 ] || error "$@"; exit 1; }
Usage() {
cat <<EOF
${0##*/} [branch]
update current branch with trunk branch.
branch defaults to 'master'
EOF
}
print_commit() {
local subject="$1" author="$2" bugs="$3" aname=""
aname=${author% <*}
echo " - $subject [${aname}]${bugs:+ (LP: ${bugs})}"
}
git_log_to_dch() {
local line="" commit="" lcommit="" bugs=""
while :; do
read line || break
case "$line" in
commit\ *)
if [ -n "$commit" ]; then
print_commit "$subject" "$author" "$bugs"
fi
commit=${line#*: }
bugs=""
author=""
subject=""
;;
Author:*) author="${line#Author: }";;
LP:*) bugs="${bugs:+${bugs}, }${line#*: }";;
"") [ -z "$subject" ] && read subject;;
esac
done
if [ -n "$commit" ]; then
print_commit "$subject" "$author" "$bugs"
fi
}
cleanup() {
[ ! -d "${TEMP_D}" ] || rm -Rf "${TEMP_D}"
}
from_ref=${1:-"master"}
cur_branch=$(git rev-parse --abbrev-ref HEAD) ||
fail "failed to get current branch"
case "$cur_branch" in
ubuntu/*) :;;
*) fail "You are on branch '$cur_branch', expect to be on ubuntu/*";;
esac
trap cleanup EXIT
prev_pkg_ver=$(dpkg-parsechangelog --show-field Version) ||
fail "failed reading package version"
pkg_name=$(dpkg-parsechangelog --show-field Source) ||
fail "failed to read Source from changelog"
# turn 0.7.7-10-gbc2c326-0ubuntu1 into 'bc2c326'
t=${prev_pkg_ver%-*}
prev_pkg_hash=${t##*-g}
new_pkg_upstream=$(git describe master)
new_pkg_debian="0ubuntu1"
new_upstream_ver=$(git describe "${from_ref}")
new_pkg_ver="${new_upstream_ver}-${new_pkg_debian}"
prev_upstream_ver=${prev_pkg_ver%-*}
if [ "${prev_upstream_ver}" = "${new_upstream_ver}" ]; then
echo "nothing to commit. '$from_ref' is at ${new_upstream_ver}."
exit 0
fi
git merge "${from_ref}" -m "merge from $from_ref at $new_upstream_ver" ||
fail "failed: git merge ${from_ref} -m 'merge from $from_ref ..'"
TEMP_D=$(mktemp -d) || fail "failed mktemp"
clog="${TEMP_D}/changelog"
gitlog="${TEMP_D}/gitlog"
git log --first-parent --no-decorate --format=full \
"${prev_pkg_hash}..${from_ref}" > "$gitlog" ||
fail "failed git log ${prev_pkg_hash}..${from_ref}"
cat >> "$clog" <<EOF
$pkg_name ($new_pkg_ver) UNRELEASED; urgency=medium
* New upstream snapshot.
EOF
git_log_to_dch < "$gitlog" >> "$clog" ||
fail "failed git_log_to_dch"
cat >> "$clog" <<EOF
-- ${DEBFULLNAME} <$DEBEMAIL> $(date -R)
EOF
cat "$clog" "debian/changelog" > "$TEMP_D/newlog" &&
cp "$TEMP_D/newlog" "debian/changelog" ||
fail "failed replacing debian/changelog"
dch -e || fail "dch -e exited $?"
git diff
echo -n "Commit this change? (Y/n): "
read answer || fail "failed to read answer"
case "$answer" in
n|[Nn][oO]) exit 1;;
esac
msg="update changelog (new upstream snapshot $new_upstream_ver)."
git commit -m "$msg" debian/changelog ||
fail "failed to commit '$msg'"
|