//
// aegis - project change supervisor
// Copyright (C) 1999, 2001-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
// .
//
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
void
list_projects(change_identifier &cid, string_list_ty *)
{
string_list_ty name;
output::pointer name_col;
output::pointer dir_col;
output::pointer desc_col;
size_t j;
int left;
col::pointer colp;
trace(("list_projects()\n{\n"));
if (cid.project_set())
list_project_inappropriate();
if (cid.set())
list_change_inappropriate();
//
// list the projects
//
trace(("mark\n"));
project_list_get(&name);
trace(("mark\n"));
//
// create the columns
//
colp = col::open((string_ty *)0);
colp->title("List of Projects", (char *)0);
left = 0;
name_col = colp->create(left, left + PROJECT_WIDTH, "Project\n---------");
left += PROJECT_WIDTH + 1;
if (!option_terse_get())
{
dir_col =
colp->create
(
left,
left + DIRECTORY_WIDTH,
"Directory\n-----------"
);
left += DIRECTORY_WIDTH + 1;
desc_col = colp->create(left, 0, "Description\n-------------");
}
//
// list each project
//
trace(("mark\n"));
for (j = 0; j < name.nstrings; ++j)
{
trace(("j = %d/%d\n", (int)j, (int)name.nstrings));
project_ty *pp = project_alloc(name.string[j]);
pp->bind_existing();
trace(("mark\n"));
int err = project_is_readable(pp);
name_col->fputs(project_name_get(pp));
if (desc_col)
{
if (err != 0)
desc_col->fputs(strerror(err));
else
{
//
// The development directory of the
// project change is the one which
// contains the trunk or branch
// baseline.
//
string_ty *top = project_top_path_get(pp, 0);
dir_col->fputs(top);
desc_col->fputs(project_description_get(pp));
}
}
trace(("mark\n"));
project_free(pp);
trace(("mark\n"));
colp->eoln();
}
trace(("}\n"));
}