1/* 2 * aegis - project change supervisor 3 * Copyright (C) 1991-2008 Peter Miller 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 3 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program. If not, see 17 * <http://www.gnu.org/licenses/>. 18 * 19 * If you add a new project attribute, you must edit all of these files... 20 * aegis/aenpr.cc Where it is defaulted (if not zero) 21 * aegis/aenrls.cc Where it is defaulted (if not zero) 22 * libaegis/change/branch/*.cc Where it is set&get 23 * libaegis/change/branch.h Where it is in a prototype 24 * libaegis/change/cstate/improve.cc Where it is defaulted 25 * libaegis/cstate.def Where it is defined 26 * libaegis/pattr.def Where it is defined 27 * libaegis/project/*.cc Where it is set&get 28 * libaegis/project.h Where it is in a prototype 29 * libaegis/project/new_branch.cc Where it is copied 30 * libaegis/project/pattr/get.cc Where it is copied 31 * libaegis/project/pattr/set.cc Where it is copied 32 * lib/en/man5/aecstate.5 Where it is documented 33 * lib/en/man5/aepattr.5 Where it is documented 34 * lib/wish/proj_attr.rpt Where it is read 35 * script/tkaepa.in Where it is edited. 36 * You will also have to fix a whole bunch of tests. 37 */ 38 39#include <libaegis/common.def> 40 41/* 42 * This field contains 43 * a description of the project. 44 * Large amounts of prose are not required; 45 * a single line is sufficient. 46 */ 47description = string; 48 49/* 50 * If this field is true, then a developer may review her own change. 51 * This is probably only a good idea for projects of less than 3 people. 52 * The idea is for as many people as possible to critically examine a change. 53 */ 54developer_may_review = boolean; 55 56/* 57 * If this field is true, then a developer may integrate her own change. 58 * This is probably only a good idea for projects of less than 3 people. 59 * The idea is for as many people as possible to critically examine a change. 60 */ 61developer_may_integrate = boolean; 62 63/* 64 * If this field is true, then a reviewer may integrate a change she reviewed. 65 * This is probably only a good idea for projects of less than 3 people. 66 * The idea is for as many people as possible to critically examine a change. 67 */ 68reviewer_may_integrate = boolean; 69 70/* 71 * This field is true if developers may created changes, 72 * in addition to administrators. 73 * This tends to be a very useful thing, 74 * since developers find most of the bugs. 75 */ 76developers_may_create_changes = boolean; 77 78/* 79 * This command is used to notify a developer that a change requires 80 * developing; it is issued when a project administrator uses an 'aedb 81 * -User' command to force development of a change by a specific user. 82 * All of the substitutions described in aesub(5) are available. This 83 * field is optional. 84 * 85 * Executed as: the new developer. 86 * Current directory: the development directory of the change 87 * for the new developer. 88 * Exit status: ignored. 89 */ 90forced_develop_begin_notify_command = string; 91 92/* 93 * notify that a change requires reviewing 94 * All of the substitutions described in aesub(5) are available. 95 * this field is optional 96 * 97 * This command could also be used to notify other management systems, 98 * such as progress and defect tracking. 99 * 100 * Executed as: the developer. 101 * Current directory: the development directory of the change. 102 * Exit status: ignored. 103 */ 104develop_end_notify_command = string; 105 106/* 107 * notify that a change has been withdrawn from review 108 * for further development 109 * All of the substitutions described in aesub(5) are available. 110 * this field is optional 111 * 112 * This command could also be used to notify other management systems, 113 * such as progress and defect tracking. 114 * 115 * Executed as: the developer. 116 * Current directory: the development directory of the change. 117 * Exit status: ignored. 118 */ 119develop_end_undo_notify_command = string; 120 121/* 122 * notify that the review has begun 123 * All of the substitutions described in aesub(5) are available. 124 * this field is optional 125 * 126 * This command could also be used to notify other management systems, 127 * such as progress and defect tracking. 128 * 129 * Executed as: the reviewer. 130 * Current directory: the development directory of the change. 131 * Exit status: ignored. 132 */ 133review_begin_notify_command = string; 134 135/* 136 * notify that the review has no longer begun 137 * All of the substitutions described in aesub(5) are available. 138 * this field is optional 139 * 140 * This command could also be used to notify other management systems, 141 * such as progress and defect tracking. 142 * 143 * Executed as: the reviewer. 144 * Current directory: the development directory of the change. 145 * Exit status: ignored. 146 */ 147review_begin_undo_notify_command = string; 148 149/* 150 * notify that the review has passed 151 * All of the substitutions described in aesub(5) are available. 152 * this field is optional 153 * 154 * This command could also be used to notify other management systems, 155 * such as progress and defect tracking. 156 * 157 * Executed as: the reviewer. 158 * Current directory: the development directory of the change. 159 * Exit status: ignored. 160 */ 161review_pass_notify_command = string; 162 163/* 164 * notify that a review pass has has been rescinded 165 * All of the substitutions described in aesub(5) are available. 166 * this field is optional. 167 * Defaults to the develop_end_notify_command field. 168 * 169 * This command could also be used to notify other management systems, 170 * such as progress and defect tracking. 171 * 172 * Executed as: the reviewer. 173 * Current directory: the development directory of the change. 174 * Exit status: ignored. 175 */ 176review_pass_undo_notify_command = string; 177 178/* 179 * notify that the review has failed 180 * All of the substitutions described in aesub(5) are available. 181 * this field is optional 182 * 183 * This command could also be used to notify other management systems, 184 * such as progress and defect tracking. 185 * 186 * Executed as: the reviewer. 187 * Current directory: the development directory of the change. 188 * Exit status: ignored. 189 */ 190review_fail_notify_command = string; 191 192/* 193 * notify that the integration has passed 194 * All of the substitutions described in aesub(5) are available. 195 * this field is optional 196 * 197 * This command could also be used to notify other management systems, 198 * such as progress and defect tracking. 199 * 200 * Executed as: the project owner. 201 * Current directory: the new project baseline. 202 * Exit status: ignored. 203 */ 204integrate_pass_notify_command = string; 205 206/* 207 * notify that the integration has failed 208 * All of the substitutions described in aesub(5) are available. 209 * this field is optional 210 * 211 * This command could also be used to notify other management systems, 212 * such as progress and defect tracking. 213 * 214 * Executed as: the integrator. 215 * Current directory: the development directory of the change. 216 * Exit status: ignored. 217 */ 218integrate_fail_notify_command = string; 219 220/* 221 * The pathname of where to place new development directories. 222 * The pathname must be absolute. 223 * Only consulted if the uconf field of the same name is not set. 224 * Defaults to $HOME. 225 */ 226default_development_directory = string; 227 228/* 229 * File permission mode mask. See umask(2) for more information. 230 * This value will always be OR'ed with 022, because aegis is paranoid. 231 */ 232umask = integer; 233 234/* 235 * This field contains what to do when a change is created with 236 * no test exemption specified. 237 */ 238default_test_exemption = boolean; 239 240/* 241 * This field contains what to do when a change is created with no 242 * regression test exemption specified. Defaults to true if not set. 243 */ 244default_test_regression_exemption = boolean; 245 246/* 247 * This field contains a list of copyright years, for use in copyright 248 * notices, etc. It is updated each integrate_begin, if necessary, to 249 * include the current year. Available as the ${Copyright_Years} 250 * substitution, and included in the version listing. 251 */ 252copyright_years = [ integer ]; 253 254/* 255 * The minimum change number for aenc, if no change number is specified. 256 * This allows the low-numbered change numbers to be used for branches 257 * later in the project. Defaults to 10 if not set, may not be less 258 * than 1. 259 */ 260minimum_change_number = integer; 261 262/* 263 * This attribute is used to control the reuse of change numbers to fill 264 * in gaps caused by using aencu. Defaults to true if not set. 265 */ 266reuse_change_numbers = boolean; 267 268/* 269 * The minimum branch number for aenbr, if no branch number is specified. 270 * Defaults to 1 if not set. 271 */ 272minimum_branch_number = integer; 273 274/* 275 * This field may be set to true if you want to skip various unlucky 276 * numbers for changes, branches and tests. Various traditions are 277 * avoided, both Eastern and Western. Defaults to false if not set. 278 */ 279skip_unlucky = boolean; 280 281/* 282 * This field may be set to true if you want to compress the database 283 * on writing. (It is always uncompressed on reading if necessary.) 284 */ 285compress_database = boolean; 286 287/* 288 * This field controls the state entered on a successfil develop end 289 * state transition. The default is "being reviewed". 290 * 291 * goto_being_reviewed 292 * This means that the state machine goes from the being_developed 293 * state to the being_reviewed state. The aerb command only sends 294 * informative email. 295 * 296 * goto_awaiting_review 297 * This means that the state machine goes from the being_developed 298 * state to the awaiting_review state. The aerb command is now 299 * essential. 300 * 301 * goto_awaiting_integration 302 * This means that the state machine goes from the being_developed 303 * state into the awaiting_inmtegartion state. Code review is 304 * skipped entirely. 305 * 306 * Note that the "developer_may_review" setting may not contradict the 307 * "develop_end_action". If developers may not review their own work, 308 * then you may not goto directly to being integrated (as this means 309 * much te same thing). 310 */ 311develop_end_action = (goto_being_reviewed, goto_awaiting_review, 312 goto_awaiting_integration); 313 314/* 315 * This field may be used to protect the development directory after 316 * the "being developed" state. It does this by making it read-only at 317 * develop end time. Should the change ever be returned to the "being 318 * developed" state, it will be made writble again. 319 * 320 * The default is false, meaning to leave the development directory 321 * writable while is being reviewed and integrated. Aegis' normal 322 * tampering detection will notice if files are changed, but there is 323 * no reminder to the developer that the change should be left alone. 324 */ 325protect_development_directory = boolean; 326