212 lines
4.3 KiB
Plaintext
Executable File
212 lines
4.3 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
|
|
|
|
# all branches:
|
|
# cvs log -d '>1999-06-14 00:00:00 GMT' . > log
|
|
#
|
|
# head:
|
|
# cvs log -d'>2000-05-29 00:00:00 GMT' -b .
|
|
# branch:
|
|
# cvs log -d'>2000-05-29 00:00:00 GMT' -r REL8_0_STABLE` .
|
|
#
|
|
# date range
|
|
# cvs log -d'2005-05-08<2005-05-29' -b .
|
|
#
|
|
# Remove TODO and FAQ logs if desired
|
|
#
|
|
|
|
if [ "X$1" == "X-h" ]
|
|
then HTML="Y"
|
|
shift
|
|
else HTML="N"
|
|
fi
|
|
|
|
cat "$@" |
|
|
|
|
# protect HTML input if in HTML mode
|
|
if [ "$HTML" = "Y" ]
|
|
then sed -e 's/\&/\&/g' \
|
|
-e 's/</\</g' \
|
|
-e 's/>/\>/g' \
|
|
-e 's/"/\"/g'
|
|
else cat
|
|
fi |
|
|
|
|
# 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 ' BEGIN {html="'"$HTML"'"; lineno = 0;}
|
|
# store working directory
|
|
$0 ~ /^Working file:/ {workingfile = "/" $3}
|
|
|
|
($0 ~ /^====*$/ || $0 ~ /^----*$/) \
|
|
{
|
|
# print blank line to separate entries
|
|
if (datetime != "")
|
|
{
|
|
if (html != "Y")
|
|
printf ("%s| %10d|%s\n", datetime, lineno++, "");
|
|
printf ("%s| %10d|", datetime, lineno++);
|
|
if (html != "Y")
|
|
printf ("%s\n", "---");
|
|
else printf ("<HR>\n");
|
|
}
|
|
datetime="";
|
|
}
|
|
|
|
# if we have a saved datetime, print filename, date line, and committer
|
|
datetime != "" && $1 != "branches:" {printf ("%s| %10d| %s\n", datetime, lineno++, $0);}
|
|
|
|
$1 == "date:" \
|
|
{
|
|
# get entry date
|
|
datetime=$2"-"$3
|
|
if (workingfile != "")
|
|
{
|
|
printf ("%s| %10d|", datetime, lineno++);
|
|
if (html != "Y")
|
|
printf ("%s\n", workingfile);
|
|
else printf ("<SMALL><FONT COLOR=\"red\">%s</FONT></SMALL>\n", workingfile);
|
|
|
|
# output name of committer
|
|
# remove semicolon from committers name
|
|
gsub("/", "-", $2);
|
|
gsub(";", "", $3);
|
|
gsub(";", "", $5);
|
|
printf ("%s| %10d|", datetime, lineno++);
|
|
if (html != "Y")
|
|
printf ("%78s\n", $5);
|
|
else printf ("<DIV ALIGN=\"right\"><SMALL><FONT COLOR=\"teal\">%s</FONT> <FONT COLOR=\"green\">%s</FONT></SMALL></DIV>\n", $5, $2);
|
|
}
|
|
}
|
|
|
|
/* clear working file */
|
|
$0 ~ /^====*$/ {workingfile=""}' |
|
|
|
|
sort | cut -d'|' -f3 | cat |
|
|
|
|
# collect duplicate narratives
|
|
|
|
awk ' BEGIN { slot = 0; oldslot=0; save_working = ""; html="'"$HTML"'"}
|
|
{
|
|
# We have a filename, so we look at the previous
|
|
# narrative to see if it is new narrative text.
|
|
if ($0 ~ /^\// || $0 ~ />\//)
|
|
{
|
|
# If there are a different number of narrative
|
|
# lines, they can not possibly be the same.
|
|
if (slot != oldslot)
|
|
same = "N";
|
|
else
|
|
{
|
|
same = "Y";
|
|
for (i=1; i <= slot; i++)
|
|
{
|
|
if (oldnarr[i] != narr[i])
|
|
{
|
|
same = "N";
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
# dump out the old narrative if it is new
|
|
if (same == "N")
|
|
{
|
|
if (oldslot)
|
|
for (i=1; i <= oldslot; i++)
|
|
{
|
|
print oldnarr[i];
|
|
if (html == "Y" &&
|
|
oldnarr[i] != "<HR>" &&
|
|
oldnarr[i] !~ "^<DIV ")
|
|
print "<BR>";
|
|
}
|
|
|
|
# save the current narrative
|
|
for (i=1; i <= slot; i++)
|
|
oldnarr[i] = narr[i];
|
|
oldslot = slot;
|
|
}
|
|
slot = 0;
|
|
|
|
# dump out the previous filename
|
|
print save_working;
|
|
if (html == "Y")
|
|
print "<BR>";
|
|
|
|
# store the current filename for later printing
|
|
save_working = $0;
|
|
}
|
|
else
|
|
# we have a narrative line
|
|
{
|
|
# accumulate narrative
|
|
narr[++slot] = $0;
|
|
}
|
|
}
|
|
END {
|
|
# If there are a different number of narrative
|
|
# lines, they can not possibly be the same.
|
|
if (slot != oldslot)
|
|
same = "N";
|
|
else
|
|
{
|
|
same = "Y";
|
|
for (i=1; i <= slot; i++)
|
|
{
|
|
if (oldnarr[i] != narr[i])
|
|
{
|
|
same = "N";
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
# dump out the old narrative if it is new
|
|
if (same == "N")
|
|
{
|
|
if (oldslot)
|
|
for (i=1; i <= oldslot; i++)
|
|
{
|
|
print oldnarr[i];
|
|
if (html == "Y" &&
|
|
oldnarr[i] != "<HR>" &&
|
|
oldnarr[i] !~ "^<DIV ")
|
|
print "<BR>";
|
|
}
|
|
}
|
|
|
|
# dump out the last filename
|
|
print save_working;
|
|
|
|
if (html == "Y")
|
|
print "<BR>";
|
|
|
|
# dump out the last narrative
|
|
for (i=1; i <= slot; i++)
|
|
{
|
|
print narr[i];
|
|
if (html == "Y" &&
|
|
narr[i] != "<HR>" &&
|
|
narr[i] !~ "^<DIV ")
|
|
print "<BR>";
|
|
}
|
|
}' |
|
|
|
|
# add HTML wrapper
|
|
if [ "$HTML" = "Y" ]
|
|
then echo "<HTML>"
|
|
echo "<HEAD>"
|
|
echo "<TITLE>CVS</TITLE>"
|
|
echo "</HEAD>"
|
|
echo "<BODY>"
|
|
cat
|
|
echo "</BODY>"
|
|
echo "</HTML>"
|
|
else cat
|
|
fi
|