/* * aegis - project change supervisor * Copyright (C) 1997, 1998 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 files */ 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(""); print("File History Report"); print("

"); print("Project ``" ## quote_html(project_name()) ## "'',"); if (change_number_set()) print("Change " ## change_number() ## ","); if (count(arg) == 1) print("File ``" ## quote_html(arg[0]) ## "'',"); print("
File History"); print("

"); print("
"); auto ps; ps = project[project_name()].state; /* * use the files named on the command line, * or all project files if not specified */ auto file, cs; if (count(arg) == 0) { if (change_number_set()) { cs = ps.branch.change[change_number()]; for (file in cs.src) arg ##= file.file_name; } else { for (file in ps.src) arg ##= file.file_name; } } /* * create an empty history for each file */ auto hist; for (file in arg) hist[file] = []; /* * scan all completed changes * for any of the named files */ auto ph, cf; for (ph in ps.branch.history) { cs = ps.branch.change[ph.change_number]; for (cf in cs.src) { if (cf.file_name in arg) { if (cf.usage == build && cf.action == modify) continue; hist[cf.file_name] ##= { usage = cf.usage; action = cf.action; edit = cf.edit_number; delta = ph.delta_number; when = cs.history[count(cs.history) - 1].when; change = ph.change_number; description = cs.brief_description; move = cf.move; }; } } } /* * print the accumulated history */ auto fh, actions, usages; for (file in sort(keys(hist))) { auto href; href = script_name ## "?file@file_menu+" ## quote_url(file); href ##= "+project@" ## quote_url(project_name()); print("
"); print(""); print("" ## quote_html(file) ## ""); print("
"); print(""); print(""); print(""); actions = "BS"; usages = "BS"; for (fh in hist[file]) { print(""); actions = fh.action; usages = fh.usage; } print("
TypeActionDeltaWhenChangeEditDescription
"); if (fh.usage != usages) print(fh.usage); print(""); if (fh.action != actions) print(fh.action); print(""); print(fh.delta); print(""); print(fh.when); print(""); href = script_name ## "?file@chan_menu"; href ##= "+project@" ## quote_url(project_name()); href ##= "+change@" ## fh.change; print(""); print(fh.change ## ""); print(""); print(fh.edit); print(""); auto part; for (part in wrap_html(quote_html(fh.description), 80)) print(part); if (fh.move != "") { href = script_name ## "?file@file_menu+" ## quote_url(fh.move); href ##= "+project@" ## quote_url(project_name()); print("
Moved"); if (fh.action == create) print("from"); else print("to"); print(""); print("" ## quote_html(fh.move) ## ""); } print("
"); } print("
"); print("Listed " ## count(keys(hist)) ## " files."); print("
"); print("A similar report may be obtained from the command line, with"); print("
aer file_history [ filename ] -p " ## quote_html(project_name()) ## "
"); print("
"); print("This page was generated " ## now() ## "."); print("");