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