#!/usr/bin/awk -f ## $Id: scs,v 1.4 1998/09/30 22:14:36 ross Exp $ ## scs 2.3 ## ## Copyright (C) 1998 by Ross Harvey ## Freely redistributable ## ## Usage: ## % scs /var/mail/$USER ## or % scs mbox ## ## The flagnames variable below is an extended RE, use, for example, ## "/arm|/acorn32" to catch changes to either of those ports. ## BEGIN { flagnames = "/alpha" flagend = "/" s_IDLE = 0 s_INSOURCE = 1 s_INFILES = 2 f_IDLE = 0 f_ENVELOPE = 1 f_NAME = 2 state = s_IDLE fbsdname = f_IDLE modprefix = "" } /^From / { state = s_IDLE } /^From owner-cvs/ { state = s_INSOURCE fbsdname = f_ENVELOPE modname = "FreeBSD-all" modprefix = "" allmods[modname] = modname nextmod[modname] += 0 next } /^From source-changes/ { state = s_INSOURCE modprefix = "NetBSD-" next } /^From owner-source/ { state = s_INSOURCE modprefix = "OpenBSD-" next } state == s_INSOURCE && /^Module [nN]ame:/ { modname = modprefix $3 allmods[modname] = modname nextmod[modname] += 0 next } state == s_INSOURCE && (/^Committed By:/ || /Changes by:/) { byname = $3 gsub("@.*", "", byname) next } (state == s_INSOURCE || state == s_INFILES) && /^ *Modified [fF]iles:/ { state = s_INFILES keyword = "M" next } (state == s_INSOURCE || state == s_INFILES) && /^ *Added [fF]iles:/ { state = s_INFILES keyword = "+" next } (state == s_INSOURCE || state == s_INFILES) && /^ *Removed [fF]iles:/ { state = s_INFILES keyword = "-" next } /^ *Log *[mM]essage:/ { state = s_IDLE next } /^ *Log:/ { state = s_IDLE next } state == s_INFILES && /Revision.*Changes.*Path/ { state = s_IDLE next } state == s_INFILES && /./ { # print "<" modname "><" nextmod[modname] "><" $0 ">" flist = $0 sub("^[ ]", "", flist) summary[modname, nextmod[modname]] = \ sprintf("%-8s %c %s", byname, keyword, flist) ++nextmod[modname] } fbsdname == f_ENVELOPE && /^$/ { fbsdname = f_NAME next } fbsdname == f_NAME && length($1) { byname = $1 fbsdname = f_IDLE next } END { for (i in allmods) { print print "================", i, "================" for(j=0; j