: # This utility is used to generate a compact list of changes for each # release, bjm 2000-02-22 # Usage $0 file # no branches: # cvs log -d '>1999-06-14 00:00:00 GMT' . > log # # pre and post-branch logs: # cvs log -d'2000-05-08 00:00:00 GMT<2000-05-29 00:00:00 GMT' # cvs log -d'>2000-05-29 00:00:00 GMT' -rREL7_0_PATCHES # # pgcvslog -r '\.2\.[0-9]*$' log cat "$@" | # mark each line with a datetime and line number, for sorting and merging # we don't print anything from the -- or == line and the date: awk ' $0 ~ /^Working file:/ {workingfile = $0} ($0 ~ /^====*$/ || $0 ~ /^----*$/) && skip == "N" \ { /* print blank line separating entries */ if (datetime != "") { printf ("%s| %10d|%s\n", datetime, NR, ""); printf ("%s| %10d|%s\n", datetime, NR, "---"); printf ("%s| %10d|%s\n", datetime, NR+1, ""); } } $0 ~ /^====*$/ || $0 ~ /^----*$/ \ { datetime=""; skip="N"; } datetime != "" && skip == "N" \ {printf ("%s| %10d| %s\n", datetime, NR, $0);} $1 == "date:" \ { /* get entry date */ datetime=$2"-"$3 if (workingfile != "" && skip == "N") { printf ("%s| %10d|%s\n", datetime, NR-1, workingfile); printf ("%s| %10d|%s\n", datetime, NR, $0); printf ("%s| %10d|%s\n", datetime, NR+1, ""); } } $0 ~ /^====*$/ {workingfile=""}' | sort | cut -d'|' -f3 | cat | # collect duplicate narratives awk ' BEGIN { slot = 0;} { if ($0 ~ /^Working file:/) { if (slot != oldslot) same = 0; else { same = 1; for (i=1; i <= slot; i++) { if (oldnarr[i] != narr[i]) same = 0; } } if (oldslot && !same) for (i=1; i <= oldslot; i++) print oldnarr[i]; for (i=1; i <= slot; i++) oldnarr[i] = narr[i]; oldslot = slot; slot = 0; print save_working; save_working = $0; } else if ($1 != "date:") narr[++slot] = $0; } END { print save_working; for (i=1; i <= slot; i++) print narr[i]; }'