postgresql/src/tools/pgcvslog

96 lines
1.9 KiB
Plaintext
Executable File

:
# 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];
}'