//
// aegis - project change supervisor
// Copyright (C) 1999, 2001-2008, 2012 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
// .
//
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
void
list_project_history(change_identifier &cid, string_list_ty *)
{
output::pointer name_col;
output::pointer delta_col;
output::pointer date_col;
output::pointer change_col;
output::pointer description_col;
size_t j, k;
string_ty *line1;
int left;
trace(("list_project_history()\n{\n"));
if (cid.set())
list_change_inappropriate();
//
// create the columns
//
col::pointer colp = col::open((string_ty *)0);
line1 = str_format("Project \"%s\"", cid.get_pp()->name_get()->str_text);
colp->title(line1->str_text, "History");
str_free(line1);
// the delta name column is the whole page wide
name_col = colp->create(0, 0, (const char *)0);
left = 0;
delta_col = colp->create(left, left + CHANGE_WIDTH, "Delta\n-------");
left += CHANGE_WIDTH + 1;
if (!option_terse_get())
{
date_col =
colp->create
(
left,
left + WHEN_WIDTH,
"Date and Time\n---------------"
);
left += WHEN_WIDTH + 1;
change_col =
colp->create(left, left + CHANGE_WIDTH, "Change\n-------");
left += CHANGE_WIDTH + 1;
description_col =
colp->create(left, 0, "Description\n-------------");
}
//
// list the project's successful integrations
//
for (j = 0; ; ++j)
{
long cn;
long dn;
string_list_ty name;
if (!project_history_nth(cid.get_pp(), j, &cn, &dn, &name))
break;
if (!option_terse_get() && name.nstrings)
{
colp->need(4);
name_col->fprintf("Name%s: ", (name.nstrings == 1 ? "" : "s"));
for (k = 0; k < name.nstrings; ++k)
{
if (k)
name_col->fputs(", ");
name_col->fprintf("\"%s\"", name.string[k]->str_text);
}
//
// If we don't eoln here, and there are lots
// of names, then they get intermingled with
// the date and description lines, and it
// looks weird.
//
colp->eoln();
}
delta_col->fprintf("%4ld", dn);
if (!option_terse_get())
{
change::pointer cp = change_alloc(cid.get_pp(), cn);
change_bind_existing(cp);
cstate_ty *cstate_data = cp->cstate_get();
time_t t =
cstate_data->history->list
[
cstate_data->history->length - 1
]->when;
date_col->fputs(ctime(&t));
change_col->fprintf("%4ld", magic_zero_decode(cn));
assert(cstate_data->brief_description);
description_col->fputs(cstate_data->brief_description);
change_free(cp);
}
colp->eoln();
}
trace(("}\n"));
}
// vim: set ts=8 sw=4 et :