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
|
#!/bin/sh
# Generate debian/changelog.upstream from debian/changelog and
# the git revision log. Inspired by Gerrit Pape’s
# debian/changelog.upstream.sh, from the git-core Debian package.
set -e
# If argument matches /^Version: /, output remaining text.
# Result is true if and only if argument matches.
version_line() {
local line result
line=$1
result=${line#Version: }
if test "$result" = "$line"
then
return 1
else
printf "%s\n" "$result"
return 0
fi
}
# If argument matches /^\* New upstream snapshot.*commit /,
# output remaining text.
# Result is true if and only if argument matches.
commit_id_line() {
local line result
line=$1
result=${line#\* New upstream snapshot*commit }
if test "$result" = "$line"
then
return 1
else
printf "%s\n" "$result"
return 0
fi
}
# Read standard input, scanning for a changelog entry of the
# form “New upstream snapshot, taken from upstream commit <blah>.”
# Output is <blah>.
# Fails and writes a message to standard error if no such entry is
# found before the next Version: line with a different upstream
# version (or EOF).
# $1 is the upstream version sought.
read_commit_id() {
local upstream_version line version cid
upstream_version=$1
while read line
do
if
version=$(version_line "$line") &&
test "${version%-*}" != "$upstream_version"
then
break
fi
if cid=$(commit_id_line "$line")
then
printf "%s\n" "${cid%.}"
return 0
fi
done
echo >&2 "No commit id for $upstream_version"
return 1
}
last=none
last_cid=none
# Add a list of all revisions up to $last to debian/changelog.upstream
# and set last=$2.
# $1 is a user-readable name for the commit $2
add_version() {
local new new_cid limiter
new=$1
new_cid=$2
if test "$last" = none
then
: > debian/changelog.upstream+
last=$new
last_cid=$new_cid
return 0
fi
if test "$new" = "$last"
then
return 0
fi
exec >> debian/changelog.upstream+
if test "$new" = none
then
# pre-history
git show radeontool-1.6.0:CHANGES
else
echo "Version $last"
echo "Version $last" | tr "[:print:]" -
echo
if test "$new" = 1.5
then
# beginning of tracked history
git shortlog --no-merges "$last_cid"
else
git shortlog --no-merges "$new_cid".."$last_cid"
fi
echo
fi
last=$new
last_cid=$new_cid
}
v="radeontool-"
dpkg-parsechangelog --format rfc822 --all | {
while read line
do
if version=$(version_line "$line")
then
# strip Debian revision
upstream_version=${version%-*}
if test "$upstream_version" = "1.5"
then
# pre-history
add_version "$upstream_version" "untracked"
elif git rev-parse --verify -q "$v$upstream_version" > /dev/null
then
# upstream release
add_version "$upstream_version" "$v$upstream_version"
else
# snapshot
cid=$(read_commit_id "$upstream_version") || exit 1
add_version "$upstream_version" "$cid"
fi
fi
done
add_version none none
}
mv -f debian/changelog.upstream+ debian/changelog.upstream
|