summaryrefslogtreecommitdiffstats
path: root/docs/changelogs.example
diff options
context:
space:
mode:
Diffstat (limited to 'docs/changelogs.example')
-rwxr-xr-xdocs/changelogs.example246
1 files changed, 246 insertions, 0 deletions
diff --git a/docs/changelogs.example b/docs/changelogs.example
new file mode 100755
index 0000000..22ec3f9
--- /dev/null
+++ b/docs/changelogs.example
@@ -0,0 +1,246 @@
+#!/bin/sh
+# This is an example script that can be hooked into reprepro
+# to either generate a hierarchy like packages.debian.org/changelogs/
+# or to generate changelog files in the "third party sites"
+# location apt-get changelogs looks if it is not found in
+# Apt::Changelogs::Server.
+#
+# All you have to do is to:
+# - copy it into you conf/ directory,
+# - if you want "third party site" style changelogs, edit the
+# CHANGELOGDIR variable below,
+# and
+# - add the following to any distribution in conf/distributions
+# you want to have changelogs and copyright files extracted:
+#Log:
+# --type=dsc changelogs.example
+# (note the space at the beginning of the second line).
+# This will cause this script to extract changelogs for all
+# newly added source packages. (To generate them for already
+# existing packages, call "reprepro rerunnotifiers").
+
+# DEPENDENCIES: dpkg >= 1.13.9
+
+if test "x${REPREPRO_OUT_DIR:+set}" = xset ; then
+ # Note: due to cd, REPREPRO_*_DIR will no longer
+ # be usable. And only things relative to outdir will work...
+ cd "${REPREPRO_OUT_DIR}" || exit 1
+else
+ # this will also trigger if reprepro < 3.5.1 is used,
+ # in that case replace this with a manual cd to the
+ # correct directory...
+ cat "changelog.example needs to be run by reprepro!" >&2
+ exit 1
+fi
+
+# CHANGELOGDIR set means generate full hierarchy
+# (clients need to set Apt::Changelogs::Server to use that)
+CHANGELOGDIR=changelogs
+
+# CHANGELOGDIR empty means generate changelog (and only changelog) files
+# in the new "third party site" place apt-get changelog is using as fallback:
+#CHANGELOGDIR=
+
+# Set to avoid using some predefined TMPDIR or even /tmp as
+# tempdir:
+
+# TMPDIR=/var/cache/whateveryoucreated
+
+if test -z "$CHANGELOGDIR" ; then
+addsource() {
+ DSCFILE="$1"
+ CANONDSCFILE="$(readlink --canonicalize "$DSCFILE")"
+ CHANGELOGFILE="${DSCFILE%.dsc}.changelog"
+ BASEDIR="$(dirname "$CHANGELOGFILE")"
+ if ! [ -f "$CHANGELOGFILE" ] ; then
+ EXTRACTDIR="$(mktemp -d)"
+ (cd -- "$EXTRACTDIR" && dpkg-source --no-copy -x "$CANONDSCFILE" > /dev/null)
+ install --mode=644 -- "$EXTRACTDIR"/*/debian/changelog "$CHANGELOGFILE"
+ chmod -R u+rwX -- "$EXTRACTDIR"
+ rm -r -- "$EXTRACTDIR"
+ fi
+ if [ -L "$BASEDIR"/current."$CODENAME" ] ; then
+ # should not be there, just to be sure
+ rm -f -- "$BASEDIR"/current."$CODENAME"
+ fi
+ # mark this as needed by this distribution
+ ln -s -- "$(basename "$CHANGELOGFILE")" "$BASEDIR/current.$CODENAME"
+ JUSTADDED="$CHANGELOGFILE"
+}
+delsource() {
+ DSCFILE="$1"
+ CHANGELOGFILE="${DSCFILE%.dsc}.changelog"
+ BASEDIR="$(dirname "$CHANGELOGFILE")"
+ BASENAME="$(basename "$CHANGELOGFILE")"
+ if [ "x$JUSTADDED" = "x$CHANGELOGFILE" ] ; then
+ exit 0
+ fi
+# echo "delete, basedir=$BASEDIR changelog=$CHANGELOGFILE, dscfile=$DSCFILE, "
+ if [ "x$(readlink "$BASEDIR/current.$CODENAME")" = "x$BASENAME" ] ; then
+ rm -- "$BASEDIR/current.$CODENAME"
+ fi
+ NEEDED=0
+ for c in "$BASEDIR"/current.* ; do
+ if [ "x$(readlink -- "$c")" = "x$BASENAME" ] ; then
+ NEEDED=1
+ fi
+ done
+ if [ "$NEEDED" -eq 0 -a -f "$CHANGELOGFILE" ] ; then
+ rm -r -- "$CHANGELOGFILE"
+ # to remove the directory if now empty
+ rmdir --ignore-fail-on-non-empty -- "$BASEDIR"
+ fi
+}
+
+else # "$CHANGELOGDIR" set:
+
+addsource() {
+ DSCFILE="$1"
+ CANONDSCFILE="$(readlink --canonicalize "$DSCFILE")"
+ TARGETDIR="${CHANGELOGDIR}/${DSCFILE%.dsc}"
+ SUBDIR="$(basename $TARGETDIR)"
+ BASEDIR="$(dirname $TARGETDIR)"
+ if ! [ -d "$TARGETDIR" ] ; then
+ #echo "extract $CANONDSCFILE information to $TARGETDIR"
+ mkdir -p -- "$TARGETDIR"
+ EXTRACTDIR="$(mktemp -d)"
+ (cd -- "$EXTRACTDIR" && dpkg-source --no-copy -x "$CANONDSCFILE" > /dev/null)
+ install --mode=644 -- "$EXTRACTDIR"/*/debian/copyright "$TARGETDIR/copyright"
+ install --mode=644 -- "$EXTRACTDIR"/*/debian/changelog "$TARGETDIR/changelog"
+ chmod -R u+rwX -- "$EXTRACTDIR"
+ rm -r -- "$EXTRACTDIR"
+ fi
+ if [ -L "$BASEDIR"/current."$CODENAME" ] ; then
+ # should not be there, just to be sure
+ rm -f -- "$BASEDIR"/current."$CODENAME"
+ fi
+ # mark this as needed by this distribution
+ ln -s -- "$SUBDIR" "$BASEDIR/current.$CODENAME"
+ JUSTADDED="$TARGETDIR"
+}
+delsource() {
+ DSCFILE="$1"
+ TARGETDIR="${CHANGELOGDIR}/${DSCFILE%.dsc}"
+ SUBDIR="$(basename $TARGETDIR)"
+ BASEDIR="$(dirname $TARGETDIR)"
+ if [ "x$JUSTADDED" = "x$TARGETDIR" ] ; then
+ exit 0
+ fi
+# echo "delete, basedir=$BASEDIR targetdir=$TARGETDIR, dscfile=$DSCFILE, "
+ if [ "x$(readlink "$BASEDIR/current.$CODENAME")" = "x$SUBDIR" ] ; then
+ rm -- "$BASEDIR/current.$CODENAME"
+ fi
+ NEEDED=0
+ for c in "$BASEDIR"/current.* ; do
+ if [ "x$(readlink -- "$c")" = "x$SUBDIR" ] ; then
+ NEEDED=1
+ fi
+ done
+ if [ "$NEEDED" -eq 0 -a -d "$TARGETDIR" ] ; then
+ rm -r -- "$TARGETDIR"
+ # to remove the directory if now empty
+ rmdir --ignore-fail-on-non-empty -- "$BASEDIR"
+ fi
+}
+fi # CHANGELOGDIR
+
+ACTION="$1"
+CODENAME="$2"
+PACKAGETYPE="$3"
+if [ "x$PACKAGETYPE" != "xdsc" ] ; then
+# the --type=dsc should cause this to never happen, but better safe than sorry.
+ exit 1
+fi
+COMPONENT="$4"
+ARCHITECTURE="$5"
+if [ "x$ARCHITECTURE" != "xsource" ] ; then
+ exit 1
+fi
+NAME="$6"
+shift 6
+JUSTADDED=""
+if [ "x$ACTION" = "xadd" -o "x$ACTION" = "xinfo" ] ; then
+ VERSION="$1"
+ shift
+ if [ "x$1" != "x--" ] ; then
+ exit 2
+ fi
+ shift
+ while [ "$#" -gt 0 ] ; do
+ case "$1" in
+ *.dsc)
+ addsource "$1"
+ ;;
+ --)
+ exit 2
+ ;;
+ esac
+ shift
+ done
+elif [ "x$ACTION" = "xremove" ] ; then
+ OLDVERSION="$1"
+ shift
+ if [ "x$1" != "x--" ] ; then
+ exit 2
+ fi
+ shift
+ while [ "$#" -gt 0 ] ; do
+ case "$1" in
+ *.dsc)
+ delsource "$1"
+ ;;
+ --)
+ exit 2
+ ;;
+ esac
+ shift
+ done
+elif [ "x$ACTION" = "xreplace" ] ; then
+ VERSION="$1"
+ shift
+ OLDVERSION="$1"
+ shift
+ if [ "x$1" != "x--" ] ; then
+ exit 2
+ fi
+ shift
+ while [ "$#" -gt 0 -a "x$1" != "x--" ] ; do
+ case "$1" in
+ *.dsc)
+ addsource "$1"
+ ;;
+ esac
+ shift
+ done
+ if [ "x$1" != "x--" ] ; then
+ exit 2
+ fi
+ shift
+ while [ "$#" -gt 0 ] ; do
+ case "$1" in
+ *.dsc)
+ delsource "$1"
+ ;;
+ --)
+ exit 2
+ ;;
+ esac
+ shift
+ done
+fi
+
+exit 0
+# Copyright 2007,2008,2012 Bernhard R. Link <brlink@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1301 USA