|
Aegis
4.25.D505
|
00001 // 00002 // aegis - project change supervisor 00003 // Copyright (C) 1992-2000, 2002-2008, 2011, 2012 Peter Miller 00004 // 00005 // This program is free software; you can redistribute it and/or modify 00006 // it under the terms of the GNU General Public License as published by 00007 // the Free Software Foundation; either version 3 of the License, or 00008 // (at your option) any later version. 00009 // 00010 // This program is distributed in the hope that it will be useful, 00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 // GNU General Public License for more details. 00014 // 00015 // You should have received a copy of the GNU General Public License 00016 // along with this program. If not, see 00017 // <http://www.gnu.org/licenses/>. 00018 // 00019 00020 #ifndef AEGIS_USER_H 00021 #define AEGIS_USER_H 00022 00023 #include <common/ac/shared_ptr.h> 00024 00025 #include <common/nstring.h> 00026 #include <libaegis/output.h> 00027 #include <libaegis/uconf.fmtgen.h> 00028 #include <libaegis/ustate.fmtgen.h> 00029 00030 class project; // forward 00031 class output_ty; // forward 00032 00037 class user_ty 00038 { 00039 public: 00045 typedef aegis_shared_ptr<user_ty> pointer; 00046 00052 ~user_ty(); 00053 00059 static user_ty::pointer create(); 00060 00061 private: 00065 user_ty(); 00066 00067 public: 00075 static user_ty::pointer create(int uid); 00076 00077 private: 00084 user_ty(int uid); 00085 00086 public: 00097 static user_ty::pointer create(int uid, int gid); 00098 00099 private: 00108 user_ty(int uid, int gid); 00109 00110 public: 00123 static user_ty::pointer create(const nstring &login_name); 00124 00134 static user_ty::pointer create_by_directory(const nstring &path); 00135 00145 static void progress_option_set(void (*usage)(void)); 00146 00156 static void progress_option_clear(void (*usage)(void)); 00157 00171 bool progress_get(); 00172 00176 nstring name() const; 00177 00182 nstring full_name() const; 00183 00194 static nstring full_name(const nstring &login); 00195 00200 int get_uid() const; 00201 00206 bool check_uid() const; 00207 00212 int get_gid() const; 00213 00218 bool check_gid() const; 00219 00224 nstring get_group_name() const; 00225 00235 void set_gid(int gid, bool weak = false); 00236 00243 void umask_set(int um); 00244 00249 int umask_get() const; 00250 00255 nstring get_home() const; 00256 00262 nstring get_email_address(); 00263 00268 void ustate_write(); 00269 00279 void own_add(project *pp, long chanum); 00280 00295 bool own_nth(project *pp, long n, long &chanum); 00296 00307 void own_remove(project *pp, long chanum); 00308 00318 long default_change(project *pp); 00319 00325 nstring default_project(); 00326 00338 nstring default_development_directory(project *pp); 00339 00347 nstring default_project_directory(); 00348 00355 void become_begin(); 00356 00364 void become_end(); 00365 00386 class become 00387 { 00388 public: 00392 become(user_ty::pointer a_up) : 00393 up(a_up) 00394 { 00395 up->become_begin(); 00396 } 00397 00401 ~become() 00402 { 00403 up->become_end(); 00404 } 00405 00406 private: 00411 user_ty::pointer up; 00412 00416 become(const become &); 00417 00421 become &operator=(const become &); 00422 }; 00423 00438 bool delete_file_query(const nstring &filename, bool isdir, 00439 int default_preference); 00440 00448 static void delete_file_argument(void (*usage)(void)); 00449 00454 void ustate_lock_prepare(); 00455 00463 static void lock_wait_argument(void(*usage)(void)); 00464 00469 bool lock_wait(); 00470 00476 nstring editor_command(); 00477 00484 nstring visual_command(); 00485 00494 uconf_diff_preference_ty diff_preference(); 00495 00503 bool pager_preference(); 00504 00510 nstring pager_command(); 00511 00519 bool persevere_preference(bool dflt); 00520 00528 static void persevere_argument(void(*usage)(void)); 00529 00540 uconf_log_file_preference_ty log_file_preference( 00541 uconf_log_file_preference_ty dflt); 00542 00551 static void relative_filename_preference_argument(void(*usage)(void)); 00552 00565 uconf_relative_filename_preference_ty relative_filename_preference( 00566 uconf_relative_filename_preference_ty dflt); 00567 00575 static void symlink_pref_argument(void(*usage)(void)); 00576 00590 bool symlink_pref(bool proj_files_changed); 00591 00599 static void whiteout_argument(void (*usage)(void)); 00600 00612 bool whiteout(int dflt = -1); 00613 00621 void uconf_write_xml(output::pointer op); 00622 00634 uconf_ty *uconf_get(); 00635 00636 private: 00641 nstring login_name; 00642 00647 nstring login_full_name; 00648 00653 nstring home; 00654 00659 nstring group_name; 00660 00665 int user_id; 00666 00671 int group_id; 00672 00677 int umask; 00678 00686 nstring ustate_path; 00687 00695 ustate_ty *ustate_data; 00696 00701 bool ustate_is_new; 00702 00708 bool ustate_modified; 00709 00717 ustate_ty *ustate_get(project *pp); 00718 00723 nstring uconf_path; 00724 00730 uconf_ty *uconf_data; 00731 00737 long lock_magic; 00738 00743 void lock_sync(); 00744 00749 static size_t pool_nusers; 00750 00757 static size_t pool_nusers_max; 00758 00766 static pointer *pool_user; 00767 00782 static user_ty::pointer pool_find(int uid); 00783 00788 static void pool_add(user_ty::pointer up); 00789 00794 void waiting_for_lock(); 00795 00800 static void waiting_for_lock(void *); 00801 }; 00802 00803 00804 // use user_ty::create(int) instead 00805 user_ty::pointer user_numeric(int uid) DEPRECATED; 00806 00807 // use user_ty::create(int, int) instead 00808 user_ty::pointer user_numeric2(int uid, int gid) DEPRECATED; 00809 00810 // use user_ty::create(nstring) instead 00811 user_ty::pointer user_symbolic(string_ty *login_name) DEPRECATED; 00812 00813 // use user_ty::create() instead 00814 user_ty::pointer user_executing(void) DEPRECATED; 00815 00816 // use nothing at all 00817 void user_free(user_ty::pointer) DEPRECATED; 00818 00819 // just assign it 00820 user_ty::pointer user_copy(user_ty::pointer) DEPRECATED; 00821 00822 // use user_ty::name() instead 00823 string_ty *user_name(user_ty::pointer up) DEPRECATED; 00824 00825 // use user_ty::full_name() instead 00826 string_ty *user_name2(user_ty::pointer up) DEPRECATED; 00827 00828 // use user_ty::get_uid() instead 00829 int user_id(user_ty::pointer) DEPRECATED; 00830 00831 // use user_ty::get_gid() instead 00832 int user_gid(user_ty::pointer) DEPRECATED; 00833 00834 // use user_ty::umask_get() instead 00835 int user_umask(user_ty::pointer) DEPRECATED; 00836 00837 // user user_ty::ustate_lock_prepare() instead 00838 void user_ustate_lock_prepare(user_ty::pointer) DEPRECATED; 00839 00840 // use user_ty::get_group_name() instead 00841 string_ty *user_group(user_ty::pointer) DEPRECATED; 00842 00843 // use user_ty::get_home() instead 00844 string_ty *user_home(user_ty::pointer up) DEPRECATED; 00845 00846 // user user_ty::get_email_address() instead 00847 string_ty *user_email_address(user_ty::pointer up) DEPRECATED; 00848 00849 // use user_ty::editor_command() instead 00850 string_ty *user_editor_command(user_ty::pointer) DEPRECATED; 00851 00852 // user user_ty::visual_command() instead 00853 string_ty *user_visual_command(user_ty::pointer) DEPRECATED; 00854 00855 // see user_ty::pager_command instead 00856 string_ty *user_pager_command(user_ty::pointer) DEPRECATED; 00857 00858 // use user_ty::full_name(const nstring &) instead 00859 string_ty *user_full_name(string_ty *) DEPRECATED; 00860 00861 // use user_ty::ustate_write() instead 00862 void user_ustate_write(user_ty::pointer) DEPRECATED; 00863 00864 // use user_ty::own_add instead 00865 void user_own_add(user_ty::pointer up, project *pp, long chanum) DEPRECATED; 00866 00867 // use user_ty::own_nth instead 00868 int user_own_nth(user_ty::pointer up, project *oo, long n, long *chanum_p) 00869 DEPRECATED; 00870 00871 // use user_ty::own_remove instead 00872 void user_own_remove(user_ty::pointer up, project *pp, long chanum) 00873 DEPRECATED; 00874 00875 // use user_ty::default_change(project *pp) instead 00876 long user_default_change(user_ty::pointer up, project *pp) DEPRECATED; 00877 00878 // user user_ty::default_project() instead 00879 string_ty *user_default_project_by_user(user_ty::pointer) DEPRECATED; 00880 00881 // user user_ty::default_project() instead 00882 string_ty *user_default_project(void) DEPRECATED; 00883 00884 // use user_ty::default_development_directory(project *pp) instead 00885 string_ty *user_default_development_directory(user_ty::pointer up, 00886 project *pp) DEPRECATED; 00887 00888 // user user_ty::default_project_directory() instead 00889 string_ty *user_default_project_directory(user_ty::pointer) DEPRECATED; 00890 00891 // use user_ty::become_begin() instead 00892 void user_become(user_ty::pointer) DEPRECATED; 00893 00894 // use user_ty::become_end() instead 00895 void user_become_undo(void) DEPRECATED; 00896 00897 // use user_ty::delete_file_query instead 00898 bool user_delete_file_query(user_ty::pointer up, string_ty *filename, 00899 bool isdir, int default_preference) DEPRECATED; 00900 00901 // use user_ty::delete_file_argument instead 00902 void user_delete_file_argument(void (*)(void)) DEPRECATED; 00903 00904 // use user_ty::diff_preference() instead 00905 int user_diff_preference(user_ty::pointer) DEPRECATED; 00906 00907 // use user_ty::pager_preference() instead 00908 int user_pager_preference(user_ty::pointer) DEPRECATED; 00909 00910 // use user_ty::persevere_preference() instead 00911 int user_persevere_preference(user_ty::pointer, int) DEPRECATED; 00912 00913 // use user_ty::persevere_argument instead 00914 void user_persevere_argument(void(*)(void)) DEPRECATED; 00915 00916 // use user_ty::log_file_preference instead 00917 uconf_log_file_preference_ty user_log_file_preference(user_ty::pointer, 00918 uconf_log_file_preference_ty) DEPRECATED; 00919 00920 // user user_ty::lock_wait_argument instead 00921 void user_lock_wait_argument(void(*usage)(void)) DEPRECATED; 00922 00923 // user user_ty::lock_wait instead 00924 int user_lock_wait(user_ty::pointer up) DEPRECATED; 00925 00926 // use user_ty::whiteout_argument instead 00927 void user_whiteout_argument(void(*)(void)) DEPRECATED; 00928 00929 // use user_ty::whiteout instead 00930 int user_whiteout(user_ty::pointer up, int dflt = -1) DEPRECATED; 00931 00932 // use user_ty::symlink_pref_argument instead 00933 void user_symlink_pref_argument(void(*)(void)) DEPRECATED; 00934 00935 // use user_ty::symlink_pref instead 00936 int user_symlink_pref(user_ty::pointer, int) DEPRECATED; 00937 00938 // use user_ty::relative_filename_preference_argument instead 00939 void user_relative_filename_preference_argument(void(*)(void)) DEPRECATED; 00940 00941 // use user_ty::relative_filename_preference instead 00942 uconf_relative_filename_preference_ty user_relative_filename_preference( 00943 user_ty::pointer, uconf_relative_filename_preference_ty) DEPRECATED; 00944 00945 // use user_ty::uconf_write_xml instead 00946 void user_uconf_write_xml(user_ty::pointer, output::pointer) DEPRECATED; 00947 00948 // use user_ty::uconf_get() instead 00949 uconf_ty *user_uconf_get(user_ty::pointer) DEPRECATED; 00950 00951 #endif // AEGIS_USER_H 00952 // vim: set ts=8 sw=4 et :
1.7.6.1