#!/bin/bash
set -u
# 20260714 bkw: Populate the boneyard.
# local paths
OUTDIR=~/boneyard
STATEDIR=~/boneyard-state
TREE=$STATEDIR/slackbuilds
OUTFILE=$OUTDIR/index.html
# git stuff
CLONEURL=git://git.slackbuilds.org/slackbuilds.git
# this is the first commit of the 15.0 series:
START_COMMIT=15.0-20220311.1
SLACKVER="$( echo $START_COMMIT | cut -d- -f1 )"
# sshfs URL for web server
SSHFS_REMOTE=sluk:/home/urchlay/public_html/html/boneyard/
# local sshfs mountpoint
SSHFS_MNTPNT=/home/urchlay/boneyard-remote
# during script development/testing, set this to make
# test runs faster (but very incomplete of course):
#DEBUG_LIMIT="-n 10"
# for production, set this:
DEBUG_LIMIT=""
# global variables:
catprg="" # e.g. "system/someapp"
categ="" # e.g. "system"
prg="" # e.g. "someapp"
tarball=""
gitlog=""
rm_log=""
last_log=""
tarcommit=""
descfile=""
desc=""
logfile=""
# sets global variables. sorry, purists.
get_log_lines() {
catprg="$@"
prg="$( basename $catprg )"
categ="$( dirname $catprg )"
tarball=$OUTDIR/$prg.tar.gz
logfile=$STATEDIR/$categ-$prg.log
if [ ! -e "$logfile" ]; then
git log -n2 --date=format:%Y-%m-%d --pretty=format:"%h%x09%ad%x09%s" -- "$catprg/$prg.SlackBuild" > $logfile
fi
gitlog="$( cat $logfile )"
rm_log="$( echo "$gitlog" | head -n 1 )"
last_log="$( echo "$gitlog" | tail -n 1 )"
tarcommit="$( echo $last_log | cut -d' ' -f1 )"
descfile=$STATEDIR/$categ-$prg.desc
echo " $catprg last commit before removal: $tarcommit"
}
mktarball() {
if [ -e "$tarball" -a -e "$descfile" ]; then
echo " - tarball and .desc already exist"
desc="$( cat $descfile )"
else
new_tarballs+="$tarball "
git checkout $tarcommit
( cd $categ ; tar cvfz $tarball $prg )
desc="$( grep "^$prg: " $catprg/slack-desc | head -n 1 | cut -d: -f2 )"
echo "$desc" > "$descfile"
git checkout master
fi
}
p() {
echo "
" >> $OUTFILE.new
}
br() {
echo "
" >> $OUTFILE.new
}
htmlprint() {
echo "$@" | sed -e 's,<,%lt,g' -e 's,>,>,g' >> $OUTFILE.new
}
print_report_line() {
local tarfile="$( basename $tarball )"
size="$( stat -c '%s' $tarball )"
if [ "$size" -ge 1024 ]; then
size="$(( size / 1024 ))K"
fi
echo "$catprg $size" >> $OUTFILE.new
br
htmlprint "$desc" ; br
htmlprint "$rm_log" ; br
htmlprint "$last_log" ; br
p
}
get_all_removed() {
git log $DEBUG_LIMIT --pretty=oneline --grep="Removed" $START_COMMIT.. | \
cut -d' ' -f2 | cut -d: -f1 | sort
}
# main()
mkdir -p $OUTDIR $STATEDIR
if [ -d "$TREE" ]; then
cd $TREE
git checkout master
git pull
else
rm -rf $TREE
git clone $CLONEURL $TREE
cd $TREE
fi
removed=$( get_all_removed )
total=$( echo $removed | wc -w )
skipped=0
cat <$OUTFILE.new
SlackBuilds.org Removed Builds
These are all the builds that have been removed from SlackBuilds.org
since the $SLACKVER repository was started (git tag $START_COMMIT).
Note that this is purely a personal project of B. Watson
<urchlay@slackware.uk>.
It is NOT part of the SlackBuilds.org project or website.
To search for a build, use your browser's "Search within page" feature
(commonly control-F or F3).
Some of these builds were removed because they were broken or
nonfunctional (e.g. a client for a service that no longer exists). Others
were removed because they no longer had a maintainer, and got outdated.
If you find anything here that's useful, you can submit it to
SBo under your own name, after fixing any problems with it and/or
version-updating it.
EOF
count=0
for i in $removed; do
: $(( count ++ ))
echo $count/$total: $i
get_log_lines $i
if [ -d "$catprg" ]; then
# If the dir exists, the build got re-added, skip it
: $(( skipped ++ ))
echo " -> skipped because $catprg exists"
continue
fi
mktarball
print_report_line
done
cat <>$OUTFILE.new
Boneyard populated $( date ) with $(( total - skipped )) builds.
EOF
mv $OUTFILE.new $OUTFILE
if [ ! -e $SSHFS_MNTPNT/.sshfs.mounted ]; then
mkdir -p $SSHFS_MNTPNT
sshfs $SSHFS_REMOTE $SSHFS_MNTPNT
touch $SSHFS_MNTPNT/.sshfs.mounted
fi
# unconditionally copy the index.html
echo
echo "copying index.html"
cp $OUTDIR/index.html $SSHFS_MNTPNT
if [ "$new_tarballs" = "" ]; then
echo "no newly created tarballs to copy"
exit 0
fi
echo "copying $( echo $new_tarballs | wc -w ) new tarballs"
cd $OUTDIR
cp -v $new_tarballs $SSHFS_MNTPNT