From 4950fef543493ddac6ebebbc85a6ecfc8ea3a74f Mon Sep 17 00:00:00 2001 From: Jonas Smedegaard Date: Thu, 29 Nov 2007 01:23:02 +0000 Subject: Major changes (actually works now - except the magic 'any' section. --- localdebpool | 117 ++++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 95 insertions(+), 22 deletions(-) (limited to 'localdebpool') diff --git a/localdebpool b/localdebpool index 3ca414a..bfb43cc 100755 --- a/localdebpool +++ b/localdebpool @@ -3,24 +3,41 @@ set -e #set -x +ARCHS="i386 powerpc amd64" +DISTS="etch lenny sid" + SRCBASE=~/public_debian PUBBASE=~/public_websites/debian.jones.dk #PUBTOSRC=../../public_debian -pathsfromsuites() { +archsfrompaths() { + find "$@" -type l -exec find '{}'/ -type f -name '*.deb' ';' \ + | sed 's/^.*_\([a-z0-9-]\+\)\.deb$/\1/' \ + | sort -u +} + +distsfrompaths() { + find "$@" -mindepth 1 -maxdepth 1 -type d -printf '%f\n' +} + +pathsfromsections() { case "$@" in all) - suites_re="" + sections_re="" + ;; + "") + echo 1>&2 "ERROR: At least one section (or the magic \"all\") is needed." + exit 1 ;; *) - suites_re="\b\($(echo "$@" | sed 's/[[:space:]]\+/\\|/g')\)\b" + sections_re="\b\($(echo "$@" | sed 's/[[:space:]]\+/\\|/g')\)\b" ;; esac - find $SRCBASE -type f -name HINTS -exec grep -q "^Sections:.*$suites_re" '{}' ';' -printf '%h\n' \ + find $SRCBASE -type f -name HINTS -exec grep -q "^Sections:.*$sections_re" '{}' ';' -printf '%h\n' \ | sed "s,^$SRCBASE/,," } -suitesfrompaths() { +sectionsfrompaths() { case "$@" in all) fullpaths="$SRCBASE" @@ -40,10 +57,74 @@ suitesfrompaths() { | sort -u } -suites="$@" -paths="$(pathsfromsuites "$suites")" +genlist() { + dist="$1" + arch="$2" + srcdir="$3" + basedir="$4" + case "$arch" in + source) + destdir="$basedir/source"; + cmd="dpkg-scansources"; + file="Sources"; + ;; + *) + destdir="$basedir/binary_$arch"; + cmd="dpkg-scanpackages"; + file="Packages"; + ;; + esac + mkdir -p "$destdir" + ( cd "$srcdir" && $cmd $dist /dev/null pools/ ) > "$destdir/$file" + gzip -c "$destdir/$file" > "$destdir/$file.gz" + bzip2 -c "$destdir/$file" > "$destdir/$file.bz2" +} + +genlistsfromsection() { + section="$1" + case "$section" in + all) + srcdir="$SRCBASE/sections" + ;; + "") + echo 1>&2 "ERROR: At least one section (or the magic \"all\") is needed." + exit 1 + ;; + *) + srcdir="$SRCBASE/sections/$section" + ;; + esac + dists="$(distsfrompaths "$srcdir")" + archs="$(archsfrompaths "$srcdir")" + for dist in $DISTS; do + do_dist= + for dist_found in $dists; do + if [ "$dist_found" = "$dist" ]; then + do_dist=1 + continue + fi + done + [ -n "$do_dist" ] || continue + for arch in $ARCHS; do + do_arch= + for arch_found in $archs; do + case $arch_found in + $arch|all) + do_arch=1 + continue + esac + done + [ -n "$do_arch" ] || continue + echo genlist "$section" "$dist" "$arch" "$srcdir" "$PUBBASE/dists/$dist/$section" + done + echo genlist "$section" "$dist" "source" "$srcdir" "$PUBBASE/dists/$dist/$section" + done +} + +sections="$@" +paths="$(pathsfromsections "$sections")" #echo $paths; exit 0 -#suitesfrompaths all; exit 0 +#sectionsfrompaths all; exit 0 for path in $paths; do package="$(basename "$path")" @@ -53,22 +134,14 @@ for path in $paths; do mkdir -p "$PUBBASE/pools/$symlink_dir" # ln -sf -T "../../../$PUBTOSRC/$path" "$PUBBASE/pools/$symlink_dir/$buildhost" ln -sf -T "$SRCBASE/$path" "$PUBBASE/pools/$symlink_dir/$buildhost" - for suite in $(suitesfrompaths "$path"); do - mkdir -p "$SRCBASE/suites/$suite/$symlink_dir" - ln -sf -T "../../../../$path" "$SRCBASE/suites/$suite/$symlink_dir/$buildhost" + for section in $(sectionsfrompaths "$path"); do + mkdir -p "$SRCBASE/sections/$section/$symlink_dir" + ln -sf -T "../../../../$path" "$SRCBASE/sections/$section/$symlink_dir/$buildhost" done done -srcdir="$SRCBASE/suites/sugar" -pubdir="$PUBBASE/dists/sid/sugar/binary-amd64" -mkdir -p "$pubdir" -( cd "$srcdir" && dpkg-scanpackages * /dev/null pools/ ) > "$pubdir/Packages" -gzip -c "$pubdir/Packages" > "$pubdir/Packages.gz" -bzip2 -c "$pubdir/Packages" > "$pubdir/Packages.bz2" -pubdir="$PUBBASE/dists/sid/sugar/source" -mkdir -p "$pubdir" -( cd "$srcdir" && dpkg-scansources * /dev/null pools/ ) > "$pubdir/Sources" -gzip -c "$pubdir/Sources" > "$pubdir/Sources.gz" -bzip2 -c "$pubdir/Sources" > "$pubdir/Sources.bz2" +for section in $sections; do + genlistsfromsection $section +done exit 0 -- cgit v1.2.3