/*
 *	aegis - project change supervisor
 *	Copyright (C) 2003, 2006-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
 *	<http://www.gnu.org/licenses/>.
 */
title("The Branches Report", sprintf("Project \"%s\"", project_name()));
columns
(
	{ name = "Project Branch\n---------------"; width = 15; },
	{ name = "State\n-------"; width = 15; },
	{ name = "Start\n-------"; width = 11; },
	{ name = "Finish\n-------"; width = 11; },
	{ name = "Description\n-----------"; right = 0; }
);

auto pn;
pn = project_name();
auto stack, stack_top;
stack_top = 1;
stack[stack_top] = pn;

while (stack_top > 0)
{
	pn = stack[stack_top];
	stack_top = stack_top - 1;

	auto p, start, finish;
	p = project[pn].state;
	start = strftime("%Y-%b-%d", p.history[0].when);
	if (p.state == completed)
	{
	    finish = p.history[count(p.history) - 1].when;
	    finish = strftime("%Y-%b-%d", finish);
	}
	print(pn, p.state, start, finish, p.brief_description);

	/*
	 * Need to push the branches onto the stack backwards, so they
	 * are reported forwards.
	 */
	auto ps;
	ps = p.branch;
	auto tmp;
	tmp = sort(keys(ps.change));
	auto t;
	for (t = count(tmp) - 1; t >= 0; t = t - 1)
	{
		auto cn;
		cn = tmp[t];
		auto cs;
		cs = ps.change[cn];
		/*
		 * A change is a branch if its change state has a
		 * "branch" member.
		 */
		if ("branch" in keys(cs))
		{
			stack_top = stack_top + 1;
			stack[stack_top] = pn ## "." ## cn;
		}
	}
}
