#!/bin/rc
# Local touch -t 1127000000 $home/lib/timestamp_patchlog
# Local touch -t 1127000000 $home/lib/timestamp_sourceslog
fn mailhead {
# Takes a file as arg to use it's mdate as Date:
echo 'Reply-To: 9fans@cse.psu.edu'
syscall -s stat $1 buf 1024 >[2]/dev/null|grep '^ mtime' | awk '{print "Date: "$2", "$4" "$3" "$7" "$5}'
echo
}
# Need to setup factota so 9fs can connect to sources
rfork
auth/factotum
cat /usr/$user/lib/sources.key > /mnt/factotum/ctl
tsp = $home/lib/timestamp_patchlog
pdirs = (applied saved sorry)
pdirs = /n/sources/patch/^$pdirs
#plistaddr = uriel
plistaddr = plan9changes@googlegroups.com
#upasname = patch-log@cat-v.org
#upasname = patch-archive@cat-v.org
upasname = 9changes@cat-v.org
rm /srv/sources.plog
if(! test -d /n/sources/patch)
srv -q tcp!sources.cs.bell-labs.com sources.plog /n/sources
if(! test -d /n/sources/patch)
exit 'failed to mount sources'
if(! test -f $tsp)
touch $tsp
start = `{date -n}
for(pd in $pdirs) {
newps = `{ ls -t $pd }
done = 0
for(d in $newps) {
if(~ $done 0 && test $d -ot $tsp) {
done = 1
}
if(~ $done 0) {
cd $d
if(~ $status '') {
sub='[patch] '^`{ basename `{basename -d $d} }^': '^`{basename $d}
{
mailhead $d
fmtlsl = 's/^[^ ]* M [0-9]* ([a-z0-9]*) sys 0 (.*) [a-z0-9_.\-]*$/\2 by \1/'
echo Created `{cat origls | sed $fmtlsl }
echo Processed `{ ls -lpd `{pwd} | sed $fmtlsl }
echo
cat readme
echo
if(test -s notes) {
echo NOTES:
cat notes
echo
}
echo '-- '
fn xxx {
echo $1
# FIXME: .orig sometimes is missing, should handle that more gracefuly
if(test -f $2.orig) diff -c $2.orig $d/$2
if not diff -c /dev/null $d/$2
echo
}
cat files | sed 's/^/xxx /' |rc
cd ..
} | upas/marshal -s $sub $plistaddr
cd ..
}
}
}
}
# NOTE: patches that go into a dir during running of the script can be duplicated
touch -t $start $tsp
# Sourcesmail
changesdir=/n/sources/contrib/uriel/changes
stamp=$home/lib/timestamp_sourceslog
start=`{date -n}
if(! test -f $stamp)
touch $stamp
newer=`{
ls -rt /n/sources/extra/changes/*/* $stamp |
sed -n '/timestamp_sourceslog/,$p' | grep -v timestamp_sourceslog
}
if(~ $#newer 0)
exit 0
for(i in $newer) {
if(test -s $i) {
year=`{basename `{basename -d $i}}
change=`{basename $i}
d = $changesdir/$year/$change/
mkdir -p $d
cd $d
if(! ~ $status '')
exit 'Can''t access changes dir: '^$d
cat $i | awk '
/^[^ ]/ {
if ( inhead == 0 ) {
if(name)
close(name)
name = "" ++n
}
inhead=1
}
/^[ ]/ { inhead = 0 }
{ print >name }
'
for(c in *) {
t = `{sed 1q < $c}
s='[sources] '^$year^$change^': '^$"t
{
mailhead $i
cat $c
} | mail -s $s $plistaddr
}
}
}
touch -t $start $stamp
|