1 //
2 // aegis - project change supervisor
3 // Copyright (C) 1995-1998, 2001-2008, 2011, 2012 Peter Miller
4 // Copyright (C) 2008, 2009 Walter Franzini
5 //
6 // This program is free software; you can redistribute it and/or modify
7 // it under the terms of the GNU General Public License as published by
8 // the Free Software Foundation; either version 3 of the License, or
9 // (at your option) any later version.
10 //
11 // This program is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
15 //
16 // You should have received a copy of the GNU General Public License
17 // along with this program. If not, see
18 // <http://www.gnu.org/licenses/>.
19 //
20
21 #include <common/ac/assert.h>
22
23 #include <common/str_list.h>
24 #include <common/trace.h>
25 #include <libaegis/change/branch.h>
26 #include <libaegis/project/history.h>
27 #include <libaegis/zero.h>
28
29
30 bool
project_history_delta_validate(project * pp,long delta_number)31 project_history_delta_validate(project *pp, long delta_number)
32 {
33 change::pointer cp;
34
35 cp = pp->change_get();
36 return change_history_delta_validate(cp, delta_number);
37 }
38
39
40 time_t
project_history_delta_to_timestamp(project * pp,long delnum)41 project_history_delta_to_timestamp(project *pp, long delnum)
42 {
43 return change_history_delta_to_timestamp(pp, delnum);
44 }
45
46
47 long
project_history_timestamp_to_delta(project * pp,time_t when)48 project_history_timestamp_to_delta(project *pp, time_t when)
49 {
50 return change_history_timestamp_to_delta(pp, when);
51 }
52
53
54 long
project_history_delta_latest(project * pp)55 project_history_delta_latest(project *pp)
56 {
57 change::pointer cp;
58
59 cp = pp->change_get();
60 return change_history_delta_latest(cp);
61 }
62
63
64 long
project_history_delta_by_name(project * pp,string_ty * delta_name,int errok)65 project_history_delta_by_name(project *pp, string_ty *delta_name, int errok)
66 {
67 change::pointer cp;
68
69 cp = pp->change_get();
70 return change_history_delta_by_name(cp, delta_name, errok);
71 }
72
73
74 long
project_history_change_by_name(project * pp,string_ty * delta_name,int errok)75 project_history_change_by_name(project *pp, string_ty *delta_name, int errok)
76 {
77 change::pointer cp;
78
79 cp = pp->change_get();
80 return change_history_change_by_name(cp, delta_name, errok);
81 }
82
83
84 long
project_history_change_by_timestamp(project * pp,time_t when)85 project_history_change_by_timestamp(project *pp, time_t when)
86 {
87 return change_history_change_by_timestamp(pp, when);
88 }
89
90
91 long
project_history_change_by_delta(project * pp,long delta_number)92 project_history_change_by_delta(project *pp, long delta_number)
93 {
94 change::pointer cp;
95
96 cp = pp->change_get();
97 return change_history_change_by_delta(cp, delta_number);
98 }
99
100
101 void
project_history_delta_name_delete(project * pp,string_ty * delta_name)102 project_history_delta_name_delete(project *pp, string_ty *delta_name)
103 {
104 change::pointer cp;
105
106 cp = pp->change_get();
107 change_history_delta_name_delete(cp, delta_name);
108 }
109
110
111 void
project_history_delta_name_add(project * pp,long delta_number,string_ty * delta_name)112 project_history_delta_name_add(project *pp, long delta_number,
113 string_ty *delta_name)
114 {
115 change::pointer cp;
116
117 cp = pp->change_get();
118 change_history_delta_name_add(cp, delta_number, delta_name);
119 }
120
121
122 long
project_current_integration_get(project * pp)123 project_current_integration_get(project *pp)
124 {
125 change::pointer cp;
126 long result;
127
128 trace(("project_current_integration_get(pp = %p)\n{\n", pp));
129 cp = pp->change_get();
130 result = change_current_integration_get(cp);
131 trace(("return %ld;\n", result));
132 trace(("}\n"));
133 return result;
134 }
135
136
137 void
project_current_integration_set(project * pp,long change_number)138 project_current_integration_set(project *pp, long change_number)
139 {
140 change::pointer cp;
141
142 trace(("project_current_integration_set(pp = %p, n = %ld)\n{\n",
143 pp, change_number));
144 assert(change_number >= 0 || change_number == MAGIC_ZERO);
145 cp = pp->change_get();
146 change_current_integration_set(cp, change_number);
147 trace(("}\n"));
148 }
149
150
151 long
project_next_delta_number(project * pp)152 project_next_delta_number(project *pp)
153 {
154 change::pointer cp;
155
156 cp = pp->change_get();
157 return change_branch_next_delta_number(cp);
158 }
159
160
161 void
project_copyright_years_merge(project * pp,change::pointer cp2)162 project_copyright_years_merge(project *pp, change::pointer cp2)
163 {
164 change::pointer cp1;
165
166 cp1 = pp->change_get();
167 change_copyright_years_merge(cp1, cp2);
168 }
169
170
171 void
project_copyright_years_get(project * pp,int * ary,int ary_len_max,int * ary_len)172 project_copyright_years_get(project *pp, int *ary, int ary_len_max,
173 int *ary_len)
174 {
175 change::pointer cp;
176
177 //
178 // when we have the real thing, will need to get the years
179 // from parent branches back to the trunk
180 //
181 cp = pp->change_get();
182 change_copyright_years_get(cp, ary, ary_len_max, ary_len);
183 }
184
185
186 void
project_copyright_year_append(project * pp,int yyyy)187 project_copyright_year_append(project *pp, int yyyy)
188 {
189 change::pointer cp;
190
191 cp = pp->change_get();
192 change_copyright_year_append(cp, yyyy);
193 }
194
195
196 void
project_history_new(project * pp,long delta_number,long change_number,string_ty * uuid,time_t when,bool is_a_branch)197 project_history_new(project *pp, long delta_number, long change_number,
198 string_ty *uuid, time_t when, bool is_a_branch)
199 {
200 change::pointer cp;
201
202 trace(("project_history_new(pp = %p, delta_number = %ld, "
203 "change_number = %ld)\n{\n", pp, delta_number, change_number));
204 cp = pp->change_get();
205 change_branch_history_new
206 (
207 cp,
208 delta_number,
209 change_number,
210 uuid,
211 when,
212 is_a_branch
213 );
214 trace(("}\n"));
215 }
216
217
218 int
project_history_nth(project * pp,long n,long * cnp,long * dnp,string_list_ty * name)219 project_history_nth(project *pp, long n, long *cnp, long *dnp,
220 string_list_ty *name)
221 {
222 change::pointer cp;
223 int result;
224
225 trace(("project_history_nth(pp = %p, n = %ld)\n{\n", pp, n));
226 cp = pp->change_get();
227 result = change_branch_history_nth(cp, n, cnp, dnp, name);
228 trace(("return %d;\n", result));
229 trace(("}\n"));
230 return result;
231 }
232
233
234 bool
project_administrator_query(project * pp,const nstring & usrnam)235 project_administrator_query(project *pp, const nstring &usrnam)
236 {
237 trace(("project_administrator_query(pp = %p, usrnam = %s)\n{\n",
238 pp, usrnam.quote_c().c_str()));
239 change::pointer cp = pp->change_get();
240 bool result = change_branch_administrator_query(cp, usrnam.get_ref());
241 trace(("return %d;\n", result));
242 trace(("}\n"));
243 return result;
244 }
245
246
247 bool
project_administrator_query(project * pp,string_ty * usrnam)248 project_administrator_query(project *pp, string_ty *usrnam)
249 {
250 trace(("project_administrator_query(pp = %p, usrnam = \"%s\")\n{\n",
251 pp, usrnam->str_text));
252 bool result = project_administrator_query(pp, nstring(usrnam));
253 trace(("return %d;\n", result));
254 trace(("}\n"));
255 return result;
256 }
257
258
259 void
project_administrator_add(project * pp,const nstring & usrnam)260 project_administrator_add(project *pp, const nstring &usrnam)
261 {
262 trace(("project_administrator_add(pp = %p, usrnam = %s)\n{\n",
263 pp, usrnam.quote_c().c_str()));
264 change::pointer cp = pp->change_get();
265 change_branch_administrator_add(cp, usrnam.get_ref());
266 trace(("}\n"));
267 }
268
269
270 void
project_administrator_add(project * pp,string_ty * usrnam)271 project_administrator_add(project *pp, string_ty *usrnam)
272 {
273 trace(("project_administrator_add(pp = %p, usrnam = \"%s\")\n{\n",
274 pp, usrnam->str_text));
275 project_administrator_add(pp, nstring(usrnam));
276 trace(("}\n"));
277 }
278
279
280 void
project_administrator_remove(project * pp,const nstring & usrnam)281 project_administrator_remove(project *pp, const nstring &usrnam)
282 {
283 trace(("project_administrator_remove(pp = %p, usrnam = %s)\n{\n",
284 pp, usrnam.quote_c().c_str()));
285 change::pointer cp = pp->change_get();
286 change_branch_administrator_remove(cp, usrnam.get_ref());
287 trace(("}\n"));
288 }
289
290
291 void
project_administrator_remove(project * pp,string_ty * usrnam)292 project_administrator_remove(project *pp, string_ty *usrnam)
293 {
294 trace(("project_administrator_remove(pp = %p, usrnam = \"%s\")\n{\n",
295 pp, usrnam->str_text));
296 project_administrator_remove(pp, nstring(usrnam));
297 trace(("}\n"));
298 }
299
300
301 string_ty *
project_administrator_nth(project * pp,long n)302 project_administrator_nth(project *pp, long n)
303 {
304 change::pointer cp;
305 string_ty *result;
306
307 trace(("project_administrator_nth(pp = %p, n = %ld)\n{\n",
308 pp, n));
309 cp = pp->change_get();
310 result = change_branch_administrator_nth(cp, n);
311 trace(("return %p;\n", result));
312 trace(("}\n"));
313 return result;
314 }
315
316
317 bool
project_developer_query(project * pp,const nstring & usrnam)318 project_developer_query(project *pp, const nstring &usrnam)
319 {
320 trace(("project_developer_query(pp = %p, usrnam = %s)\n{\n",
321 pp, usrnam.quote_c().c_str()));
322 change::pointer cp = pp->change_get();
323 bool result = change_branch_developer_query(cp, usrnam.get_ref());
324 trace(("return %d;\n", result));
325 trace(("}\n"));
326 return result;
327 }
328
329
330 bool
project_developer_query(project * pp,string_ty * usrnam)331 project_developer_query(project *pp, string_ty *usrnam)
332 {
333 trace(("project_developer_query(pp = %p, usrnam = \"%s\")\n{\n",
334 pp, usrnam->str_text));
335 bool result = project_developer_query(pp, nstring(usrnam));
336 trace(("return %d;\n", result));
337 trace(("}\n"));
338 return result;
339 }
340
341
342 void
project_developer_add(project * pp,const nstring & usrnam)343 project_developer_add(project *pp, const nstring &usrnam)
344 {
345 trace(("project_developer_add(pp = %p, usrnam = %s)\n{\n",
346 pp, usrnam.quote_c().c_str()));
347 change::pointer cp = pp->change_get();
348 change_branch_developer_add(cp, usrnam.get_ref());
349 trace(("}\n"));
350 }
351
352
353 void
project_developer_add(project * pp,string_ty * usrnam)354 project_developer_add(project *pp, string_ty *usrnam)
355 {
356 trace(("project_developer_add(pp = %p, usrnam = \"%s\")\n{\n",
357 pp, usrnam->str_text));
358 project_developer_add(pp, nstring(usrnam));
359 trace(("}\n"));
360 }
361
362
363 void
project_developer_remove(project * pp,const nstring & usrnam)364 project_developer_remove(project *pp, const nstring &usrnam)
365 {
366 trace(("project_developer_remove(pp = %p, usrnam = \"%s\")\n{\n",
367 pp, usrnam.quote_c().c_str()));
368 change::pointer cp = pp->change_get();
369 change_branch_developer_remove(cp, usrnam.get_ref());
370 trace(("}\n"));
371 }
372
373
374 void
project_developer_remove(project * pp,string_ty * usrnam)375 project_developer_remove(project *pp, string_ty *usrnam)
376 {
377 trace(("project_developer_remove(pp = %p, usrnam = \"%s\")\n{\n",
378 pp, usrnam->str_text));
379 project_developer_remove(pp, nstring(usrnam));
380 trace(("}\n"));
381 }
382
383
384 string_ty *
project_developer_nth(project * pp,long n)385 project_developer_nth(project *pp, long n)
386 {
387 change::pointer cp;
388 string_ty *result;
389
390 trace(("project_developer_nth(pp = %p, n = %ld)\n{\n",
391 pp, n));
392 cp = pp->change_get();
393 result = change_branch_developer_nth(cp, n);
394 trace(("return %p;\n", result));
395 trace(("}\n"));
396 return result;
397 }
398
399
400 bool
project_reviewer_query(project * pp,const nstring & usrnam)401 project_reviewer_query(project *pp, const nstring &usrnam)
402 {
403 trace(("project_reviewer_query(pp = %p, usrnam = %s)\n{\n",
404 pp, usrnam.quote_c().c_str()));
405 change::pointer cp = pp->change_get();
406 bool result = change_branch_reviewer_query(cp, usrnam.get_ref());
407 trace(("return %d;\n", result));
408 trace(("}\n"));
409 return result;
410 }
411
412
413 bool
project_reviewer_query(project * pp,string_ty * usrnam)414 project_reviewer_query(project *pp, string_ty *usrnam)
415 {
416 trace(("project_reviewer_query(pp = %p, usrnam = \"%s\")\n{\n",
417 pp, usrnam->str_text));
418 bool result = project_reviewer_query(pp, nstring(usrnam));
419 trace(("return %d;\n", result));
420 trace(("}\n"));
421 return result;
422 }
423
424
425 void
project_reviewer_add(project * pp,const nstring & usrnam)426 project_reviewer_add(project *pp, const nstring &usrnam)
427 {
428 trace(("project_reviewer_add(pp = %p, usrnam = %s)\n{\n",
429 pp, usrnam.quote_c().c_str()));
430 change::pointer cp = pp->change_get();
431 change_branch_reviewer_add(cp, usrnam.get_ref());
432 trace(("}\n"));
433 }
434
435
436 void
project_reviewer_add(project * pp,string_ty * usrnam)437 project_reviewer_add(project *pp, string_ty *usrnam)
438 {
439 trace(("project_reviewer_add(pp = %p, usrnam = \"%s\")\n{\n",
440 pp, usrnam->str_text));
441 project_reviewer_add(pp, nstring(usrnam));
442 trace(("}\n"));
443 }
444
445
446 void
project_reviewer_remove(project * pp,const nstring & usrnam)447 project_reviewer_remove(project *pp, const nstring &usrnam)
448 {
449 trace(("project_reviewer_remove(pp = %p, usrnam = %s)\n{\n",
450 pp, usrnam.quote_c().c_str()));
451 change::pointer cp = pp->change_get();
452 change_branch_reviewer_remove(cp, usrnam.get_ref());
453 trace(("}\n"));
454 }
455
456
457 void
project_reviewer_remove(project * pp,string_ty * usrnam)458 project_reviewer_remove(project *pp, string_ty *usrnam)
459 {
460 trace(("project_reviewer_remove(pp = %p, usrnam = \"%s\")\n{\n",
461 pp, usrnam->str_text));
462 project_reviewer_remove(pp, nstring(usrnam));
463 trace(("}\n"));
464 }
465
466
467 string_ty *
project_reviewer_nth(project * pp,long n)468 project_reviewer_nth(project *pp, long n)
469 {
470 change::pointer cp;
471 string_ty *result;
472
473 trace(("project_reviewer_nth(pp = %p, n = %ld)\n{\n",
474 pp, n));
475 cp = pp->change_get();
476 result = change_branch_reviewer_nth(cp, n);
477 trace(("return %p;\n", result));
478 trace(("}\n"));
479 return result;
480 }
481
482
483 bool
project_integrator_query(project * pp,const nstring & usrnam)484 project_integrator_query(project *pp, const nstring &usrnam)
485 {
486 trace(("project_integrator_query(pp = %p, usrnam = %s)\n{\n",
487 pp, usrnam.quote_c().c_str()));
488 change::pointer cp = pp->change_get();
489 bool result = change_branch_integrator_query(cp, usrnam.get_ref());
490 trace(("return %d;\n", result));
491 trace(("}\n"));
492 return result;
493 }
494
495
496 bool
project_integrator_query(project * pp,string_ty * usrnam)497 project_integrator_query(project *pp, string_ty *usrnam)
498 {
499 trace(("project_integrator_query(pp = %p, usrnam = \"%s\")\n{\n",
500 pp, usrnam->str_text));
501 bool result = project_integrator_query(pp, nstring(usrnam));
502 trace(("return %d;\n", result));
503 trace(("}\n"));
504 return result;
505 }
506
507
508 void
project_integrator_add(project * pp,const nstring & usrnam)509 project_integrator_add(project *pp, const nstring &usrnam)
510 {
511 trace(("project_integrator_add(pp = %p, usrnam = %s)\n{\n",
512 pp, usrnam.quote_c().c_str()));
513 change::pointer cp = pp->change_get();
514 change_branch_integrator_add(cp, usrnam.get_ref());
515 trace(("}\n"));
516 }
517
518
519 void
project_integrator_add(project * pp,string_ty * usrnam)520 project_integrator_add(project *pp, string_ty *usrnam)
521 {
522 trace(("project_integrator_add(pp = %p, usrnam = \"%s\")\n{\n",
523 pp, usrnam->str_text));
524 project_integrator_add(pp, nstring(usrnam));
525 trace(("}\n"));
526 }
527
528
529 void
project_integrator_remove(project * pp,const nstring & usrnam)530 project_integrator_remove(project *pp, const nstring &usrnam)
531 {
532 trace(("project_integrator_remove(pp = %p, usrnam = %s)\n{\n",
533 pp, usrnam.quote_c().c_str()));
534 change::pointer cp = pp->change_get();
535 change_branch_integrator_remove(cp, usrnam.get_ref());
536 trace(("}\n"));
537 }
538
539
540 void
project_integrator_remove(project * pp,string_ty * usrnam)541 project_integrator_remove(project *pp, string_ty *usrnam)
542 {
543 trace(("project_integrator_remove(pp = %p, usrnam = \"%s\")\n{\n",
544 pp, usrnam->str_text));
545 project_integrator_remove(pp, nstring(usrnam));
546 trace(("}\n"));
547 }
548
549
550 string_ty *
project_integrator_nth(project * pp,long n)551 project_integrator_nth(project *pp, long n)
552 {
553 change::pointer cp;
554 string_ty *result;
555
556 trace(("project_integrator_nth(pp = %p, n = %ld)\n{\n",
557 pp, n));
558 cp = pp->change_get();
559 result = change_branch_integrator_nth(cp, n);
560 trace(("return %p;\n", result));
561 trace(("}\n"));
562 return result;
563 }
564
565
566 void
project_change_add(project * pp,long change_number,int is_a_branch)567 project_change_add(project *pp, long change_number, int is_a_branch)
568 {
569 change::pointer cp;
570
571 trace(("project_change_add(pp = %p, change_number = %ld)\n{\n",
572 pp, change_number));
573 cp = pp->change_get();
574 change_branch_change_add(cp, change_number, is_a_branch);
575 trace(("}\n"));
576 }
577
578
579 void
project_change_remove(project * pp,long change_number)580 project_change_remove(project *pp, long change_number)
581 {
582 change::pointer cp;
583
584 trace(("project_change_remove(pp = %p, change_number = %ld)\n{\n",
585 pp, change_number));
586 cp = pp->change_get();
587 change_branch_change_remove(cp, change_number);
588 trace(("}\n"));
589 }
590
591
592 int
project_change_nth(project * pp,long n,long * cnp)593 project_change_nth(project *pp, long n, long *cnp)
594 {
595 change::pointer cp;
596 int result;
597
598 trace(("project_change_nth(pp = %p, n = %ld)\n{\n", pp, n));
599 cp = pp->change_get();
600 result = change_branch_change_nth(cp, n, cnp);
601 trace(("return %d;\n", result));
602 trace(("}\n"));
603 return result;
604 }
605
606
607 long
project_next_change_number(project * pp,int skip)608 project_next_change_number(project *pp, int skip)
609 {
610 change::pointer cp;
611 long change_number;
612
613 trace(("project_next_change_number(pp = %p)\n{\n", pp));
614 cp = pp->change_get();
615 change_number = change_branch_next_change_number(cp, skip);
616 trace(("return %ld;\n", change_number));
617 trace(("}\n"));
618 return change_number;
619 }
620
621
622 long
project_last_change_integrated(project * pp)623 project_last_change_integrated(project *pp)
624 {
625 change::pointer cp;
626 long n;
627
628 //
629 // This function is used to determine if the project file list
630 // has (potentially) changed. Hash all of the ancestors
631 // together.
632 //
633 n = 0;
634 while (pp)
635 {
636 cp = pp->change_get();
637 n = n * 29 + change_history_last_change_integrated(cp);
638 pp = (pp->is_a_trunk() ? 0 : pp->parent_get());
639 }
640 return n;
641 }
642
643
644 void
project_description_set(project * pp,string_ty * s)645 project_description_set(project *pp, string_ty *s)
646 {
647 change::pointer cp;
648 cstate_ty *cstate_data;
649
650 //
651 // set the trunk change state file
652 //
653 trace(("project_description_set(pp = %p, s = \"%s\")\n{\n",
654 pp, s->str_text));
655 cp = pp->change_get();
656 cstate_data = cp->cstate_get();
657 if (cstate_data->brief_description)
658 str_free(cstate_data->brief_description);
659 cstate_data->brief_description = str_copy(s);
660 trace(("}\n"));
661 }
662
663
664 nstring
project_description_get(project * pp)665 project_description_get(project *pp)
666 {
667 change::pointer cp;
668 cstate_ty *cstate_data;
669
670 cp = pp->change_get();
671 cstate_data = cp->cstate_get();
672 return nstring(cstate_data->brief_description);
673 }
674
675
676 string_ty *
project_version_previous_get(project * pp)677 project_version_previous_get(project *pp)
678 {
679 change::pointer cp;
680 cstate_ty *cstate_data;
681
682 cp = pp->change_get();
683 cstate_data = cp->cstate_get();
684 return cstate_data->version_previous;
685 }
686
687
688 void
project_version_previous_set(project * pp,string_ty * s)689 project_version_previous_set(project *pp, string_ty *s)
690 {
691 change::pointer cp;
692 cstate_ty *cstate_data;
693
694 cp = pp->change_get();
695 cstate_data = cp->cstate_get();
696 if (cstate_data->version_previous)
697 str_free(cstate_data->version_previous);
698 if (s)
699 cstate_data->version_previous = str_copy(s);
700 else
701 cstate_data->version_previous = 0;
702 }
703
704
705 void
project_umask_set(project * pp,int n)706 project_umask_set(project *pp, int n)
707 {
708 change_branch_umask_set(pp->change_get(), n);
709 }
710
711
712 int
project_umask_get(project * pp)713 project_umask_get(project *pp)
714 {
715 return pp->umask_get();
716 }
717
718
719 int
umask_get()720 project::umask_get()
721 {
722 if (off_limits)
723 return 027;
724 return change_branch_umask_get(change_get());
725 }
726
727
728 void
project_developer_may_review_set(project * pp,bool n)729 project_developer_may_review_set(project *pp, bool n)
730 {
731 change_branch_developer_may_review_set(pp->change_get(), n);
732 }
733
734
735 bool
project_developer_may_review_get(project * pp)736 project_developer_may_review_get(project *pp)
737 {
738 return change_branch_developer_may_review_get(pp->change_get());
739 }
740
741
742 void
project_developer_may_integrate_set(project * pp,bool n)743 project_developer_may_integrate_set(project *pp, bool n)
744 {
745 change_branch_developer_may_integrate_set(pp->change_get(), n);
746 }
747
748
749 bool
project_developer_may_integrate_get(project * pp)750 project_developer_may_integrate_get(project *pp)
751 {
752 return change_branch_developer_may_integrate_get(pp->change_get());
753 }
754
755
756 void
project_reviewer_may_integrate_set(project * pp,bool n)757 project_reviewer_may_integrate_set(project *pp, bool n)
758 {
759 change_branch_reviewer_may_integrate_set(pp->change_get(), n);
760 }
761
762
763 bool
project_reviewer_may_integrate_get(project * pp)764 project_reviewer_may_integrate_get(project *pp)
765 {
766 return change_branch_reviewer_may_integrate_get(pp->change_get());
767 }
768
769
770 void
project_developers_may_create_changes_set(project * pp,bool n)771 project_developers_may_create_changes_set(project *pp, bool n)
772 {
773 change_branch_developers_may_create_changes_set(pp->change_get(), n);
774 }
775
776
777 bool
project_developers_may_create_changes_get(project * pp)778 project_developers_may_create_changes_get(project *pp)
779 {
780 return
781 change_branch_developers_may_create_changes_get(pp->change_get());
782 }
783
784
785 void
project_forced_develop_begin_notify_command_set(project * pp,string_ty * s)786 project_forced_develop_begin_notify_command_set(project *pp, string_ty *s)
787 {
788 change_branch_forced_develop_begin_notify_command_set
789 (
790 pp->change_get(),
791 s
792 );
793 }
794
795
796 string_ty *
project_forced_develop_begin_notify_command_get(project * pp)797 project_forced_develop_begin_notify_command_get(project *pp)
798 {
799 return
800 change_branch_forced_develop_begin_notify_command_get
801 (
802 pp->change_get()
803 );
804 }
805
806
807 void
project_develop_end_notify_command_set(project * pp,string_ty * s)808 project_develop_end_notify_command_set(project *pp, string_ty *s)
809 {
810 change_branch_develop_end_notify_command_set(pp->change_get(), s);
811 }
812
813
814 string_ty *
project_develop_end_notify_command_get(project * pp)815 project_develop_end_notify_command_get(project *pp)
816 {
817 return change_branch_develop_end_notify_command_get(pp->change_get());
818 }
819
820
821 void
project_develop_end_undo_notify_command_set(project * pp,string_ty * s)822 project_develop_end_undo_notify_command_set(project *pp, string_ty *s)
823 {
824 change_branch_develop_end_undo_notify_command_set
825 (
826 pp->change_get(),
827 s
828 );
829 }
830
831
832 string_ty *
project_develop_end_undo_notify_command_get(project * pp)833 project_develop_end_undo_notify_command_get(project *pp)
834 {
835 return
836 change_branch_develop_end_undo_notify_command_get
837 (
838 pp->change_get()
839 );
840 }
841
842
843 void
project_review_pass_notify_command_set(project * pp,string_ty * s)844 project_review_pass_notify_command_set(project *pp, string_ty *s)
845 {
846 change_branch_review_pass_notify_command_set(pp->change_get(), s);
847 }
848
849
850 string_ty *
project_review_pass_notify_command_get(project * pp)851 project_review_pass_notify_command_get(project *pp)
852 {
853 return change_branch_review_pass_notify_command_get(pp->change_get());
854 }
855
856
857 void
project_review_pass_undo_notify_command_set(project * pp,string_ty * s)858 project_review_pass_undo_notify_command_set(project *pp, string_ty *s)
859 {
860 change_branch_review_pass_undo_notify_command_set
861 (
862 pp->change_get(),
863 s
864 );
865 }
866
867
868 string_ty *
project_review_pass_undo_notify_command_get(project * pp)869 project_review_pass_undo_notify_command_get(project *pp)
870 {
871 return
872 change_branch_review_pass_undo_notify_command_get
873 (
874 pp->change_get()
875 );
876 }
877
878
879 void
project_review_fail_notify_command_set(project * pp,string_ty * s)880 project_review_fail_notify_command_set(project *pp, string_ty *s)
881 {
882 change_branch_review_fail_notify_command_set(pp->change_get(), s);
883 }
884
885
886 string_ty *
project_review_fail_notify_command_get(project * pp)887 project_review_fail_notify_command_get(project *pp)
888 {
889 return change_branch_review_fail_notify_command_get(pp->change_get());
890 }
891
892
893 void
project_integrate_pass_notify_command_set(project * pp,string_ty * s)894 project_integrate_pass_notify_command_set(project *pp, string_ty *s)
895 {
896 change_branch_integrate_pass_notify_command_set(pp->change_get(), s);
897 }
898
899
900 string_ty *
project_integrate_pass_notify_command_get(project * pp)901 project_integrate_pass_notify_command_get(project *pp)
902 {
903 return
904 change_branch_integrate_pass_notify_command_get(pp->change_get());
905 }
906
907
908 void
project_integrate_fail_notify_command_set(project * pp,string_ty * s)909 project_integrate_fail_notify_command_set(project *pp, string_ty *s)
910 {
911 change_branch_integrate_fail_notify_command_set(pp->change_get(), s);
912 }
913
914
915 string_ty *
project_integrate_fail_notify_command_get(project * pp)916 project_integrate_fail_notify_command_get(project *pp)
917 {
918 return
919 change_branch_integrate_fail_notify_command_get(pp->change_get());
920 }
921
922
923 void
project_default_development_directory_set(project * pp,string_ty * s)924 project_default_development_directory_set(project *pp, string_ty *s)
925 {
926 change_branch_default_development_directory_set(pp->change_get(), s);
927 }
928
929 string_ty *
project_default_development_directory_get(project * pp)930 project_default_development_directory_get(project *pp)
931 {
932 return
933 change_branch_default_development_directory_get(pp->change_get());
934 }
935
936
937 void
project_default_test_exemption_set(project * pp,bool n)938 project_default_test_exemption_set(project *pp, bool n)
939 {
940 change_branch_default_test_exemption_set(pp->change_get(), n);
941 }
942
943
944 bool
project_default_test_exemption_get(project * pp)945 project_default_test_exemption_get(project *pp)
946 {
947 return change_branch_default_test_exemption_get(pp->change_get());
948 }
949
950
951 // vim: set ts=8 sw=4 et :
952