// // aegis - project change supervisor // Copyright (C) 2004-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 project_identifier_subset_branch::~project_identifier_subset_branch() { trace(("~project_identifier_subset_branch()\n")); } project_identifier_subset_branch::project_identifier_subset_branch( project_identifier_subset &arg) : deeper(arg), pp_with_branch(0), branch(0), grandparent(false), trunk(false) { trace(("project_identifier_subset_branch()\n")); } void project_identifier_subset_branch::command_line_check(usage_t usage) { deeper.command_line_check(usage); // // reject illegal combinations of options // if (grandparent) { if (branch) { mutually_exclusive_options ( arglex_token_branch, arglex_token_grandparent, usage ); } if (trunk) { mutually_exclusive_options ( arglex_token_trunk, arglex_token_grandparent, usage ); } branch = ".."; } if (trunk) { if (branch) { mutually_exclusive_options ( arglex_token_branch, arglex_token_trunk, usage ); } branch = ""; } } void project_identifier_subset_branch::command_line_parse(usage_t usage) { trace(("project_identifier_subset_branch::command_line_parse()\n{\n")); switch (arglex_token) { default: fatal_raw ( "%s: %d: option %s not handled in switch (bug)", __FILE__, __LINE__, arglex_token_name(arglex_token) ); // NOTREACHED case arglex_token_branch: if (branch) duplicate_option(usage); switch (arglex()) { default: option_needs_number(arglex_token_branch, usage); case arglex_token_number: case arglex_token_string: branch = arglex_value.alv_string; break; } break; case arglex_token_trunk: if (trunk) duplicate_option(usage); trunk = true; break; case arglex_token_grandparent: if (grandparent) duplicate_option(usage); grandparent = true; break; case arglex_token_project: case arglex_token_string: deeper.command_line_parse(usage); trace(("}\n")); return; } arglex(); trace(("}\n")); } void project_identifier_subset_branch::parse_change_with_branch(long &change_number, usage_t usage) { parse_change_with_branch(change_number, branch, usage); } void project_identifier_subset_branch::parse_change_with_branch(long &change_number, const char *&branch_arg, usage_t usage) { deeper.parse_change_with_branch ( change_number, branch_arg, usage ); } user_ty::pointer project_identifier_subset_branch::get_up() { return deeper.get_up(); } void project_identifier_subset_branch::set_user_by_name(nstring &login) { deeper.set_user_by_name(login); } project_ty * project_identifier_subset_branch::get_pp() { if (!pp_with_branch) { pp_with_branch = deeper.get_pp(); assert(pp_with_branch); if (branch) { pp_with_branch = pp_with_branch->find_branch(branch); assert(pp_with_branch); } } return pp_with_branch; } bool project_identifier_subset_branch::set() const { return deeper.set(); }