/* * aegis - project change supervisor * Copyright (C) 1997, 1998, 2002, 2003, 2005-2008 Peter Miller * * 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 3 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, see * . */ columns({width = 1000; }); print("Content-Type: text/html"); print(""); auto pn, p, cn, c; pn = project_name(); p = project[pn].state.branch; cn = change_number(); c = p.change[cn]; auto script_name; script_name = getenv("SCRIPT_NAME"); if (script_name == "") script_name = "http://localhost/cgi-bin/aegis.cgi"; auto href; href = script_name ## "?file@proj_menu+project@" ## quote_url(pn); print(""); print(""); print(""); print(""); print(""); print(""); /* * 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(""); 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(""); } print(""); print("Project " ## quote_html(pn) ## ", Change " ## cn); print("

"); print("Project"); 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 = "" ## quote_html(prj_name_parts[0]) ## ""; auto j; for (j = 1; j < count(prj_name_parts); j++) { href ##= '.' ## prj_name_parts[j]; long_project_name ##= "." ## quote_html(prj_name_parts[j]) ## ""; }; long_project_name = "“" ## long_project_name ## "”,"; /* HTTP limits lines to 510 characters */ for (j in wrap(long_project_name, 510)) print(j); print("Change " ## cn); print("

"); print("
"); print("

Brief Description

"); auto part; for (part in wrap_html(quote_html(c.brief_description), 80)) print(part); print("
"); print("
"); print("

Description

"); for (part in wrap_html(quote_html(c.description), 80)) print(part); print("
"); print("
"); print("

Information Available

"); print("
"); auto ok; try { ok = count(keys(c.branch)); } catch(ok) { ok = 0; } print("
State
This change is in the " ## c.state ## " state."); if (ok) { print("

"); href = script_name ## "?file@proj_menu+project@" ## quote_url(pn) ## "." ## cn; print("

"); print("Branch"); print("
"); print("This change is a branch of the “" ## quote_html(pn) ## "” project."); print("This item takes you to a project menu for the"); print("“" ## quote_html(pn) ## "." ## cn ## "” branch."); } if (c.state >= being_developed) { print("

"); href = script_name ## "?file@file_list+project@" ## quote_url(pn) ## "+change@" ## cn; print("

"); print("Files"); print("
"); print("This item will provide you with a listing of files which are"); print("being created, modified or deleted by this change."); } if (c.state >= being_developed && c.state <= being_integrated) { print("

"); href = script_name ## "?file@file_activ+project@" ## quote_url(pn) ## "+change@" ## cn; print("

"); print("File Activity"); print("
"); print("This item will provide you with a listing of files which are"); print("being modified in this change and also in other changes."); print("The list includes who is working on the changes, and a brief"); print("description of each change."); print("

"); print("

"); href = script_name ## "?file@file_cflct"; href ##= "+project@" ## quote_url(pn); href ##= "+change@" ## cn; print("File Conflict"); print("
"); print("This item will provide you with a list of changes which are"); print("actively modifying files in common with this change"); print("if more than one change is modifying the"); print("file at the same time."); } if (c.state >= being_developed) { print("

"); href = script_name ## "?file@file_hstry+project@" ## quote_url(pn) ## "+change@" ## cn; print("

"); print("File History"); print("
"); print("This item will provide you with a listing of all completed"); print("changes which affected the files in this change. This report"); print("can take a long time to generate."); } print("

"); href = script_name ## "?file@chan_hstry+project@" ## quote_url(pn) ## "+change@" ## cn; print("

"); print("History"); print("
"); print("This item will provide you with a listing of the state transitions"); print("of this change, when they were performed, and who performed them."); if (c.state >= being_developed) { print("

"); print("

Download
"); print("There are three ways to download this change."); print("
"); print(""); print(""); print(""); print("
"); href = script_name ## "/" ## quote_url(pn) ## ".C" ## cn ## ".patch?file@aepatch+project@" ## quote_url(pn) ## "+change@" ## cn; print("patch"); print(""); print("This link will download a compressed patch familiar to Open"); print("Source developers."); print("Unlike the aedist link, below, the change meta-data"); print("is not preserved, only the change description endures."); print("
"); href = script_name ## "/" ## quote_url(pn) ## ".C" ## cn ## ".tar.gz?file@aetar+project@" ## quote_url(pn) ## "+change@" ## cn; print("tar.gz"); print(""); print("This link will download a complete project source tarball up to"); print("this change. Note: These tarballs do not"); print("contain derived or generated files."); print("Unlike the aedist link, below, the change meta-data"); print("is not preserved."); print("
"); href = script_name ## "/" ## quote_url(pn) ## ".C" ## cn ## ".ae?file@aedist+project@" ## quote_url(pn) ## "+change@" ## cn; print("aedist"); print(""); print("The aedist(1) program packages changes so that they"); print("may be reproduced exactly on the remote site. Changes packaged in"); print("this way require the aedist(1) program from"); print("Aegis 4.23 or later to apply them."); print("
"); } print("
"); print("
"); print("
"); print("

["); print("Project List |"); href = script_name ## "?file@proj_menu+project@" ## quote_url(pn); print("Project Menu |"); href = script_name ## "?file@changes+project@" ## quote_url(pn); print("Change List"); print("]

"); print("
"); print("This page was generated " ## now() ## "."); print("");