/* * aegis - project change supervisor * Copyright (C) 1991-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 * . * * If you add a new project attribute, you must edit all of these files... * aegis/aenpr.cc Where it is defaulted (if not zero) * aegis/aenrls.cc Where it is defaulted (if not zero) * libaegis/change/branch/*.cc Where it is set&get * libaegis/change/branch.h Where it is in a prototype * libaegis/change/cstate/improve.cc Where it is defaulted * libaegis/cstate.def Where it is defined * libaegis/pattr.def Where it is defined * libaegis/project/*.cc Where it is set&get * libaegis/project.h Where it is in a prototype * libaegis/project/new_branch.cc Where it is copied * libaegis/project/pattr/get.cc Where it is copied * libaegis/project/pattr/set.cc Where it is copied * lib/en/man5/aecstate.5 Where it is documented * lib/en/man5/aepattr.5 Where it is documented * lib/wish/proj_attr.rpt Where it is read * script/tkaepa.in Where it is edited. * You will also have to fix a whole bunch of tests. */ #include /* * This field contains * a description of the project. * Large amounts of prose are not required; * a single line is sufficient. */ description = string; /* * If this field is true, then a developer may review her own change. * This is probably only a good idea for projects of less than 3 people. * The idea is for as many people as possible to critically examine a change. */ developer_may_review = boolean; /* * If this field is true, then a developer may integrate her own change. * This is probably only a good idea for projects of less than 3 people. * The idea is for as many people as possible to critically examine a change. */ developer_may_integrate = boolean; /* * If this field is true, then a reviewer may integrate a change she reviewed. * This is probably only a good idea for projects of less than 3 people. * The idea is for as many people as possible to critically examine a change. */ reviewer_may_integrate = boolean; /* * This field is true if developers may created changes, * in addition to administrators. * This tends to be a very useful thing, * since developers find most of the bugs. */ developers_may_create_changes = boolean; /* * This command is used to notify a developer that a change requires * developing; it is issued when a project administrator uses an 'aedb * -User' command to force development of a change by a specific user. * All of the substitutions described in aesub(5) are available. This * field is optional. * * Executed as: the new developer. * Current directory: the development directory of the change * for the new developer. * Exit status: ignored. */ forced_develop_begin_notify_command = string; /* * notify that a change requires reviewing * All of the substitutions described in aesub(5) are available. * this field is optional * * This command could also be used to notify other management systems, * such as progress and defect tracking. * * Executed as: the developer. * Current directory: the development directory of the change. * Exit status: ignored. */ develop_end_notify_command = string; /* * notify that a change has been withdrawn from review * for further development * All of the substitutions described in aesub(5) are available. * this field is optional * * This command could also be used to notify other management systems, * such as progress and defect tracking. * * Executed as: the developer. * Current directory: the development directory of the change. * Exit status: ignored. */ develop_end_undo_notify_command = string; /* * notify that the review has begun * All of the substitutions described in aesub(5) are available. * this field is optional * * This command could also be used to notify other management systems, * such as progress and defect tracking. * * Executed as: the reviewer. * Current directory: the development directory of the change. * Exit status: ignored. */ review_begin_notify_command = string; /* * notify that the review has no longer begun * All of the substitutions described in aesub(5) are available. * this field is optional * * This command could also be used to notify other management systems, * such as progress and defect tracking. * * Executed as: the reviewer. * Current directory: the development directory of the change. * Exit status: ignored. */ review_begin_undo_notify_command = string; /* * notify that the review has passed * All of the substitutions described in aesub(5) are available. * this field is optional * * This command could also be used to notify other management systems, * such as progress and defect tracking. * * Executed as: the reviewer. * Current directory: the development directory of the change. * Exit status: ignored. */ review_pass_notify_command = string; /* * notify that a review pass has has been rescinded * All of the substitutions described in aesub(5) are available. * this field is optional. * Defaults to the develop_end_notify_command field. * * This command could also be used to notify other management systems, * such as progress and defect tracking. * * Executed as: the reviewer. * Current directory: the development directory of the change. * Exit status: ignored. */ review_pass_undo_notify_command = string; /* * notify that the review has failed * All of the substitutions described in aesub(5) are available. * this field is optional * * This command could also be used to notify other management systems, * such as progress and defect tracking. * * Executed as: the reviewer. * Current directory: the development directory of the change. * Exit status: ignored. */ review_fail_notify_command = string; /* * notify that the integration has passed * All of the substitutions described in aesub(5) are available. * this field is optional * * This command could also be used to notify other management systems, * such as progress and defect tracking. * * Executed as: the project owner. * Current directory: the new project baseline. * Exit status: ignored. */ integrate_pass_notify_command = string; /* * notify that the integration has failed * All of the substitutions described in aesub(5) are available. * this field is optional * * This command could also be used to notify other management systems, * such as progress and defect tracking. * * Executed as: the integrator. * Current directory: the development directory of the change. * Exit status: ignored. */ integrate_fail_notify_command = string; /* * The pathname of where to place new development directories. * The pathname must be absolute. * Only consulted if the uconf field of the same name is not set. * Defaults to $HOME. */ default_development_directory = string; /* * File permission mode mask. See umask(2) for more information. * This value will always be OR'ed with 022, because aegis is paranoid. */ umask = integer; /* * This field contains what to do when a change is created with * no test exemption specified. */ default_test_exemption = boolean; /* * This field contains what to do when a change is created with no * regression test exemption specified. Defaults to true if not set. */ default_test_regression_exemption = boolean; /* * This field contains a list of copyright years, for use in copyright * notices, etc. It is updated each integrate_begin, if necessary, to * include the current year. Available as the ${Copyright_Years} * substitution, and included in the version listing. */ copyright_years = [ integer ]; /* * The minimum change number for aenc, if no change number is specified. * This allows the low-numbered change numbers to be used for branches * later in the project. Defaults to 10 if not set, may not be less * than 1. */ minimum_change_number = integer; /* * This attribute is used to control the reuse of change numbers to fill * in gaps caused by using aencu. Defaults to true if not set. */ reuse_change_numbers = boolean; /* * The minimum branch number for aenbr, if no branch number is specified. * Defaults to 1 if not set. */ minimum_branch_number = integer; /* * This field may be set to true if you want to skip various unlucky * numbers for changes, branches and tests. Various traditions are * avoided, both Eastern and Western. Defaults to false if not set. */ skip_unlucky = boolean; /* * This field may be set to true if you want to compress the database * on writing. (It is always uncompressed on reading if necessary.) */ compress_database = boolean; /* * This field controls the state entered on a successfil develop end * state transition. The default is "being reviewed". * * goto_being_reviewed * This means that the state machine goes from the being_developed * state to the being_reviewed state. The aerb command only sends * informative email. * * goto_awaiting_review * This means that the state machine goes from the being_developed * state to the awaiting_review state. The aerb command is now * essential. * * goto_awaiting_integration * This means that the state machine goes from the being_developed * state into the awaiting_inmtegartion state. Code review is * skipped entirely. * * Note that the "developer_may_review" setting may not contradict the * "develop_end_action". If developers may not review their own work, * then you may not goto directly to being integrated (as this means * much te same thing). */ develop_end_action = (goto_being_reviewed, goto_awaiting_review, goto_awaiting_integration); /* * This field may be used to protect the development directory after * the "being developed" state. It does this by making it read-only at * develop end time. Should the change ever be returned to the "being * developed" state, it will be made writble again. * * The default is false, meaning to leave the development directory * writable while is being reviewed and integrated. Aegis' normal * tampering detection will notice if files are changed, but there is * no reminder to the developer that the change should be left alone. */ protect_development_directory = boolean;