76 lines
1.7 KiB
Bash
Executable file
76 lines
1.7 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
# Usage: ./arch.sh
|
|
# Synchronises the database with an Arch mirror, fetching any packages that
|
|
# aren't yet in the database and may have man pages.
|
|
|
|
MIRROR=http://ftp.nluug.nl/pub/os/Linux/distr/archlinux
|
|
REPOS="core extra community"
|
|
DEBUG=false
|
|
SYSID=1
|
|
|
|
. ./common.sh
|
|
|
|
|
|
checkpkg() {
|
|
REPO=$1
|
|
FN=$2
|
|
D="$TMP/$REPO/$FN"
|
|
if [ ! \( -d "$D" -a -f "$D/files" -a -f "$D/desc" \) ]; then
|
|
echo "===> $FN"
|
|
echo "Invalid item, ignoring"
|
|
return
|
|
fi
|
|
grep -q /man/ "$D/files"
|
|
if [ "$?" -ne 0 ]; then
|
|
$DEBUG && echo "===> $FN"
|
|
$DEBUG && echo "No mans"
|
|
return
|
|
fi
|
|
|
|
# Somewhat inefficient description parsing
|
|
FILENAME=`grep -A 1 '%FILENAME%' "$D/desc" | tail -n 1`
|
|
NAME=`grep -A 1 '%NAME%' "$D/desc" | tail -n 1`
|
|
VERSION=`grep -A 1 '%VERSION%' "$D/desc" | tail -n 1`
|
|
BUILDDATE=`grep -A 1 '%BUILDDATE%' "$D/desc" | tail -n 1`
|
|
if [ -z "$FILENAME" -o -z "$NAME" -o -z "$VERSION" -o -z "$BUILDDATE" ]; then
|
|
echo "===> $FN"
|
|
echo "Invalid/missing description info"
|
|
return
|
|
fi
|
|
BUILDDATE=`date -d "@$BUILDDATE" '+%F'`
|
|
|
|
add_pkginfo $SYSID "$REPO" "$NAME" "$VERSION" "$BUILDDATE"
|
|
if [ "$?" -eq 0 ]; then
|
|
$DEBUG && echo "===> $FN"
|
|
$DEBUG && echo "Already up-to-date"
|
|
return
|
|
fi
|
|
|
|
echo "===> $FN"
|
|
F="$TMP/$REPO/$FILENAME"
|
|
$CURL "$MIRROR/$REPO/os/i686/$FILENAME" -o "$F" || return
|
|
add_tar "$F" "$PKGID"
|
|
rm -f "$F"
|
|
}
|
|
|
|
|
|
syncrepo() {
|
|
REPO=$1
|
|
F="$TMP/$REPO/repo.tar.gz"
|
|
echo "============ $MIRROR $REPO"
|
|
$CURL "$MIRROR/$REPO/os/i686/$REPO.files.tar.gz" -o "$F" || return 1
|
|
tar -C "$TMP/$REPO" -xf "$F" || return 1
|
|
rm -f "$F"
|
|
for fn in "$TMP/$REPO"/*; do
|
|
checkpkg "$REPO" `basename "$fn"`
|
|
done
|
|
}
|
|
|
|
|
|
for r in $REPOS; do
|
|
mkdir "$TMP/$r"
|
|
syncrepo $r
|
|
rm -rf "$TMP/$r"
|
|
done
|
|
|