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