|
Aegis
4.25.D505
|
00001 // 00002 // aegis - project change supervisor 00003 // Copyright (C) 1995-2009, 2011, 2012 Peter Miller 00004 // Copyright (C) 2007, 2008 Walter Franzini 00005 // 00006 // This program is free software; you can redistribute it and/or modify 00007 // it under the terms of the GNU General Public License as published by 00008 // the Free Software Foundation; either version 3 of the License, or (at 00009 // your option) any later version. 00010 // 00011 // This program is distributed in the hope that it will be useful, 00012 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 // General Public License for more details. 00015 // 00016 // You should have received a copy of the GNU General Public License 00017 // along with this program. If not, see <http://www.gnu.org/licenses/>. 00018 // 00019 00020 #ifndef LIBAEGIS_CHANGE_H 00021 #define LIBAEGIS_CHANGE_H 00022 00023 #include <libaegis/cstate.fmtgen.h> 00024 #include <libaegis/fstate.fmtgen.h> 00025 #include <libaegis/pconf.fmtgen.h> 00026 #include <libaegis/view_path.h> 00027 #include <libaegis/zero.h> 00028 00029 class nstring_list; // forward 00030 00031 // 00032 // Name of the project configuration file, 00033 // relative to the baseline/devdir root. 00034 // 00035 #define THE_CONFIG_FILE_OLD "config" 00036 #define THE_CONFIG_FILE_NEW "aegis.conf" 00037 00038 #include <libaegis/user.h> 00039 00040 // 00041 // Define a magic number to represent the trunk transaction 00042 // of the project. It has an exceptional file name. 00043 // 00044 #define TRUNK_CHANGE_NUMBER ((long)((~(unsigned long)0) >> 1)) 00045 00046 #define TIME_NOT_SET (time_t)0 00047 #define UUID_NOT_SET (string_ty*)0 00048 00049 struct string_list_ty; // forward 00050 struct sub_context_ty; // forward 00051 struct symtab_ty; // forward 00052 class project; // forward 00053 00054 class change 00055 { 00056 public: 00063 typedef change *pointer; 00064 00065 long reference_count; 00066 project *pp; 00067 long number; 00068 cstate_ty *cstate_data; 00069 string_ty *cstate_filename; 00070 int cstate_is_a_new_file; 00071 fstate_ty *fstate_data; 00072 symtab_ty *fstate_stp; 00073 symtab_ty *fstate_uuid_stp; 00074 string_ty *fstate_filename; 00075 fstate_ty *pfstate_data; 00076 symtab_ty *pfstate_stp; 00077 symtab_ty *pfstate_uuid_stp; 00078 string_ty *pfstate_filename; 00079 int fstate_is_a_new_file; 00080 string_ty *top_path_unresolved; 00081 string_ty *top_path_resolved; 00082 string_ty *development_directory_unresolved; 00083 string_ty *development_directory_resolved; 00084 string_ty *integration_directory_unresolved; 00085 string_ty *integration_directory_resolved; 00086 string_ty *logfile; 00087 pconf_ty *pconf_data; 00088 long lock_magic; 00089 int bogus; 00090 string_ty *architecture_name; 00091 string_list_ty *file_list[view_path_MAX]; 00092 bool project_specific_setenv_performed; 00093 00094 // NOTE: methods are sorted alphabetically. To have methods 00095 // grouped, make sure they change their suffix rather than their 00096 // prefix. E.g. thingumy_get and thingumy_set rather than 00097 // get_thingumy and set_thingumy. 00098 00099 // ---------- A ------------------------------------------------------ 00100 00112 nstring attributes_get(const nstring &name); 00113 00127 bool attributes_get_boolean(const nstring &name); 00128 00129 // ---------- B ------------------------------------------------------ 00130 00135 nstring brief_description_get(void); 00136 00137 // ---------- C ------------------------------------------------------ 00138 00144 nstring copyright_years_get_string(void); 00145 00151 time_t completion_timestamp(void); 00152 00161 string_ty *creator_name(void); 00162 00171 string_ty *cstate_filename_get(void); 00172 00177 cstate_ty *cstate_get(void); 00178 00183 void cstate_write(void); 00184 00185 // ---------- D ------------------------------------------------------ 00186 00191 long delta_number_get(void); 00192 00197 nstring description_get(void); 00198 00208 string_ty *developer_name(void); 00209 00215 user_ty::pointer developer_user_get(void); 00216 00217 // ---------- E ------------------------------------------------------ 00218 00219 // ---------- F ------------------------------------------------------ 00220 00228 bool file_exists(const nstring &filename); 00229 00239 fstate_src_ty *file_find(const nstring &filename, view_path_ty vp); 00240 00251 fstate_src_ty *file_find(fstate_src_ty *src, view_path_ty vp); 00252 00263 fstate_src_ty *file_find(cstate_src_ty *src, view_path_ty vp); 00264 00273 fstate_src_ty *file_find(const nstring &filename); 00274 00284 fstate_src_ty *file_find_fuzzy(const nstring &filename, view_path_ty vp); 00285 00298 fstate_src_ty *file_find_uuid(string_ty *uuid, view_path_ty view_path); 00299 00312 fstate_src_ty *file_find_uuid(const nstring &uuid, view_path_ty view_path); 00313 00325 fstate_src_ty *file_new(string_ty *file_name); 00326 00340 fstate_src_ty *file_new(fstate_src_ty *meta); 00341 00352 string_ty *file_path(string_ty *file_name); 00353 00364 nstring file_path(const nstring &file_name); 00365 00376 string_ty *file_path(fstate_src_ty *src); 00377 00388 string_ty *file_path_by_uuid(string_ty *uuid); 00389 00400 nstring file_path_by_uuid(const nstring &uuid); 00401 00420 bool file_promote(void); 00421 00435 string_ty *file_resolve_name(user_ty::pointer up, string_ty *file_name); 00436 00450 nstring file_resolve_name(user_ty::pointer up, const nstring &file_name); 00451 00463 void file_resolve_names(user_ty::pointer up, string_list_ty &file_names); 00464 00477 bool file_unchanged(fstate_src_ty *src_data, user_ty::pointer up); 00478 00488 bool file_is_config(string_ty *name); 00489 00497 bool download_files_accessable(void); 00498 00499 private: 00508 void fimprove(fstate_ty *fstate_data); 00509 00510 public: 00520 fstate_ty *fstate_get(void); 00521 00522 // ---------- G ------------------------------------------------------ 00523 00528 int gid_get() const; 00529 00530 // ---------- H ------------------------------------------------------ 00531 00532 // ---------- I ------------------------------------------------------ 00533 00542 nstring integration_directory_get(bool resolve); 00543 00553 string_ty *integrator_name(void); 00554 00561 bool is_a_branch(void); 00562 00568 bool is_awaiting_development(void); 00569 00574 bool is_being_developed(void); 00575 00584 bool is_being_integrated(void); 00585 00590 bool is_completed(void); 00591 00592 // ---------- J ------------------------------------------------------ 00593 00594 // ---------- K ------------------------------------------------------ 00595 00596 // ---------- L ------------------------------------------------------ 00597 00598 // ---------- M ------------------------------------------------------ 00599 00600 // ---------- N ------------------------------------------------------ 00601 00602 // ---------- O ------------------------------------------------------ 00603 00604 // ---------- P ------------------------------------------------------ 00605 00619 nstring pconf_attributes_find(const nstring &name); 00620 00636 bool pconf_attributes_get_boolean(const nstring &name, bool dflt = false); 00637 00642 nstring pconf_copyright_owner_get(void); 00643 00649 fstate_ty *pfstate_get(void); 00650 00659 void project_specific_setenv_performed_set(void); 00660 00670 bool project_specific_setenv_performed_get() const; 00671 00672 // ---------- Q ------------------------------------------------------ 00673 00674 // ---------- R ------------------------------------------------------ 00675 00685 string_ty *reviewer_name(void); 00686 00695 bool run_project_file_command_needed(void); 00696 00707 void run_project_file_command(const user_ty::pointer &up); 00708 00717 void run_project_file_command_done(void); 00718 00728 void run_new_file_command(string_list_ty *slp, const user_ty::pointer &up); 00729 00739 void run_new_file_undo_command(string_list_ty *slp, 00740 const user_ty::pointer &up); 00741 00751 void run_new_test_command(string_list_ty *slp, 00752 const user_ty::pointer &up); 00753 00763 void run_new_test_undo_command(string_list_ty *slp, 00764 const user_ty::pointer &up); 00765 00775 void run_copy_file_command(string_list_ty *slp, const user_ty::pointer &up); 00776 00786 void run_copy_file_undo_command(string_list_ty *slp, 00787 const user_ty::pointer &up); 00788 00798 void run_remove_file_command(string_list_ty *slp, 00799 const user_ty::pointer &up); 00800 00811 void run_remove_file_undo_command(string_list_ty *slp, 00812 const user_ty::pointer &up); 00813 00824 void run_make_transparent_command(string_list_ty *slp, 00825 const user_ty::pointer &up); 00826 00837 void run_make_transparent_undo_command(string_list_ty *slp, 00838 const user_ty::pointer &up); 00839 00848 void run_forced_develop_begin_notify_command(const user_ty::pointer &up); 00849 00855 void run_develop_end_notify_command(void); 00856 00862 void run_develop_end_undo_notify_command(void); 00863 00869 void run_review_begin_notify_command(void); 00870 00876 void run_review_begin_undo_notify_command(void); 00877 00883 void run_review_pass_notify_command(void); 00884 00890 void run_review_pass_undo_notify_command(void); 00891 00897 void run_review_fail_notify_command(void); 00898 00904 void run_integrate_pass_notify_command(void); 00905 00911 void run_integrate_fail_notify_command(void); 00912 00922 void run_develop_begin_early_command(user_ty::pointer up); 00923 00933 void run_develop_begin_command(user_ty::pointer up); 00934 00935 // ---------- S ------------------------------------------------------ 00936 00947 void search_path_get(string_list_ty *result, bool resolve); 00948 00959 void search_path_get(nstring_list &result, bool resolve); 00960 00961 // ---------- T ------------------------------------------------------ 00962 00963 time_t time_limit_get(void); 00964 00971 int umask_get() const; 00972 00973 // ---------- U ------------------------------------------------------ 00974 00982 nstring uuid_get(void); 00983 00992 void uuid_get_list(nstring_list &uuids); 00993 00994 // ---------- V ------------------------------------------------------ 00995 01003 nstring version_debian_get(void); 01004 01011 nstring version_rpm_get(void); 01012 01019 nstring version_get(void); 01020 01021 // ---------- W ------------------------------------------------------ 01022 01029 bool was_a_branch(void); 01030 01031 // ---------- X ------------------------------------------------------ 01032 01033 // ---------- Y ------------------------------------------------------ 01034 01035 // ---------- Z ------------------------------------------------------ 01036 01037 // --------------------------------------------------------------------- 01038 // PLEASE keep the above method declarations in alphabetical order. 01039 01040 // 01041 // If you add instance variables to this class, don't forget to update 01042 // change_alloc() in libaegis/change/alloc.cc 01043 // change_free() in libaegis/change/free.cc 01044 // change_lock_sync() in libaegis/change/lock_sync.cc 01045 // 01046 }; 01047 01048 change::pointer change_alloc(project *, long); 01049 void change_free(change::pointer ); 01050 change::pointer change_copy(change::pointer ); 01051 void change_bind_existing(change::pointer ); 01052 int change_bind_existing_errok(change::pointer ); 01053 void change_bind_new(change::pointer ); 01054 change::pointer change_bogus(project *); 01055 01056 cstate_history_ty *change_history_new(change::pointer , user_ty::pointer ); 01057 01058 void change_top_path_set(change::pointer , string_ty *); 01059 void change_top_path_set(change::pointer , const nstring &); 01060 void change_development_directory_set(change::pointer , string_ty *); 01061 void change_integration_directory_set(change::pointer , string_ty *); 01062 string_ty *change_top_path_get(change::pointer , int); 01063 string_ty *change_development_directory_get(change::pointer , int); 01064 string_ty *change_integration_directory_get(change::pointer , int); 01065 string_ty *change_logfile_basename(void); 01066 string_ty *change_logfile_get(change::pointer ); 01067 void change_cstate_lock_prepare(change::pointer ); 01068 void change_error(change::pointer , sub_context_ty *, const char *); 01069 void change_fatal(change::pointer , sub_context_ty *, const char *) NORETURN; 01070 void change_verbose(change::pointer , sub_context_ty *, const char *); 01071 01078 void change_warning(change::pointer , sub_context_ty *, const char *); 01079 01085 void change_warning_obsolete_field(change::pointer cp, string_ty *errpos, 01086 const char *old_field, const char *new_field); 01087 01088 pconf_ty *change_pconf_get(change::pointer , int); 01089 01090 // use cp->run_new_file_command instead 01091 void change_run_new_file_command(change::pointer cp, string_list_ty *slp, 01092 user_ty::pointer up) DEPRECATED; 01093 01094 // use cp->run_new_file_undo_command instead 01095 void change_run_new_file_undo_command(change::pointer cp, string_list_ty *slp, 01096 user_ty::pointer up) DEPRECATED; 01097 01098 // use cp->run_new_test_command instead 01099 void change_run_new_test_command(change::pointer cp, string_list_ty *slp, 01100 user_ty::pointer up) DEPRECATED; 01101 01102 // use cp->run_new_test_undo_command instead 01103 void change_run_new_test_undo_command(change::pointer cp, string_list_ty *slp, 01104 user_ty::pointer up) DEPRECATED; 01105 01106 // use cp->run_copy_file_command instead 01107 void change_run_copy_file_command(change::pointer cp, string_list_ty *slp, 01108 user_ty::pointer up) DEPRECATED; 01109 01110 // use cp->run_copy_file_undo_command instead 01111 void change_run_copy_file_undo_command(change::pointer cp, string_list_ty *slp, 01112 user_ty::pointer up) DEPRECATED; 01113 01114 // use cp->run_remove_file_command instead 01115 void change_run_remove_file_command(change::pointer cp, string_list_ty *slp, 01116 user_ty::pointer up) DEPRECATED; 01117 01118 // use cp->run_remove_file_undo_command instead 01119 void change_run_remove_file_undo_command(change::pointer cp, 01120 string_list_ty *slp, user_ty::pointer up) DEPRECATED; 01121 01122 // use cp->run_make_transparent_command instead 01123 void change_run_make_transparent_command(change::pointer cp, 01124 string_list_ty *slp, user_ty::pointer up) DEPRECATED; 01125 01126 // use cp->run_make_transparent_undo_command instead 01127 void change_run_make_transparent_undo_command(change::pointer cp, 01128 string_list_ty *slp, user_ty::pointer up) DEPRECATED; 01129 01130 // use vp->run_project_file_command_needed() instead 01131 int change_run_project_file_command_needed(change::pointer cp) DEPRECATED; 01132 01133 // use cp->run_project_file_command(up) instead 01134 void change_run_project_file_command(change::pointer cp, user_ty::pointer up) 01135 DEPRECATED; 01136 01137 // use cp->run_forced_develop_begin_notify_command instead 01138 void change_run_forced_develop_begin_notify_command(change::pointer cp, 01139 user_ty::pointer up) DEPRECATED; 01140 01141 // use cp->run_develop_end_notify_command instead 01142 void change_run_develop_end_notify_command(change::pointer cp) DEPRECATED; 01143 01144 // use cp->run_develop_end_undo_notify_command instead 01145 void change_run_develop_end_undo_notify_command(change::pointer cp) DEPRECATED; 01146 01147 // use cp->run_review_begin_notify_command instead 01148 void change_run_review_begin_notify_command(change::pointer cp) DEPRECATED; 01149 01150 // use cp->run_review_begin_undo_notify_command 01151 void change_run_review_begin_undo_notify_command(change::pointer cp) DEPRECATED; 01152 01153 // use cp->run_review_pass_notify_command instead 01154 void change_run_review_pass_notify_command(change::pointer cp) DEPRECATED; 01155 01156 // use cp->run_review_pass_undo_notify_command instead 01157 void change_run_review_pass_undo_notify_command(change::pointer cp) DEPRECATED; 01158 01159 // use cp->run_review_fail_notify_command instead 01160 void change_run_review_fail_notify_command(change::pointer cp) DEPRECATED; 01161 01162 // use cp->run_integrate_pass_notify_command instead 01163 void change_run_integrate_pass_notify_command(change::pointer cp) DEPRECATED; 01164 01165 // use cp->run_integrate_fail_notify_command instead 01166 void change_run_integrate_fail_notify_command(change::pointer cp) DEPRECATED; 01167 01168 void change_run_history_get_command(change::pointer cp, fstate_src_ty *src, 01169 string_ty *output_file, user_ty::pointer up); 01170 void change_run_history_create_command(change::pointer cp, fstate_src_ty *); 01171 void change_run_history_put_command(change::pointer cp, fstate_src_ty *); 01172 01185 string_ty *change_run_history_query_command(change::pointer cp, 01186 fstate_src_ty *src); 01187 01188 void change_run_history_label_command(change::pointer cp, fstate_src_ty *, 01189 string_ty *label); 01190 01200 void change_run_history_transaction_begin_command(change::pointer cp); 01201 01211 void change_run_history_transaction_end_command(change::pointer cp); 01212 01222 void change_run_history_transaction_abort_command(change::pointer cp); 01223 01224 void change_history_trashed_fingerprints(change::pointer , string_list_ty *); 01225 void change_run_diff_command(change::pointer cp, user_ty::pointer up, 01226 string_ty *original, string_ty *input, string_ty *output); 01227 void change_run_diff3_command(change::pointer cp, user_ty::pointer up, 01228 string_ty *original, string_ty *most_recent, string_ty *input, 01229 string_ty *output); 01230 void change_run_merge_command(change::pointer cp, user_ty::pointer up, 01231 string_ty *original, string_ty *most_recent, string_ty *input, 01232 string_ty *output); 01233 void change_run_patch_diff_command(change::pointer cp, user_ty::pointer up, 01234 string_ty *original, string_ty *input, string_ty *output, 01235 string_ty *index_name); 01236 void change_run_annotate_diff_command(change::pointer cp, user_ty::pointer up, 01237 string_ty *original, string_ty *input, string_ty *output, 01238 string_ty *index_name, const char *diff_option); 01239 int change_has_merge_command(change::pointer ); 01240 void change_run_integrate_begin_command(change::pointer ); 01241 void change_run_integrate_begin_undo_command(change::pointer ); 01242 01243 void change_run_develop_begin_command(change::pointer cp, user_ty::pointer up) 01244 DEPRECATED; 01245 01246 void change_run_develop_begin_undo_command(change::pointer cp, 01247 user_ty::pointer up); 01248 int change_run_test_command(change::pointer cp, user_ty::pointer up, 01249 string_ty *, string_ty *, int, int, 01250 const nstring_list &variable_assignments); 01251 int change_run_development_test_command(change::pointer cp, user_ty::pointer up, 01252 string_ty *, string_ty *, int, int, 01253 const nstring_list &variable_assignments); 01254 void change_run_build_command(change::pointer ); 01255 void change_run_build_time_adjust_notify_command(change::pointer ); 01256 void change_run_development_build_command(change::pointer , user_ty::pointer , 01257 string_list_ty *); 01258 01272 void change_run_develop_end_policy_command(change::pointer cp, 01273 user_ty::pointer up); 01274 01275 string_ty *change_file_whiteout(change::pointer , string_ty *); 01276 void change_file_whiteout_write(change::pointer cp, string_ty *path, 01277 user_ty::pointer up); 01278 void change_become(change::pointer ); 01279 void change_become_undo(change::pointer cp); 01280 void change_developer_become(change::pointer ); 01281 void change_developer_become_undo(change::pointer cp); 01282 01283 void change_development_directory_clear(change::pointer ); 01284 void change_integration_directory_clear(change::pointer ); 01285 void change_architecture_clear(change::pointer ); 01286 void change_architecture_add(change::pointer , string_ty *); 01287 void change_architecture_query(change::pointer ); 01288 string_ty *change_architecture_name(change::pointer , int); 01289 string_ty *change_run_architecture_discriminator_command(change::pointer cp); 01290 cstate_architecture_times_ty *change_architecture_times_find(change::pointer , 01291 string_ty *); 01292 void change_build_time_set(change::pointer ); 01293 01303 void change_test_time_set(change::pointer cp, time_t when); 01304 01316 void change_test_time_set(change::pointer cp, string_ty *variant, time_t when); 01317 01328 void change_test_baseline_time_set(change::pointer cp, time_t when); 01329 01341 void change_test_baseline_time_set(change::pointer cp, string_ty *variant, 01342 time_t when); 01343 01356 void change_regression_test_time_set(change::pointer cp, time_t when, 01357 string_ty *arch_name = 0); 01358 01359 void change_test_times_clear(change::pointer ); 01360 void change_build_times_clear(change::pointer ); 01361 void change_architecture_from_pconf(change::pointer ); 01362 01363 const char *change_outstanding_builds(change::pointer , time_t); 01364 const char *change_outstanding_tests(change::pointer , time_t); 01365 const char *change_outstanding_tests_baseline(change::pointer , time_t); 01366 const char *change_outstanding_tests_regression(change::pointer , time_t); 01367 01368 int change_pathconf_name_max(change::pointer ); 01369 string_ty *change_filename_check(change::pointer , string_ty *); 01370 01371 void change_create_symlinks_to_baseline(change::pointer , user_ty::pointer , 01372 const work_area_style_ty &); 01373 01398 void change_maintain_symlinks_to_baseline(change::pointer cp, 01399 user_ty::pointer up, bool undoing = false); 01400 01401 void change_remove_symlinks_to_baseline(change::pointer , user_ty::pointer , 01402 const work_area_style_ty &); 01403 01404 void change_rescind_test_exemption(change::pointer ); 01405 01416 string_ty *change_fstate_filename_get(change::pointer cp); 01417 01429 string_ty *change_pfstate_filename_get(change::pointer cp); 01430 01431 void change_rescind_test_exemption_undo(change::pointer ); 01432 void change_force_regression_test_exemption(change::pointer ); 01433 void change_force_regression_test_exemption_undo(change::pointer ); 01434 01435 void change_check_architectures(change::pointer ); 01436 string_ty *change_new_test_filename_get(change::pointer , long, int); 01437 string_ty *change_development_directory_template(change::pointer , 01438 user_ty::pointer ); 01439 string_ty *change_metrics_filename_pattern_get(change::pointer ); 01440 01445 void change_uuid_set(change::pointer cp); 01446 01451 void change_uuid_clear(change::pointer cp); 01452 01464 void change_reviewer_list(change::pointer cp, string_list_ty &result); 01465 01477 bool change_reviewer_already(change::pointer cp, string_ty *login); 01478 01490 bool change_reviewer_already(change::pointer cp, const nstring &login); 01491 01503 time_t change_when_get(change::pointer cp, cstate_history_what_ty what); 01504 01514 bool change_diff_required(change::pointer cp); 01515 01528 bool change_build_required(change::pointer cp, bool conf_exists = true); 01529 01530 // vim: set ts=8 sw=4 et : 01531 #endif // LIBAEGIS_CHANGE_H
1.7.6.1