// // 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_outstanding_changes_all(change_identifier &cid, string_list_ty *) { trace(("list_outstanding_changes_all()\n{\n")); if (cid.project_set()) list_project_inappropriate(); if (cid.set()) list_change_inappropriate(); // // list the projects // string_list_ty name; project_list_get(&name); // // create the columns // col::pointer colp = col::open((string_ty *)0); colp->title("List of Outstanding Changes", "for all projects"); int left = 0; output::pointer project_col = colp->create(left, left + PROJECT_WIDTH, "Project\n---------"); left += PROJECT_WIDTH + 1; output::pointer number_col = colp->create(left, left + CHANGE_WIDTH, "Change\n------"); left += CHANGE_WIDTH + 1; output::pointer state_col; output::pointer description_col; if (!option_terse_get()) { state_col = colp->create(left, left + STATE_WIDTH, "State\n-------"); left += STATE_WIDTH + 1; description_col = colp->create(left, 0, "Description\n-------------"); } // // scan each project // for (size_t j = 0; j < name.nstrings; ++j) { project_ty *pp = project_alloc(name.string[j]); pp->bind_existing(); // // make sure we have permission // int err = project_is_readable(pp); if (err != 0) { project_free(pp); continue; } // // list the project's changes // for (size_t k = 0; ; ++k) { // // make sure the change is not completed // long change_number = 0; if (!project_change_nth(pp, k, &change_number)) break; change::pointer cp = change_alloc(pp, change_number); change_bind_existing(cp); cstate_ty *cstate_data = cp->cstate_get(); if (cstate_data->state == cstate_state_completed) { change_free(cp); continue; } // // print the details // project_col->fputs(project_name_get(pp)); number_col->fprintf("%4ld", magic_zero_decode(change_number)); if (state_col) { state_col->fputs(cstate_state_ename(cstate_data->state)); if ( option_verbose_get() && cstate_data->state == cstate_state_being_developed ) { state_col->end_of_line(); state_col->fputs(change_developer_name(cp)); } if ( option_verbose_get() && cstate_data->state == cstate_state_being_integrated ) { state_col->end_of_line(); state_col->fputs(change_integrator_name(cp)); } } if (description_col && cstate_data->brief_description) { description_col->fputs(cstate_data->brief_description); } colp->eoln(); // // At some point, will need to recurse // if it is a branch and not a leaf. // change_free(cp); } project_free(pp); } trace(("}\n")); }