рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП:
- TrackStudio рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдХрд╛рд░реНрдп рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реА рд╣реИред
- рдЧрд┐рдЯ - рд╡реАрд╕реАрдПрд╕ред
- Blat - рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ (70kB) рдУрдкрди рд╕реЛрд░реНрд╕ рдХрдВрд╕реЛрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЬреЛ рдЖрдкрдХреЛ рд╕рдВрд▓рдЧреНрди рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ SMTP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдИ-рдореЗрд▓ рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
- STunnel - рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЬреЛ рдЖрдкрдХреЛ рдПрд╕рдПрд╕рдПрд▓ рдХреЗ рдЕрдВрджрд░ рдордирдорд╛рдиреЗ рдЯреАрд╕реАрдкреА рдХрдиреЗрдХреНрд╢рди рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЯреВрд▓ рдпреВрдирд┐рдХреНрд╕ рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИред
рдЬрд░реВрд░рдд рд╣реИ рдЕрдЧрд░ рдЖрдк рдореЗрд▓ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ gmail.com рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЪреВрдВрдХрд┐ рдмреНрд▓реЙрдЯ рд╕реАрдзреЗ рдЬреАрдореЗрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЬрдм git рдореЗрдВ рдХрдорд┐рдЯ рдХрд░реЗрдВ, рд╡рд┐рднрд┐рдиреНрди рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ TrackStudio рдХрд╛рд░реНрдп рдореЗрдВ рдЬреЛрдбрд╝ рджреА рдЧрдИрдВ рдФрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд╛ рдкрд╛рда рдкреНрд░рддрд┐рдмрджреНрдз рд╕рдВрджреЗрд╢ рдХрд╛ рдкрд╛рда рдерд╛ред
рд╕реНрдерд╛рдкрдирд╛
TrackStudio
рд╣рдо рд╕рдм рдХреБрдЫ рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣рд╛рдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИрдмрд╛рдХреА рд╕рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдореИрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдкрд░ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдмреНрд▓рд┐рдЯ рдХреЛ git.exe рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдореЗрд░реЗ рдкрд╛рд╕ C: / рдкреНрд░реЛрдЧреНрд░рд╛рдо рдлрд╛рдЗрд▓реНрд╕ / Git / рдмрд┐рди) рд╣реИ, рдпрд╛ рдЙрд╕ рдлреЛрд▓реНрдбрд░ рдХреЛ рдЬреЛрдбрд╝реЗрдВ, рдЬрд┐рд╕рдореЗрдВ Blat PHH рдореЗрдВ рд╣реИред
рд╕рдорд╛рдпреЛрдЬрди
TrackStudio
TrackStudio рдИрдореЗрд▓ рд╕реЗ рдИрдореЗрд▓ рдЙрдард╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИредрдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ TS_HOME \ etc \ trackstudio.mail.properties рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдореЗрд▓ рд╕рдВрдЧреНрд░рд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдирд╣реАрдВ рд╣реИ):
рдпрд╣рд╛рдБ gmail.com рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:mail.pop3.apop.enable=\ mail.store.forward= email mail.store.fwdaddress=email mail.store.host=pop mail.store.password= mail.store.port= mail.store.protocol= mail.store.user= , email, trackstudio.emailSubmission=yes trackstudio.mailimport.interval=
рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╕рдм рдХреБрдЫ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИредmail.pop3.apop.enable=\ mail.store.forward=yes mail.store.fwdaddress=mymail@gmail.com mail.store.host=pop.gmail.com mail.store.password=password mail.store.port=995 mail.store.protocol=pop3s mail.store.user=srvmail@gmail.com
рдЖрдпрд╛рдд рдирд┐рдпрдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ
рдЕрдм TS рдореЗрдВ, рд╢реНрд░реЗрдгреА "рдмрджрд▓реЗрдВ" рдпрд╛ "рддреНрд░реБрдЯрд┐" рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдХреЗ рдкреВрд░реНрд╡рдЬ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдЖрдпрд╛рдд рдирд┐рдпрдо рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреА рдУрд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред рд▓реЗрдХрд┐рди рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкреЗрди рдХреЗ рд╕рд╛рде рд▓рд╛рднрд╣реАрди рд╣реЛрддрд╛ рд╣реИ - рд╣рдо рдПрдХ рдкреНрд▓рдЧрдЗрди рд▓рд┐рдЦрдХрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВред TS_HOME \ plugins \ script \ after_create_task рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ (рдЗрд╕рдореЗрдВ рдХрд╛рд░реНрдп рдмрдирдиреЗ рдХреЗ рдмрд╛рдж рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ), createRuleImport.bsh рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирд┐рдореНрди рдХреЛрдб рдХреЗ рд╕рд╛рде рдмрдирд╛рдПрдБ:
- / **
- * рдмрд╛рд▓ рдХрд╛рд░реНрдп рдмрдирд╛рддреЗ рд╕рдордп рдкреВрд░реНрд╡рдЬ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ рдЖрдпрд╛рдд рдирд┐рдпрдо рдмрдирд╛рддрд╛ рд╣реИред
- * /
- рдЖрдпрд╛рдд com.trackstudio.app.adapter.AdcapeManager;
- рдЖрдпрд╛рдд com.trackstudio.exception.GranException;
- рдЖрдпрд╛рдд com.trackstudio.securedред *;
- рдЖрдпрд╛рдд com.trackstudio.securedkernel.SecuredMailImportAdapterManager;
- рдЖрдпрд╛рдд com.trackstudio.securedkernel.SecuredStepAdapterManager;
- рдЖрдпрд╛рдд java.utilред *;
- рдЖрдпрд╛рдд com.trackstudio.secured.SecuredUserBean;
- рдЖрдпрд╛рдд com.trackstudio.app.sessionред *;
- рдЖрдпрд╛рдд com.trackstudio.app.csv.CSVImport;
- рдХреЛрд╢рд┐рд╢ рдХрд░реЛ {
- // рдореЗрд▓ рдЖрдпрд╛рдд рдирд┐рдпрдореЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╕реНрддреБ
- SecuredMailImportAdapterManager mam = AdapterManager.getInstance ()
- .getSecuredMailImportAdapterManager ();
- // рдореЗрдВ рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВ
- SecuredStepAdapterManager sam = AdapterManager.getInstance ()
- .getSecuredStepAdapterManager ();
- // рдХрд╛рд░реНрдп рдФрд░ рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рд╕реВрдЪреА
- ArrayList arrMS = sam.getAvailableMstatusList (task.getSecure (), task.getId ());
- // рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд░
- SecuredMstatusBean curMS = null ;
- рд╕реНрдЯреНрд░рд┐рдВрдЧ pefixStr = "рдирдпрд╛" ;
- / **
- * рдирд┐рд░реНрдорд┐рдд рдХрд╛рд░реНрдп рдХреЗ рд╢реНрд░реЗрдгреА рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред
- * рдпрджрд┐ рдЯрд╛рд╕реНрдХ рдХреИрдЯреЗрдЧрд░реА рдЯреАрдПрд╕ рдореЗрдВ "рдПрд░рд░" = рд╢реНрд░реЗрдгреА рдХрд╛ рдирд╛рдо рд╣реИ
- * /
- рдЕрдЧрд░ (task.getCategory ()ред getName ()ред рдмрд░рд╛рдмрд░ ( "рддреНрд░реБрдЯрд┐" ))
- pefixStr = "рдмрдЧ" ;
- / **
- * рд╣рдо рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдп рдХреЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреБрдВрдЬреА рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ:
- * рдЙрдкрд╕рд░реНрдЧ + рдореВрд▓ рдХрд╛рд░реНрдп рд╕рдВрдЦреНрдпрд╛ + # + рдХрд╛рд░реНрдп рд╕рдВрдЦреНрдпрд╛
- * рдпрд╣ рдХреБрдВрдЬреА рд╡рд┐рд╖рдп рдкрдВрдХреНрддрд┐ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреА рдЪрд╛рд╣рд┐рдП
- * рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
- * new759 # 2845 рдХрд┐рд╕реА рднреА рдкрд╛рда, рд╡реИрд╕реЗ рднреА рдПрдХ рд╕рдореБрджрд╛рдп рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╕рдордп рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
- * /
- рд╕реНрдЯреНрд░рд┐рдВрдЧ mailimKey = pefixStr + task.getParent ()ред GetNumber () + "#" + task.getNumber ();
- / **
- * рдХреНрдпрд╛ рдореБрдЭреЗ рдПрдХ рдирд┐рдпрдо рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
- * рдЪреВрдВрдХрд┐ рдкреВрд░реНрд╡рдЬ рдХрд╛рд░реНрдп рдореЗрдВ рдХрдИ рдЙрдкрдкреНрд░рдХрд╛рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ,
- * рдЖрдпрд╛рдд рдирд┐рдпрдо рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ,
- * рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЙрддреНрдкрд╛рджрди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
- * /
- рдмреВрд▓рд┐рдпрди рдкрд╛рдпрд╛ = рдЧрд▓рдд ;
- for ( int i = 0; рдореИрдВ <arrMS.size (); i ++) {
- curMS = (SecuredMstatusBean) arrMS.get (i);
- msn = curMS.getName ();
- // "рдЯрд┐рдкреНрдкрдгреА" рдпрд╛ "рдЯрд┐рдкреНрдкрдгреА" рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд╛рдо рд╣реИ
- if (msn.compareToIgnoreCase ( "рдЯрд┐рдкреНрдкрдгреА" ) == 0 || msn.compareToIgnoreCase ( "рдЯрд┐рдкреНрдкрдгреА" ) == 0) {
- // рд░реВрдЯ рдпреВрдЬрд░ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
- SecuredUserBean adminUser = new SecuredUserBean (CSVImport.findUserIdByLogin ( "root" ), sc);
- // рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрджрд░реНрдн
- SessionContext needSc = task.getSecure ();
- // рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд░реВрдЯ рдЕрдзрд┐рдХреГрдд рд╣реИ
- рдпрджрд┐ (SessionManager.getInstance ()ред рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ (adminUser.getUser ()) {
- рдХреЗ рд▓рд┐рдП (SessionContext curSc: SessionManager.getInstance ()ред getSession ()) {
- рдЕрдЧрд░ (curSc.getUser ()ред getLogin ()ред рдмрд░рд╛рдмрд░ ( "рд░реВрдЯ" )) {
- // рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдЗрд╕рдХрд╛ рд╕рдВрджрд░реНрдн рд▓реЗрдВ
- needSc = curSc;
- рддреЛрдбрд╝рдирд╛ ;
- }
- }
- }
- рдФрд░ {
- // рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдЗрд╕рдХрд╛ рд╕рдВрджрд░реНрдн рдмрдирд╛рдПрдВ
- needSc = SessionManager.getInstance ()ред getSessionContext (
- SessionManager.getInstance ()ред Create (adminUser.getUser ()));
- }
- рдЕрдЧрд░ (рдкрд╛рдпрд╛ рдЧрдпрд╛)
- for (SecuredMailImportBean curMailS: mam.getAllAvailableMailImportList (needSc, task.getParentId ())) {
- // рд╣рдо рдкреВрд░реНрд╡рдЬреЛрдВ рд╕реЗ рдирдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдо рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
- рдкрд╛рдпрд╛ = curMailS.getKeywords ()ред рдмрд░рд╛рдмрд░ (pefixStr + task.getPentent ()ред getNumber ());
- рдЕрдЧрд░ (рдкрд╛рдпрд╛)
- рддреЛрдбрд╝рдирд╛ ;
- }
- рдЕрдЧрд░ (рдкрд╛рдпрд╛ рдЧрдпрд╛) {
- / **
- * рдпрджрд┐ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рддреЛ рдкреВрд░реНрд╡рдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдЖрдпрд╛рдд рдирд┐рдпрдо рдмрдирд╛рдПрдВ
- * рдЬрдбрд╝ рдХреЗ рд░реВрдк рдореЗрдВ, TS рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ
- * рд╡реНрдпрдХреНрддрд┐рдЧрдд рдореЗрд▓ рдЖрдпрд╛рдд рдирд┐рдпрдореЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдЬрд░реВрд░рдд рд╣реИ
- * рдпрд╣ рдирд┐рдпрдо рд╕рднреА рдХреЛ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред
- * /
- mam.createMailImport (needSc, pefixStr + task.getParent ()ред getNumber ()ред
- task.getParentId (), pefixStr + task.getParent ()ред getNumber (), 1, i,
- task.getCategoryId (), curMS.getId (), "" , рд╕рдЪ , рдЧрд▓рдд );
- рдкрд╛рдпрд╛ = рд╕рддреНрдп ;
- }
- }
- }
- // "Git рдореЗрдВ рд╢рд╛рдЦрд╛ рдХрд╛ рдирд╛рдо" рдирд╛рдо рдХреЗ рд╕рд╛рде UDF рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рди рдЬреЛрдбрд╝реЗрдВред
- AdapterManager.getInstance ()ред GetSecuredUDFAdcapeManager ()ред SetTaskUDFValueSimple (
- task.getSecure (), task.getId (), "рд╢рд╛рдЦрд╛ рдХрд╛ рдирд╛рдо git" , mailimKey);
- }
- рдкрдХрдбрд╝рдирд╛ (рдЧреНрд░реИрди рдПрдХреНрд╕рд╕реЗрдкреНрд╢рди рдИ) {
- new com.trackstudio.exception.nserMessageException (e.getMessage ()) рдлреЗрдВрдХреЗрдВ;
- }
- рд╡рд╛рдкрд╕реА рдХрд╛ рдХрд╛рдо;
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдИ рдЧрдИ рдереА, рдЕрдм TS рдореЗрдВ рд╣рдо "рдЯрд╛рд╕реНрдХ рдореИрдиреЗрдЬрдореЗрдВрдЯ -> рд╢реНрд░реЗрдгрд┐рдпрд╛рдБ" рдореЗрдиреВ рдореЗрдВ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ:

рдкрд╣рд▓реЗ "рдмрджрд▓реЗрдВ" рдирд╛рдо рдХреЗ рд╕рд╛рде рд╢реНрд░реЗрдгреА рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ,

рдЯреИрдм "рдЯреНрд░рд┐рдЧрд░" рдЦреЛрд▓реЗрдВ рдФрд░ рд╕реВрдЪреА рдореЗрдВ "рдЯреНрд░рд┐рдЧрд░ рдХреЗ рдмрд╛рдж" рдЯреНрд░рд┐рдЧрд░ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ, рдЬрд┐рд╕реЗ createRuleImport.bsh рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╣рдо "рддреНрд░реБрдЯрд┐" рд╢реНрд░реЗрдгреА рдХреЗ рд▓рд┐рдП рднреА рдРрд╕рд╛ рд╣реА рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдирдпрд╛ рдХрд╛рд░реНрдп рдмрдирд╛рддреЗ рд╕рдордп, рдкреВрд░реНрд╡рдЬ рдХрд╛ рдЖрдпрд╛рдд рдирд┐рдпрдо newNUMBER_EXT рдпрд╛ bugNUMBER_EXT рд╣реЛрдЧрд╛ред рдИрдореЗрд▓ рдкрддреЗ рдкрд░ рдПрдХ рдкрддреНрд░ рднреЗрдЬрдирд╛ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдореЗрд▓ рдХреЛ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡рд┐рд╖рдп рдкрдВрдХреНрддрд┐ "рдирдпрд╛ TRANSFER_NUMBER рдирдпрд╛ рдХрд╛рд░реНрдп" рдХреЗ рд╕рд╛рде, TS ANCESTOR рдореЗрдВ рдПрдХ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╛рд░реНрдп рдмрдирд╛рдПрдЧрд╛ рдЬреЛ рдкрддреНрд░ рдХреЗ рд╡рд┐рд╖рдп рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдФрд░ рдпрджрд┐ рдЖрдк рд╡рд┐рд╖рдп рдореЗрдВ рдПрдХ рдкрддреНрд░ рднреЗрдЬрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рдореБрдЦ newNUMBER_TRAN # TASK NUMBER (рдХрд╛рд░реНрдп рдореМрдЬреВрдж рд╣реИ), TS рдХрд╛рд░реНрдп рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрддреНрд░ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЯрд┐рдкреНрдкрдгреА рд╕рдВрджреЗрд╢ рдкрддреНрд░ рдХрд╛ рдореБрдЦреНрдп рднрд╛рдЧ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрдк рдкрддреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕рдВрд▓рдЧреНрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЯреАрдПрд╕ рдЗрд╕реЗ рдХрд╛рд░реНрдп рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдЧрд╛ред
UDF рдлрд╝реАрд▓реНрдб рдХреИрд╕реЗ рдЬреЛрдбрд╝реЗрдВ
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, TS рд╢реАрд░реНрд╖ рдореЗрдиреВ рдореЗрдВ, "рдХрд╛рд░реНрдп рдкреНрд░рдмрдВрдзрди -> рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ" рдЪреБрдиреЗрдВ, рдЖрдк рдХреЗ рд▓рд┐рдП рдмреНрдпрд╛рдЬ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЦреЛрд▓реЗрдВ рдФрд░ "рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝реАрд▓реНрдб" рдЯреИрдм рдореЗрдВ "рд▓рд╛рдЗрди" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред
рд╣рдорд╛рд░реЗ рдирд╛рдо рдореЗрдВ, рд╣рдорд╛рд░реЗ рдирд╛рдо рдореЗрдВ, "git рдореЗрдВ рд╢рд╛рдЦрд╛ рдХрд╛ рдирд╛рдо", рдФрд░ рдирд╛рдо рд╕рд╣реЗрдЬреЗрдВ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рд▓реЗрдХрд┐рди рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд░реВрдк рдореЗрдВ git рдореЗрдВ рдПрдХ рдирдИ рд╢рд╛рдЦрд╛ рдмрдирд╛рддреЗ рд╕рдордп рд╢ рдореЗрдВ рдЬрд▓реНрджреА рд╕реЗ рдХреЙрдкреА рдФрд░ рдкреЗрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред
рдореЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ
рдЯреАрдПрд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЕрдХреНрд╖рд░реЛрдВ рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ "рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ" рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рд╕рдВрджреЗрд╢ рдХреИрд╕реЗ рдмрдирд╛рдПрдВредрдЕрдм рд╣рдореЗрдВ TS рдкреНрд░рдХрд╛рд░ рдХреЛ "рдкреВрд░реНрдг" рдпрд╛ "рдлрд┐рдХреНрд╕" рд╢реНрд░реЗрдгреА рдХреЗ рд▓рд┐рдП "рдкрд░рд┐рд╡рд░реНрддрди" рдпрд╛ "рддреНрд░реБрдЯрд┐", рдХреНрд░рдорд╢рдГ ("рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ", "рд╕рдорд╛рдкреНрдд", "рдкрд░рд┐рд╡рд░реНрддрди" рдФрд░ "рддреНрд░реБрдЯрд┐" - рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд░ рдФрд░ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЗ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ , рд╡реЗ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдЯреАрдПрд╕ рдореЗрдВ рдЕрдкрдиреЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ; рдпрджрд┐ рдЖрдк рдПрдХ рдбреЗрдореЛ рд░реВрд╕реА рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рдмрд╕ рд╡рд╣реА рд╣реЛрдВрдЧреЗ)ред рд╣рдореЗрдВ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдЬреЛ рд╕рдВрджреЗрд╢ рдХреБрдВрдЬреА рдореЗрдВ рдХреБрдЫ рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП рджрд┐рдЦрд╛рдИ рджреЗрдЧреА рдЬреЛ рдЯреАрдПрд╕ рдХреЛ рдмрддрд╛рдПрдЧреА рдХрд┐ рд╕рдВрджреЗрд╢ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдмрджрд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдореИрдВ [new_state = done] рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреЗ рдКрдкрд░ рд╣реИред TS_HOME \ plugins \ script \ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ_рдЕрдбреНрдбрд╛_рдореЗрд╕реЗрдЬ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдмрдирд╛рдПрдБ , рдЬрд┐рд╕рдореЗрдВ рд╕рдВрджреЗрд╢ рдХреЗ рдЬреБрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреА рдЧрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдХреЛрдб рдХреЗ рд╕рд╛рде ChangeType.bsh рдлрд╝рд╛рдЗрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИ:
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдИ рдЧрдИ рдереА, рдЕрдм TS рдореЗрдВ рд╣рдо "рдЯрд╛рд╕реНрдХ рдореИрдиреЗрдЬрдореЗрдВрдЯ -> рдкреНрд░реЛрд╕реЗрд╕" рдореЗрдиреВ рдореЗрдВ рд╕реЗрд▓реЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдкрд╣рд▓реЗ "рдЪреЗрдВрдЬ" рдирд╛рдо рдХреЗ рд╕рд╛рде рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдлрд┐рд░ рдЯреИрдм рдСрдкрд░реЗрд╢рди рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ "рдХрдореЗрдВрдЯ" рдирд╛рдо рдХреЗ рд╕рд╛рде рдСрдкрд░реЗрд╢рди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ,
- / **
- * рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдпрд╛рддрд┐рдд рд╕рдВрджреЗрд╢ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдмрджрд▓ рджреЗрддреА рд╣реИ рдпрджрд┐ рдпрд╣ рд╕рдВрджреЗрд╢ рд╢рд░реАрд░ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
- * рдирд┐рд░реНрдорд╛рдг [new_state = рдкреНрд░рдХрд╛рд░], рдЬрд╣рд╛рдБ рдкреНрд░рдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рд╢реБрд░реВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
- * /
- рдЖрдпрд╛рдд java.utilред *;
- рдЖрдпрд╛рдд java.util.regexред *;
- рдЖрдпрд╛рдд java.io. *;
- рдХреЛрд╢рд┐рд╢ рдХрд░реЛ {
- рдЕрдЧрд░ (рд╕рдВрджреЗрд╢.рд╢реЗрдпрд░рд┐рдВрдЧ! = null )
- {
- рд╕реНрдЯреНрд░рд┐рдВрдЧ [] tempArr = null ;
- // рдирд┐рд░реНрдорд╛рдг рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╣рдореЗрдВ рд╕рдВрджреЗрд╢ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
- рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреИрдЯрд░реНрди = "ред * \\ [(\\ w *) = = (\\ w *) \\]ред *" ;
- рдкреИрдЯрд░реНрди p = Pattern.compile (рдкреИрдЯрд░реНрди, рдкреИрдЯрд░реНрди.рдорд▓рд╛рдЗрди);
- рдорд╛рдЪрд┐рд╕ m = p.matcher (message.description);
- рдЕрдЧрд░ (m.find) ()
- tempArr = рдирдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ [] {m.group (1), m.group (2)};
- // рдЬрд╛рдБрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╕рдВрджреЗрд╢ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рд╣реИ
- if (tempArr! = null && tempArr [0] .toLowerCase ()ред рдмрд░рд╛рдмрд░ ( "new_state" )) {
- // рд╡рд░реНрддрдорд╛рди рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░реЗрдВ
- if (tempArr [1] .toLowerCase ()ред рдмрд░рд╛рдмрд░ ( "рдХрд┐рдпрд╛" )) {
- // рд╕рдВрджреЗрд╢ рд╕реЗ рдирд┐рд░реНрджреЗрд╢ рдирд┐рдХрд╛рд▓реЗрдВ
- message.description = message.description.replaceFirst ( "\\ [new_state = done \\]" , "" );
- // рдЪреЗрдХ рдХрд░реЗрдВ рдХрд┐ рдХрд┐рд╕ рд╢реНрд░реЗрдгреА рдХрд╛ рдХрд╛рд░реНрдп рд╣реИ
- рдЕрдЧрд░ (message.getTask) (ред getCategory ()ред getName ()ред рдмрд░рд╛рдмрд░ ( "рдмрджрд▓реЗрдВ" )
- // рдЕрдкрдиреЗ рдирд╛рдо рд╕реЗ рдПрдХ рдирдпрд╛ рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд░ рд╕реЗрдЯ рдХрд░реЗрдВ
- message.setMstatus ( "рдкреВрд░реНрдг" );
- рдЕрдЧрд░ (message.getTask) (ред getCategory ()ред getName ()ред рдмрд░рд╛рдмрд░ ( "рддреНрд░реБрдЯрд┐" )
- message.setMstatus ( "рдлрд┐рдХреНрд╕" );
- }
- if (tempArr [1] .toLowerCase ()ред рдмрд░рд╛рдмрд░ ( "рдкреНрд░рд╛рд░рдВрдн" )) {
- message.description = message.description.replaceFirst ( "\\ [new_state = start \\]" , "" );
- if (message.getTask ()ред getCategory ()ред getName ()ред рдмрд░рд╛рдмрд░ ( "рдЪреЗрдВрдЬ" ) ||
- message.getTask ()ред getCategory ()ред getName ()ред рдмрд░рд╛рдмрд░ ( "рддреНрд░реБрдЯрд┐" )ред
- message.setMstatus ( "рдЖрд░рдВрдн рдХрд░реЗрдВ" );
- }
- }
- }
- }
- рдкрдХрдбрд╝ (рдЕрдкрд╡рд╛рдж рдИ) {
- new com.trackstudio.exception.UserMessageException (e.printStackTrace ()) рдлреЗрдВрдХреЗрдВ;
- }
- рд╡рд╛рдкрд╕реА рдХрд╛ рд╕рдВрджреЗрд╢;

рдЯреИрдм "рдЯреНрд░рд┐рдЧрд░" рдЦреЛрд▓реЗрдВ рдФрд░ "BEFORE рдЯреНрд░рд┐рдЧрд░" рдХреА рд╕реВрдЪреА рдореЗрдВ рдЯреНрд░рд┐рдЧрд░ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ, рдЬрд┐рд╕реЗ changeType.bsh рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╣рдо "рддреНрд░реБрдЯрд┐" рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рднреА рдРрд╕рд╛ рд╣реА рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рд╕рдм рдХреБрдЫ рдХреА рддрд░рд╣, рдЖрдк рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХрд╛рд░реНрдп рдмрдирд╛рдПрдВ -> рдлрд╝реАрд▓реНрдб рд╕реЗ рдХреЙрдкреА рдХрд░реЗрдВ "git рдореЗрдВ рд╢рд╛рдЦрд╛ рдХрд╛ рдирд╛рдо" рдорд╛рди ->

рдЙрд╕ рд╡рд┐рд╖рдп рдХреЗ рд╕рд╛рде рдПрдХ рдкрддреНрд░ рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдХреЙрдкреА рдХрд┐рдП рдЧрдП рдореВрд▓реНрдп рдХреЛ рдЪрд┐рдкрдХрд╛рддреЗ рд╣реИрдВ -> рдлрд┐рд░ рдкрддреНрд░ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рд╣рдо рдХреЛрдИ рднреА рдкрд╛рда рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢ [new_state = done] рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред

рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдкрддреНрд░ рдХреЗ рдЖрдпрд╛рдд рдХреЗ рдмрд╛рдж, рдХрд╛рд░реНрдп рдореЗрдВ рдПрдХ рд░рд╛рдЬреНрдп рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕реЗ рдкреВрд░реНрдг рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рдВрджреЗрд╢ рдирд┐рдХрд╛рдп рдЗрд╕ рд░рд╛рдЬреНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрджреЗрд╢ рд╣реЛрдЧрд╛ред
рдкрд░рд┐рдгрд╛рдо
рд╣рдордиреЗ рдЯреАрдПрд╕ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ, рдЕрдм рд╡рд╣ рдХрд░ рд╕рдХрддреА рд╣реИ:- рдирдП рд╕рдВрджреЗрд╢ рдФрд░ рдХрд╛рд░реНрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЖрдпрд╛рдд рдирд┐рдпрдо рдмрдирд╛рдПрдВред
- рд╕рдВрджреЗрд╢ рдирд┐рдХрд╛рдп рдореЗрдВ рдорд┐рд▓реЗ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдВрджреЗрд╢ рдХреА рд╕реНрдерд┐рддрд┐ рдмрджрд▓реЗрдВред
- рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓реЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВ, рдпрджрд┐ рд╡реЗ рдкрддреНрд░ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрдВред
рдпрд╣ рдХреНрд╖рдорддрд╛ рдЯреАрдПрд╕ рдХреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рджреА рдЧрдИ рдереА, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
stunnel
рдпрджрд┐ рдЖрдк рдореЗрд▓ рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ gmail.com рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рдЪрд░рдг рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ!рдЙрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд╣рд╛рдБ рдЖрдкрдиреЗ stunnel рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рд╣рдо stunnle.conf рдлрд╝рд╛рдЗрд▓ (C: \ Program Files \ stunnel \ stunnel.conf) рдкрд╛рддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВ:
socket = l:TCP_NODELAY=1 socket = r:TCP_NODELAY=1 debug = 7 output = stunnel.log client = yes [ssmtp] accept = 127.0.0.1:465 connect = smtp.gmail.com:465
рдФрд░ рдЗрд╕рд▓рд┐рдП рдХрд┐ stunnel рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ, рд╣рдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
"C: \ Program Files \ stunnel \ stunnel.exe" -рд╕реНрдерд╛рдкрдирд╛рд╕реНрд░реЛрдд: GMail рдЦрд╛рддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдВрдбреЛрдЬ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдкрддреНрд░ рднреЗрдЬрдирд╛
Git
рдЯреАрдПрд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдм рдХреБрдЫ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдФрд░ рдЕрдм рд╕рднреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╕реНрдерд▓ рдкрд░ рд╣реЛрдВрдЧреАредрдХрдорд┐рдЯ рдХрд░рддреЗ рд╕рдордп рдЧрд┐рдЯ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ 2 рд╣реБрдХ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдкрд╣рд▓рд╛ рдкреЛрд╕реНрдЯ-рдХрдореЗрдЯреА рдФрд░ рддреИрдпрд╛рд░-рдХрдорд┐рдЯ-рдПрдордПрд╕рдПрд╕ , рдкрд╣рд▓рд╛ рдкреНрд░рддрд┐рдмрджреНрдз рдХреЗ рд╕рдордп рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдЬрдм рдореИрд╕реЗрдЬ рдЬреЗрдирд░реЗрдЯ рд╣реЛрддрд╛ рд╣реИред рд╣реБрдХ рдлрд╛рдЗрд▓реЗрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ DIR_YOUR_REPO / .git / рд╣реБрдХ рдореЗрдВ рд╣реИрдВ ред
- рддреИрдпрд╛рд░реА-рдкреНрд░рддрд┐рдмрджреНрдз-рд╕рдВрджреЗрд╢ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдПрдХ рд╕рдВрджреЗрд╢ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВред
#! / рдмрд┐рди / рд╢
рдорд╛рдорд▓рд╛ "$ 2, $ 3" рдореЗрдВ
рдорд░реНрдЬ ,)
perl - i.bak - ne 's / ^ / #, s / ^ # # / # / / рдЕрдЧрд░ / ^ рд╕рдВрдШрд░реНрд╖ / ... / # /; рдкреНрд░рд┐рдВрдЯ " " $ 1 " ;;
*) ;;
esac
рдЕрдЧрд░ [ "` git рд╢рд╛рдЦрд╛ | grep -e "^ \ *ред (new \ | рдмрдЧ \) [0-9] \ + # [0-9] \ +" | рдХрдЯ -f2 -d '' `"! = "" ]; рддреЛ
# рд╣рдо рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд▓реЗрдЯрд░ рднреЗрдЬрддреЗ рд╣реИрдВред
рдЗрдХреЛ "рд╕реЗрдВрдбрдореЗрд▓" > temp_msg
рдЗрдХреЛ "= рд╕реЗ srvemail@gmail.com" >> temp_msg
рдЧреВрдВрдЬ "[new_state = рдХрд┐рдпрд╛]" >> temp_msg
рдмрд┐рд▓реНрд▓реА $ 1 >> temp_msg
cat temp_msg > $ 1
rm temp_msg
рдлрд╛рдИ - рдкреЛрд╕реНрдЯ-рдХрдорд┐рдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд╣рдо рдкрд░рд┐рд╡рд░реНрддрди рдФрд░ рдореЗрд▓ рднреЗрдЬрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВрдЧреЗред
#! / рдмрд┐рди / рд╢
# рд╣рдореЗрдВ рдореМрдЬреВрджрд╛ рдХрдорд┐рдЯреЗрдЯрд░ рдХреЗ рдореЗрд▓ GIT_AUTHOR_IDENT рдХреЗ рдЪрд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ
рдкреНрд░реЗрд╖рдХ = `git var GIT_COMMITTER_IDENT | cut -f1 -d '>' | cut -f 2 -d '<' '
# рд╕рдВрджреЗрд╢ рдХреА рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╕реЗрдВрдбрдореЗрд▓ рдЯреЗрдХреНрд╕реНрдЯ рдХрдорд┐рдЯ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ
рдЕрдЧрд░ [ `рдЧрд┐рдЯ рд▓реЙрдЧ -1 | sed "s / [] * // g" | grep -e "^ sendmail $" ` == " sendmail " ]; рддреЛ
# рд╕рдВрджреЗрд╢ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИ, рдЬреЛ рд╢рд╛рдЦрд╛ рдХреЗ рдирд╛рдо рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
# рд▓реЗрдХрд┐рди рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡рд┐рд╖рдп рд╕рдВрджреЗрд╢ рдХреА рдореБрдЦреНрдп рдкрдВрдХреНрддрд┐ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
рд╡рд┐рд╖рдп = `рдЧрд┐рдЯ рд╢рд╛рдЦрд╛ | grep -e "^ \ *ред (new \ | рдмрдЧ \) [0-9] \ + # [0-9] \ +" | cut -f2 -d '' ``
рдЕрдЧрд░ [ "` git log -1 | sed " s / [ ] * // g " | gre grep -e " ^ newroot \ = " | cut -f2 -d '=' '" ! = " " ]] | рддреЛ
рд╡рд┐рд╖рдп = `рдЧрд┐рдЯ рд▓реЙрдЧ -1 | sed "s / [] * // g" | grep -e "^ newroot \ =" | cut -f2 -d '=' | cut -f1 -d '#' '
рд╡рд┐рд╖рдп = "$ рд╡рд┐рд╖рдп #` git рд╢рд╛рдЦрд╛ | grep -e "^ \ *ред (рдирдИ \ _ рдмрдЧ \) [0-9] \ + # [0-9] \ +" | рдХрдЯ -f2 -d '# '' ''
рдлрд╛рдИ
# рдХрдорд┐рдЯ рдХреЗ рд╕рдВрджреЗрд╢ рдХреА рддреАрд╕рд░реА рдкрдВрдХреНрддрд┐ рд╕реЗ рдореЗрд▓ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░реЗрдВ,
# рдЬрд┐рд╕рдХреЛ рдЖрдк рдИрдореЗрд▓ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ,
# рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╡рд░реНрддрдорд╛рди рдХрдорд┐рдЯрд░ рдХрд╛ рдореЗрд▓ рд╕реЗрдЯ рд╣реИред
= $ рдкреНрд░реЗрд╖рдХ рдХреЛ
рдЕрдЧрд░ [ "` git log -1 | sed "s / [] * // g" | grep -e "^ [Tt] [Oo] \ =" | cut -f2 -d '=' '" ! = " " ]; рддреЛ
рд╕реЗ = `рдЧрд┐рдЯ рд▓реЙрдЧ -1 | sed "s / [] * // g" | grep -e "^ [рдЯреАрдЯреА] [рдУрдУ] \ =" | cut -f2 -d '=' "`
рдлрд╛рдИ
# рдкреИрдЪ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдмрдирд╛рдПрдБ
patchname = "$ (рддрд┐рдерд┐ +% j% H% M% s) .patch"
# рдкреНрд░рддрд┐рдмрджреНрдз рдкреНрд░рддрд┐рдмрджреНрдз рдХреЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП,
( git diff-index -p -M HEAD ^) > $ patchname
# рдирд┐рдпрдВрддреНрд░рдг рдкрд╛рда рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдЧрд┐рдЯ рд▓реЙрдЧ рд╕реЗ рдЕрдВрддрд┐рдо рд╕рдВрджреЗрд╢ рд▓реЗрдВ
git log - рез | grep - v "^ рджрд┐рдирд╛рдВрдХ:" | grep - v "^ рдкреНрд░рддрд┐рдмрджреНрдз" | grep - v "^ рд▓реЗрдЦрдХ:" | grep - v "* рд╕рд╛рдЗрди-рдСрдл-рдмрд╛рдп:" | grep - v "^ [] * sendmail [] * $" | grep - v "^ [] * newroot \ =" | grep - v "^ [] * [рдЯреАрдЯреА] [рдК] \ _" | grep - v "ред * $ рд╡рд┐рд╖рдпред *" | sed -e "/ ^ [] * $ / d" -e "/ ^ $ / d" >> temp.tmp
рдЗрдХреЛ "рд╢реЙрд░реНрдЯрд╕реНрдЯреИрдЯ" >> temp.tmp
git diff-index - рд╕реНрдЯреЗрдЯ рд╣реЗрдб ^ >> temp.tmp
# рдмреНрд▓рдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреЗрдЬреЗрдВ
blat - charset "utf-8" -f $ рдкреНрд░реЗрд╖рдХ - рд╕рд░реНрд╡рд░ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ - рдкреЛрд░реНрдЯ 465 -u useremail@gmail.com - pw рдкрд╛рд╕рд╡рд░реНрдб - to to to - bodyF temp.tmp - рд╡рд┐рд╖рдп $ рд╡рд┐рд╖рдп - base64 - рд╕рдВрд▓рдЧреНрди $ pattame > logSendMailред рд▓реЙрдЧ
rm $ patchname
rm temp.tmp
logSendMail.log рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
рдиреАрдВрдж 2 рдПрд╕
rm logSendMail.log
рдлрд╛рдИ
рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдирдП рдХрд╛рд░реНрдп рдкрд░ рдХрд╛рдо рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп, рд╡рд░реНрддрдорд╛рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдкрд░рд┐рдЪрд╛рд▓рди рднрдВрдбрд╛рд░ рдореЗрдВ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рд╕реНрдХ рдЙрд╕ рдирд╛рдо рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рдЬрдм рдЯрд╛рд╕реНрдХ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛редрддреИрдпрд╛рд░-рдХрдореЗрдЯреА- рд╣реБрдХ рд╣реБрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдкреНрд░рддрд┐рдмрджреНрдз рд╕рдВрджреЗрд╢ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░:
- sendmail - рдкрддреНрд░ рднреЗрдЬрдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрджрд┐ рд╕рдВрджреЗрд╢ рдореЗрдВ рдХреЗрд╡рд▓ рдЗрд╕ рд╢рдмреНрдж рд╡рд╛рд▓реА рдкрдВрдХреНрддрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рдкрддреНрд░ рдирд╣реАрдВ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред
- рдЯреВ - рдХрд┐рд╕ рдИрдореЗрд▓ рдкрд░ рднреЗрдЬрдирд╛ рд╣реИред рдпрджрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдкреНрд░реЗрд╖рдХ рдХреЛ рдкрддреНрд░ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред
- [new_state = done] - рдЯреАрдПрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдирдП рд╕рдВрджреЗрд╢ рдХреЛ "рдкреВрд░реНрдг" рдпрд╛ "рдлрд┐рдХреНрд╕реНрдб" рд╕рдВрджреЗрд╢ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдлрд┐рд░ TS "рдЯрд┐рдкреНрдкрдгреА" рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдирдП рд╕рдВрджреЗрд╢ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред - newroot - рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрджреЗрд╢ рдХрд╛ рд╡рд┐рд╖рдп рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдирд╣реАрдВред рдЯреАрдПрд╕ рдореЗрдВ, рдПрдХ рдХрд╛рд░реНрдп рд╕реЗ рджреВрд╕рд░реЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЙрдк-рдореБрдЦреМрдЯреЗ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдирдИ рд╢рд╛рдЦрд╛ рдирд╣реАрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдмрд╕ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдп рдХреЗ рдирдП рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдиреЗ рдПрдХ рдЙрдкрдХрдерд╛ (рд╕рдВрдЦреНрдпрд╛ 2084, рдкреВрд░реНрд╡рдЬ рд╕рдВрдЦреНрдпрд╛ 754, рдХреБрдВрдЬреА new754 # 2084) рдмрдирд╛рдИ рдФрд░ рдЙрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдлрд┐рд░ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдЙрдкрдорд╛ рдПрдХ рдЕрдиреНрдп рдореВрд▓ рдХрд╛рд░реНрдп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рд╕рдВрдЦреНрдпрд╛ 458, рдирдИ рдХреБрдВрдЬреА newb8 # 2084 рдХреЗ рд╕рд╛рде) рдФрд░ рдЗрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ред рдпрд╣ред рдирдИ рд╢рд╛рдЦрд╛ рд╢реБрд░реВ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛ рдХрдорд┐рдЯ рдореИрд╕реЗрдЬ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВnewroot=new458
рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдореЗрдВ рджрд░реНрдЬ рдХрд░реЗрдВ
$ git add --all & git gui

рдлрд┐рд░ Ctrl + Enter рджрдмрд╛рдПрдВ рдФрд░ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд┐рд╕реЗ рдЖрдк рдЯреАрдПрд╕ рдореЗрдВ рдореЗрд▓ рдХрд▓реЗрдХреНрдЯрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдХрд╛рд░реНрдп рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред

рдпрд╣рд╛рдБ html рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдкреЛрд╕реНрдЯ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рдПрдХ рдорд╛рдирдХ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдореЗрдВ 4 рдореБрдЦреНрдп рдЪрд░рдг рд╣реЛрддреЗ рд╣реИрдВ:- TS рдореЗрдВ рдХрд╛рд░реНрдп рд╕реЗрдЯ рдХрд░рдирд╛ рдФрд░ git рдХреЗ рд▓рд┐рдП рд╢рд╛рдЦрд╛ рдХрд╛ рдирд╛рдо рдХреЙрдкреА рдХрд░рдирд╛ред
- рдЧрд┐рдЯ рдореЗрдВ рдПрдХ рд╢рд╛рдЦрд╛ рдмрдирд╛рдирд╛ рдФрд░ рдЙрд╕ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ред
рдЖрдк рдЗрд╕реЗ рдПрдХ рдХрдорд╛рдВрдб рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:$ git checkout -b _
- рдХрд╛рд░реНрдп рдкреВрд░реНрдг рд╣реЛрдирд╛ред
- TS рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рдХрд░рдирд╛, git рдХрд░рдирд╛ред
рдЗрд╕ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЯреАрдПрд╕ рдХрд╛ рдЕрднреА рддрдХ рдПрд╕рд╕реАрдПрдо рдЬреАрдЖрдИрдЯреА рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдирд╣реАрдВ рд╣реИредрдФрд░ рдЬрдм рдпрд╣ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд┐рддрд░рд┐рдд рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдФрд░ рдпрд╣ рд╕рдорд╛рдзрд╛рди рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЪрд┐рдбрд╝рд┐рдпрд╛рдШрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╣реИрдВред рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдХреЗрдВрджреНрд░реАрдп рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдХреНрд░рдо рдФрд░ рд╢реБрджреНрдзрддрд╛ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЯреАрдПрд╕ рддрдХ рд╕реАрдзреА рдкрд╣реБрдВрдЪ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореИрдиреЗрдЬрд░ рдХрд╛рд░реНрдп рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓реЛрдЧреЛрдВ рдХреЛ рдЙрдиреНрд╣реЗрдВ рд╕реМрдВрдк рд╕рдХрддрд╛ рд╣реИред рдкрддреНрд░реЛрдВ рдХреЛ рдЙрдирдХреЗ рдореЗрд▓ рдкрд░ рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдХреЛрдИ рдХрд╛рд░реНрдп рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдЬрд┐рдореНрдореЗрджрд╛рд░ рдард╣рд░рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡рд╣ рд╕рдВрджреЗрд╢ рд╕рдВрджреЗрд╢ рдореЗрдВ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдп рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЧрд┐рдЯ рдХреЗ рд▓рд┐рдП рд╢рд╛рдЦрд╛ рдХрд╛ рдирд╛рдо, рдХрд╛рд░реНрдп рдкрд░ рдХрд╛рдо рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рдХрд╛рд░реНрдп рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╡рд╣ рдЪреБрдкрдЪрд╛рдк рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЖ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдм рдпрд╣ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд╣ рджреВрд░ рд╕реЗ рдРрд╕реЗ рдореБрдЦреМрдЯреЗ рднреА рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдкреВрд░реНрд╡рдЬреЛрдВ рдХреЗ рдХрд╛рд░реНрдп рдХреА рдХреБрдВрдЬреА рдХреЛ рдИрдореЗрд▓ рдкрд░ рдкрддреНрд░ рднреЗрдЬрдХрд░ рдЬрд╛рдирддрд╛ рд╣реЛ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдореЗрд▓ рдЯреАрдПрд╕ рдХреЛ рдЙрд╕ рд╡рд┐рд╖рдп рдХреЗ рд╕рд╛рде рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдХреБрдВрдЬреА рдореМрдЬреВрдж рд╣реИред рдЬрд╡рд╛рдм рдореЗрдВ, рдкрддреНрд░ рднреА рдЖрдПрдВрдЧреЗ рдХрд┐ рдЙрд╕рдиреЗ рдХрд╛рд░реНрдп рдмрдирд╛рдпрд╛ред
рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ
- ProGit рдПрдХ рдСрдирд▓рд╛рдЗрди рдЧрд┐рдЯ рдмреБрдХ рд╣реИ ред
- TrackStudio рдкреНрд░рд▓реЗрдЦрди ред
- TS_HOME \ docs \ javadoc \ index.html - TrackStudio рдПрдкреАрдЖрдИ рдореИрдиреБрдЕрд▓, TS рдХреЗ рд╕рд╛рде рдЖрдкреВрд░реНрддрд┐ рдХреА рдЧрдИред
- GMail рдЦрд╛рддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдВрдбреЛрдЬ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдкрддреНрд░ рднреЗрдЬрдирд╛ ред