Main Page ? Class Hierarchy ? Compound List ? File List ? Compound Members ? File Members ?

CmtLock Class Reference

#include

List of all members.


Public Types

enum ? status {
??locked_by_user, locked_by_another_user, not_locked, still_locked,
??still_unlocked
}

Static Public Methods

status? lock ()
status? unlock ()
status? check ()

Member Enumeration Documentation

enum CmtLock::status
?

Enumeration values:
locked_by_user?
locked_by_another_user?
not_locked?
still_locked?
still_unlocked?

Definition at line 13 of file cmt_lock.h.

Referenced by check(), Cmt::do_lock(), Cmt::do_unlock(), lock(), and unlock().

00014         {
00015                 locked_by_user, 
00016                 locked_by_another_user, 
00017                 not_locked,
00018                 still_locked,
00019                 still_unlocked
00020         } status;

Member Function Documentation

CmtLock::status CmtLock::check (? ? )? [static]
?

Definition at line 105 of file cmt_lock.cxx.

References cmt_string::read(), cmt_vector< cmt_string >::size(), CmtSystem::split(), status, and CmtSystem::user().

Referenced by Cmt::do_broadcast(), Cmt::do_build_constituent_makefile(), Cmt::do_build_constituents_makefile(), Cmt::do_build_dependencies(), Cmt::do_build_library_links(), Cmt::do_build_make_setup(), Cmt::do_build_msdev(), Cmt::do_build_os9_makefile(), Cmt::do_build_prototype(), Cmt::do_build_readme(), Cmt::do_build_tag_makefile(), Cmt::do_build_triggers(), Cmt::do_build_vsnet(), Cmt::do_build_windefs(), Cmt::do_config(), Cmt::do_remove_library_links(), lock(), and unlock().

00106 {
00107   cmt_string me = CmtSystem::user ();
00108   cmt_string text;
00109 
00110   if (text.read ("lock.cmt"))
00111     {
00112       CmtSystem::cmt_string_vector words;
00113 
00114       CmtSystem::split (text, " ", words);
00115 
00116       if (words.size () >= 3)
00117         {
00118           if (words[2] == me)
00119             {
00120               return (locked_by_user);
00121             }
00122           else
00123             {
00124               return (locked_by_another_user);
00125             }
00126         }
00127     }
00128         
00129   return (not_locked);
00130 }

CmtLock::status CmtLock::lock (? ? )? [static]
?

Definition at line 14 of file cmt_lock.cxx.

References Symbol::build_macro_value(), CmtError::cannot_lock, CmtError::cannot_run_lock_command, CmtError::cannot_write_lock, check(), CmtSystem::execute(), Symbol::find(), locked_by_another_user, locked_by_user, not_locked, CmtSystem::now(), CmtError::set(), status, CmtSystem::user(), and cmt_string::write().

Referenced by Cmt::do_lock().

00015 {
00016   status s = check ();
00017 
00018   switch (s)
00019     {
00020     case locked_by_user:
00021       cout << "Package already locked by you" << endl;
00022       return (s);
00023     case locked_by_another_user:
00024       CmtError::set (CmtError::cannot_lock, "lock> Package already locked by another user");
00025       return (s);
00026     case not_locked:
00027       break;
00028     }
00029 
00030   cmt_string text = "locked by ";
00031   text += CmtSystem::user ();
00032   text += " date ";
00033   text += CmtSystem::now ();
00034 
00035   if (!text.write ("lock.cmt"))
00036     {
00037       CmtError::set (CmtError::cannot_write_lock, "lock>");
00038       return (still_unlocked);
00039     }
00040 
00041   Symbol* lock_command = Symbol::find ("lock_command");
00042   if (lock_command != 0)
00043     {
00044       cmt_string command = lock_command->build_macro_value ();
00045 
00046       if (command != "")
00047         {
00048           if (CmtSystem::execute (command) != 0)
00049             {
00050               CmtError::set (CmtError::cannot_run_lock_command, "lock>");
00051               return (still_unlocked);
00052             }
00053         }
00054     }
00055 
00056   cout << "Package now locked" << endl;
00057 
00058   return (locked_by_user);
00059 }

CmtLock::status CmtLock::unlock (? ? )? [static]
?

Definition at line 62 of file cmt_lock.cxx.

References Symbol::build_macro_value(), CmtError::cannot_remove_lock, CmtError::cannot_run_unlock_command, CmtError::cannot_unlock, check(), CmtSystem::execute(), Symbol::find(), locked_by_another_user, locked_by_user, not_locked, CmtSystem::remove_file(), CmtError::set(), and status.

Referenced by Cmt::do_unlock().

00063 {
00064   status s = check ();
00065 
00066   switch (s)
00067     {
00068     case locked_by_user:
00069       break;
00070     case locked_by_another_user:
00071       CmtError::set (CmtError::cannot_unlock, "unlock> Package locked by another user");
00072       return (s);
00073     case not_locked:
00074       cout << "The package was not locked" << endl;
00075       return (s);
00076     }
00077 
00078   Symbol* unlock_command = Symbol::find ("unlock_command");
00079   if (unlock_command != 0)
00080     {
00081       cmt_string command = unlock_command->build_macro_value ();
00082 
00083       if (command != "")
00084         {
00085           if (CmtSystem::execute (command) != 0)
00086             {
00087               CmtError::set (CmtError::cannot_run_unlock_command, "unlock>");
00088               return (still_locked);
00089             }
00090         }
00091     }
00092 
00093   if (!CmtSystem::remove_file ("lock.cmt"))
00094     {
00095       CmtError::set (CmtError::cannot_remove_lock, "unlock>");
00096       return (still_locked);
00097     }
00098 
00099   cout << "Package now unlocked" << endl;
00100 
00101   return (not_locked);
00102 }

The documentation for this class was generated from the following files:
Generated on Wed Sep 1 11:00:10 2004 for CMT by 1.2.18