Aegis  4.25.D505
/home/archives/aegis/branch.4/branch.25/delta28933.505/libaegis/user.h
Go to the documentation of this file.
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 :