#!/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