/*
 *	aegis - project change supervisor
 *	Copyright (C) 1997-1999, 2001-2003 Peter Miller;
 *	All rights reserved.
 *
 *	This program is free software; you can redistribute it and/or modify
 *	it under the terms of the GNU General Public License as published by
 *	the Free Software Foundation; either version 2 of the License, or
 *	(at your option) any later version.
 *
 *	This program is distributed in the hope that it will be useful,
 *	but WITHOUT ANY WARRANTY; without even the implied warranty of
 *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *	GNU General Public License for more details.
 *
 *	You should have received a copy of the GNU General Public License
 *	along with this program; if not, write to the Free Software
 *	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
 *
 * MANIFEST: report the history of a project
 */

auto pn;
pn = project_name();

auto script_name;
script_name = getenv("SCRIPT_NAME");
if (script_name == "")
	script_name = "http://localhost/cgi-bin/aegis.cgi";

columns({width = 1000; });
print("Content-Type: text/html");
print("");
print("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\""
	## "\"http://www.w3.org/TR/REC-html40/loose.dtd\">");
print("<html><head>");
print("<meta name=\"ROBOTS\" content=\"NOINDEX, NOFOLLOW\">");
print("<meta name=\"GENERATOR\" content=\"" ## script_name ## "\">");
print("<meta http-equiv=\"Content-Type\" "
	## "content=\"text/html; charset=ISO-8859-1\">");
print("<style type=\"text/css\"> "
	## "tr.even-group { background-color: #CCCCCC; }"
	## "body { background-color: white; }"
	## "</style>");
/*
 * Netscape 4.x has numerous CSS bugs, two of which need mentioning.
 * 1. If a style sheet is not present Netscape says 404 Not found, when
 * it should silently ignore it.  2. Style sheets who's media is not
 * "screen" will be ignored.  Fortunately we can use (2) to get around (1).
 */
print("<link rel=\"stylesheet\" type=\"text/css\" href=\"/aedefault.css\" "
	## "media=\"all\">");
auto stack, depth, n;
depth=0;
stack[depth] = project[pn].state.name;
while ("" != ( n = project[stack[depth]].state.parent_name )) {
  stack[++depth] = n;
}
while ( depth >= 0) {
    print("<link rel=\"stylesheet\" type=\"text/css\" href=\"/" ##
      stack[depth--] ## ".css\" " ## "media=\"all\">");
}
print("<title>");
print("Project " ## quote_html(project_name()) ## ", History Report");
print("</title></head><body><h1 align=center>");

auto href;
print("<a href=\"" ## script_name ## "\">Project</a>");
auto long_project_name;
auto prj_name_parts;
prj_name_parts = split(pn, '.');
href = script_name ## "?file@proj_menu+project@"
	## quote_url(prj_name_parts[0]);
long_project_name = "<a href=\"" ## href ## "\" >"
	## quote_html(prj_name_parts[0]) ## "</a>";
auto j;
for (j = 1; j < count(prj_name_parts); j++)
{
    href ##= '.' ## prj_name_parts[j];
    long_project_name ##= ".<a href=\"" ## href ## "\" >"
    	## quote_html(prj_name_parts[j]) ## "</a>";
};
long_project_name = "``" ## long_project_name ## "'',<br>";
/* HTTP limits lines to 510 characters */
for (j in wrap(long_project_name, 510))
    print(j);

print("History");
print("</h1>");
print("<div class=\"information\">");

auto ps;
ps = project[project_name()].state;

/*
 * scan all completed changes
 * for any of the named files
 */
print("<table align=center>");
print("<tr class=\"even-group\"><th>Delta</th><th>When</th><th>Change</th>"
	## "<th>Description</th><th>Download</th></tr>");
auto ph, rownum;
rownum = 0;
for (ph in ps.branch.history)
{
    if (rownum++ % 6 < 3)
	print("<tr class=\"odd-group\">");
    else
	print("<tr class=\"even-group\">");
    print("<td valign=top align=right>");
    print(ph.delta_number);
    print("</td><td valign=top>");
    auto cs;
    cs = ps.branch.change[ph.change_number];
    print(cs.history[count(cs.history) - 1].when);
    print("</td><td valign=top align=right>");
    href = script_name ## "?file@chan_menu";
    href ##= "+project@" ## quote_url(project_name());
    href ##= "+change@" ## ph.change_number;
    print("<a href=\"" ## href ## "\">");
    print(ph.change_number ## "</a>");
    print("</td><td valign=top>");
    auto part;
    for (part in wrap_html(quote_html(cs.brief_description), 80))
       	print(part);

    /*
     * The download column.
     */
    print("</td><td valign=top>");
    href = script_name ## "/" ## quote_url(project_name());
    href ##= ".C" ## ph.change_number ## ".patch?file@aepatch";
    href ##= "+project@" ## quote_url(project_name());
    href ##= "+change@" ## ph.change_number;
    print("<a href=\"" ## href ## "\"><code>patch</code></a>,");

    href = script_name ## "/" ## quote_url(project_name());
    href ##= ".C" ## ph.change_number ## ".tar.gz?file@aetar";
    href ##= "+project@" ## quote_url(project_name());
    href ##= "+change@" ## ph.change_number;
    print("<a href=\"" ## href ## "\"><code>tar.gz</code></a>,");

    href = script_name ## "/" ## quote_url(project_name());
    href ##= ".C" ## ph.change_number ## ".ae?file@aedist";
    href ##= "+project@" ## quote_url(project_name());
    href ##= "+change@" ## ph.change_number;
    print("<a href=\"" ## href ## "\"><code>aedist</code></a>");
    print("</td></tr>");
}
print("<tr><td colspan=5>");
print("Listed " ## count(ps.branch.history) ## " completed changes.");
print("</td></tr>");
print("</table>");
print("</div>");

print("<hr>");
print("<div class=\"report-cmd\">");
print("A similar report may be obtained from the command line, with one of");
print("<blockquote><pre>ael proj_history -p " ## quote_html(project_name()));
print("aer proj_history -p " ## quote_html(project_name()) ##
    "</pre></blockquote>");
print("</div>");

print("<hr>");
print("If you download via the <code>patch</code> links, they can be");
print("uncompressed with <em>gunzip</em>(1) and applied with the normal");
print("<em>patch</em>(1) program.  Or you could use <em>aepatch</em>(1)");
print("from Aegis 3.28 or later to apply them to an Aegis project as");
print("a change.  Depending on your browser, it may or may not have");
print("done the MIME64 and/or gunzip steps for you automagically.");
print("<p>");
print("If you download via the <code>tar.gz</code> links, the tarball can be");
print("uncompressed with <em>gunzip</em>(1) and unpacked with the normal");
print("<em>tar</em>(1) program.  Or you could use <em>aetar</em>(1)");
print("from Aegis 4.7 or later to apply them to an Aegis project as");
print("a change.  Depending on your browser, it may or may not have");
print("done the gunzip step for you automagically.");
print("<p>");
print("If you download via the <code>aedist</code> links, you will need");
print("<em>aedist</em>(1) from Aegis 4.11 or later to apply the");
print("change sets.");

print("<hr>");
print("<p align=center class=\"navbar\">[");
print("<a href=\"" ## script_name ## "\">Project List</a> |");
href = script_name ## "?file@proj_menu+project@" ## quote_url(pn);
print("<a href=\"" ## href ## "\">Project Menu</a>");
print("]</p>");

print("<hr>");
print("This page was generated " ## now() ## ".");
print("</body></html>");
