+# create tempfile. as secure as possible
+tempfile() {
+ mktemp -t builder.XXXXXX || ${TMPDIR:-/tmp}/builder.$RANDOM.$$
+}
+
+tempdir() {
+ mktemp -d builder.XXXXXX
+}
+
+# inserts git log instead of %changelog
+# outputs name of modified file created by tempfile
+insert_gitlog() {
+ local SPECFILE=$1 specdir=$(tempdir) gitlog=$(tempfile) speclog=$(tempfile)
+
+ # allow this being customized
+ local log_entries=$(rpm -E '%{?_buildchangelogtruncate}')
+
+ # rpm5.org/rpm.org do not parse any other date format than 'Wed Jan 1 1997'
+ # otherwise i'd use --date=iso here
+ # http://rpm5.org/cvs/fileview?f=rpm/build/parseChangelog.c&v=2.44.2.1
+ # http://rpm.org/gitweb?p=rpm.git;a=blob;f=build/parseChangelog.c#l31
+ # NOTE: changelog date is always in UTC for rpmbuild
+ # * 1265749244 +0000 Random Hacker <nikt@pld-linux.org> 9370900
+ git rev-list -${log_entries:-20} HEAD | while read sha1; do
+ local logfmt='%B%n'
+ git notes list $sha1 &> /dev/null && logfmt=%N
+ git log -n 1 $sha1 --format=format:"* %ad %an <%ae> %h%n${logfmt}%n" --date=raw | sed '/^$/q'
+ done > $gitlog
+ gawk '/^\* /{printf("* %s %s\n", strftime("%a %b %d %Y", $2), substr($0, length($1)+length($2)+length($3)+4)); next}{print}' $gitlog > $speclog
+ sed '/^%changelog/,$d' $SPECFILE | sed -e "\${
+ a%changelog
+ r $speclog
+ }
+ " > $specdir/$SPECFILE
+ rm -f $gitlog $speclog
+ echo $specdir
+}
+