//
// aegis - project change supervisor
// Copyright (C) 1999, 2001-2008, 2011-2014 Peter Miller
// Copyright (C) 2007, 2008 Walter Franzini
//
// 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
void
list_user_changes(change_identifier &cid, string_list_ty *args)
{
string_ty *s;
string_list_ty name;
trace(("list_user_changes()\n{\n"));
if (cid.project_is_set())
list_project_inappropriate();
if (cid.is_set())
list_change_inappropriate();
//
// get the list of projects
//
project_list_get(&name);
if (!name.size())
{
trace(("}\n"));
return;
}
user_ty::pointer up;
if (!args || !args->size())
{
//
// No user name is provided, use the current user.
//
up = user_ty::create();
}
else
{
//
// Use the user name supplied by the caller.
//
up = user_ty::create(nstring(args->front()));
}
//
// open listing
//
col::pointer colp = col::open((string_ty *)0);
s =
str_format
(
"Owned by %s <%s>",
up->full_name().c_str(),
up->name().c_str()
);
colp->title("List of Changes", s->str_text);
str_free(s);
//
// create the columns
//
int left = 0;
output::pointer project_col =
colp->create(left, left + PROJECT_WIDTH, "Project\n----------");
left += PROJECT_WIDTH + 1;
output::pointer change_col =
colp->create(left, left + CHANGE_WIDTH, "Change\n------");
left += CHANGE_WIDTH + 1;
output::pointer state_col =
colp->create(left, left + STATE_WIDTH, "State\n----------");
left += STATE_WIDTH + 1;
output::pointer description_col =
colp->create(left, 0, "Description\n-------------");
//
// for each project, see if the current user
// is working on any of them.
//
for (size_t j = 0; j < name.size(); ++j)
{
//
// locate the project,
// and make sure we are allowed to look at it
//
project *pp = project_alloc(name[j]);
pp->bind_existing();
int err = project_is_readable(pp);
if (err != 0)
{
pp->free();
continue;
}
//
// for each change within this project the user
// is working on emit a line of information
//
for (long n = 0;; ++n)
{
long change_number = 0;
if (!up->own_nth(pp, n, change_number))
break;
//
// locate change data
//
change::pointer cp = change::create(pp, change_number);
cp->bind_existing();
//
// emit the info
//
project_col->fputs(project_name_get(pp).c_str());
change_col->fprintf("%4ld", magic_zero_decode(change_number));
cstate_ty *cstate_data = cp->cstate_get();
state_col->fputs(cstate_state_ename(cstate_data->state));
if (cstate_data->brief_description)
{
description_col->fputs
(
cstate_data->brief_description->str_text
);
}
colp->eoln();
}
//
// free project
//
pp->free();
}
trace(("}\n"));
}
// vim: set ts=8 sw=4 et :