Git + TrackStudio - рд╡рд┐рдХрд╛рд╕ рд╕реНрд╡рдЪрд╛рд▓рди

рдпрд╣ рд▓реЗрдЦ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП TrackStudio рдФрд░ Git рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рд▓реЗрдЦ рд╡рд┐рдВрдбреЛрдЬ рдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдЕрдиреНрдп OCs рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред

рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП:
  1. TrackStudio рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдХрд╛рд░реНрдп рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реА рд╣реИред
  2. рдЧрд┐рдЯ - рд╡реАрд╕реАрдПрд╕ред
  3. Blat - рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ (70kB) рдУрдкрди рд╕реЛрд░реНрд╕ рдХрдВрд╕реЛрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЬреЛ рдЖрдкрдХреЛ рд╕рдВрд▓рдЧреНрди рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ SMTP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдИ-рдореЗрд▓ рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
  4. STunnel - рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЬреЛ рдЖрдкрдХреЛ рдПрд╕рдПрд╕рдПрд▓ рдХреЗ рдЕрдВрджрд░ рдордирдорд╛рдиреЗ рдЯреАрд╕реАрдкреА рдХрдиреЗрдХреНрд╢рди рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЯреВрд▓ рдпреВрдирд┐рдХреНрд╕ рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИред

    рдЬрд░реВрд░рдд рд╣реИ рдЕрдЧрд░ рдЖрдк рдореЗрд▓ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ gmail.com рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЪреВрдВрдХрд┐ рдмреНрд▓реЙрдЯ рд╕реАрдзреЗ рдЬреАрдореЗрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЙрджреНрджреЗрд╢реНрдп:
рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЬрдм git рдореЗрдВ рдХрдорд┐рдЯ рдХрд░реЗрдВ, рд╡рд┐рднрд┐рдиреНрди рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ TrackStudio рдХрд╛рд░реНрдп рдореЗрдВ рдЬреЛрдбрд╝ рджреА рдЧрдИрдВ рдФрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд╛ рдкрд╛рда рдкреНрд░рддрд┐рдмрджреНрдз рд╕рдВрджреЗрд╢ рдХрд╛ рдкрд╛рда рдерд╛ред


рд╕реНрдерд╛рдкрдирд╛

TrackStudio

рд╣рдо рд╕рдм рдХреБрдЫ рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣рд╛рдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ

рдмрд╛рдХреА рд╕рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдореИрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдкрд░ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдмреНрд▓рд┐рдЯ рдХреЛ git.exe рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдореЗрд░реЗ рдкрд╛рд╕ C: / рдкреНрд░реЛрдЧреНрд░рд╛рдо рдлрд╛рдЗрд▓реНрд╕ / Git / рдмрд┐рди) рд╣реИ, рдпрд╛ рдЙрд╕ рдлреЛрд▓реНрдбрд░ рдХреЛ рдЬреЛрдбрд╝реЗрдВ, рдЬрд┐рд╕рдореЗрдВ Blat PHH рдореЗрдВ рд╣реИред





рд╕рдорд╛рдпреЛрдЬрди

TrackStudio

TrackStudio рдИрдореЗрд▓ рд╕реЗ рдИрдореЗрд▓ рдЙрдард╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ TS_HOME \ etc \ trackstudio.mail.properties рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдореЗрд▓ рд╕рдВрдЧреНрд░рд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдирд╣реАрдВ рд╣реИ):
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=  
      
      



рдпрд╣рд╛рдБ gmail.com рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
 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 рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирд┐рдореНрди рдХреЛрдб рдХреЗ рд╕рд╛рде рдмрдирд╛рдПрдБ:
  1. / **
  2. * рдмрд╛рд▓ рдХрд╛рд░реНрдп рдмрдирд╛рддреЗ рд╕рдордп рдкреВрд░реНрд╡рдЬ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ рдЖрдпрд╛рдд рдирд┐рдпрдо рдмрдирд╛рддрд╛ рд╣реИред
  3. * /
  4. рдЖрдпрд╛рдд com.trackstudio.app.adapter.AdcapeManager;
  5. рдЖрдпрд╛рдд com.trackstudio.exception.GranException;
  6. рдЖрдпрд╛рдд com.trackstudio.securedред *;
  7. рдЖрдпрд╛рдд com.trackstudio.securedkernel.SecuredMailImportAdapterManager;
  8. рдЖрдпрд╛рдд com.trackstudio.securedkernel.SecuredStepAdapterManager;
  9. рдЖрдпрд╛рдд java.utilред *;
  10. рдЖрдпрд╛рдд com.trackstudio.secured.SecuredUserBean;
  11. рдЖрдпрд╛рдд com.trackstudio.app.sessionред *;
  12. рдЖрдпрд╛рдд com.trackstudio.app.csv.CSVImport;
  13. рдХреЛрд╢рд┐рд╢ рдХрд░реЛ {
  14. // рдореЗрд▓ рдЖрдпрд╛рдд рдирд┐рдпрдореЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╕реНрддреБ
  15. SecuredMailImportAdapterManager mam = AdapterManager.getInstance ()
  16. .getSecuredMailImportAdapterManager ();
  17. // рдореЗрдВ рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВ
  18. SecuredStepAdapterManager sam = AdapterManager.getInstance ()
  19. .getSecuredStepAdapterManager ();
  20. // рдХрд╛рд░реНрдп рдФрд░ рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рд╕реВрдЪреА
  21. ArrayList arrMS = sam.getAvailableMstatusList (task.getSecure (), task.getId ());
  22. // рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд░
  23. SecuredMstatusBean curMS = null ;
  24. рд╕реНрдЯреНрд░рд┐рдВрдЧ pefixStr = "рдирдпрд╛" ;
  25. / **
  26. * рдирд┐рд░реНрдорд┐рдд рдХрд╛рд░реНрдп рдХреЗ рд╢реНрд░реЗрдгреА рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред
  27. * рдпрджрд┐ рдЯрд╛рд╕реНрдХ рдХреИрдЯреЗрдЧрд░реА рдЯреАрдПрд╕ рдореЗрдВ "рдПрд░рд░" = рд╢реНрд░реЗрдгреА рдХрд╛ рдирд╛рдо рд╣реИ
  28. * /
  29. рдЕрдЧрд░ (task.getCategory ()ред getName ()ред рдмрд░рд╛рдмрд░ ( "рддреНрд░реБрдЯрд┐" ))
  30. pefixStr = "рдмрдЧ" ;
  31. / **
  32. * рд╣рдо рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдп рдХреЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреБрдВрдЬреА рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ:
  33. * рдЙрдкрд╕рд░реНрдЧ + рдореВрд▓ рдХрд╛рд░реНрдп рд╕рдВрдЦреНрдпрд╛ + # + рдХрд╛рд░реНрдп рд╕рдВрдЦреНрдпрд╛
  34. * рдпрд╣ рдХреБрдВрдЬреА рд╡рд┐рд╖рдп рдкрдВрдХреНрддрд┐ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреА рдЪрд╛рд╣рд┐рдП
  35. * рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
  36. * new759 # 2845 рдХрд┐рд╕реА рднреА рдкрд╛рда, рд╡реИрд╕реЗ рднреА рдПрдХ рд╕рдореБрджрд╛рдп рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╕рдордп рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
  37. * /
  38. рд╕реНрдЯреНрд░рд┐рдВрдЧ mailimKey = pefixStr + task.getParent ()ред GetNumber () + "#" + task.getNumber ();
  39. / **
  40. * рдХреНрдпрд╛ рдореБрдЭреЗ рдПрдХ рдирд┐рдпрдо рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
  41. * рдЪреВрдВрдХрд┐ рдкреВрд░реНрд╡рдЬ рдХрд╛рд░реНрдп рдореЗрдВ рдХрдИ рдЙрдкрдкреНрд░рдХрд╛рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ,
  42. * рдЖрдпрд╛рдд рдирд┐рдпрдо рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ,
  43. * рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЙрддреНрдкрд╛рджрди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
  44. * /
  45. рдмреВрд▓рд┐рдпрди рдкрд╛рдпрд╛ = рдЧрд▓рдд ;
  46. for ( int i = 0; рдореИрдВ <arrMS.size (); i ++) {
  47. curMS = (SecuredMstatusBean) arrMS.get (i);
  48. msn = curMS.getName ();
  49. // "рдЯрд┐рдкреНрдкрдгреА" рдпрд╛ "рдЯрд┐рдкреНрдкрдгреА" рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд╛рдо рд╣реИ
  50. if (msn.compareToIgnoreCase ( "рдЯрд┐рдкреНрдкрдгреА" ) == 0 || msn.compareToIgnoreCase ( "рдЯрд┐рдкреНрдкрдгреА" ) == 0) {
  51. // рд░реВрдЯ рдпреВрдЬрд░ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
  52. SecuredUserBean adminUser = new SecuredUserBean (CSVImport.findUserIdByLogin ( "root" ), sc);
  53. // рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрджрд░реНрдн
  54. SessionContext needSc = task.getSecure ();
  55. // рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд░реВрдЯ рдЕрдзрд┐рдХреГрдд рд╣реИ
  56. рдпрджрд┐ (SessionManager.getInstance ()ред рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ (adminUser.getUser ()) {
  57. рдХреЗ рд▓рд┐рдП (SessionContext curSc: SessionManager.getInstance ()ред getSession ()) {
  58. рдЕрдЧрд░ (curSc.getUser ()ред getLogin ()ред рдмрд░рд╛рдмрд░ ( "рд░реВрдЯ" )) {
  59. // рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдЗрд╕рдХрд╛ рд╕рдВрджрд░реНрдн рд▓реЗрдВ
  60. needSc = curSc;
  61. рддреЛрдбрд╝рдирд╛ ;
  62. }
  63. }
  64. }
  65. рдФрд░ {
  66. // рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдЗрд╕рдХрд╛ рд╕рдВрджрд░реНрдн рдмрдирд╛рдПрдВ
  67. needSc = SessionManager.getInstance ()ред getSessionContext (
  68. SessionManager.getInstance ()ред Create (adminUser.getUser ()));
  69. }
  70. рдЕрдЧрд░ (рдкрд╛рдпрд╛ рдЧрдпрд╛)
  71. for (SecuredMailImportBean curMailS: mam.getAllAvailableMailImportList (needSc, task.getParentId ())) {
  72. // рд╣рдо рдкреВрд░реНрд╡рдЬреЛрдВ рд╕реЗ рдирдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдо рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
  73. рдкрд╛рдпрд╛ = curMailS.getKeywords ()ред рдмрд░рд╛рдмрд░ (pefixStr + task.getPentent ()ред getNumber ());
  74. рдЕрдЧрд░ (рдкрд╛рдпрд╛)
  75. рддреЛрдбрд╝рдирд╛ ;
  76. }
  77. рдЕрдЧрд░ (рдкрд╛рдпрд╛ рдЧрдпрд╛) {
  78. / **
  79. * рдпрджрд┐ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рддреЛ рдкреВрд░реНрд╡рдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдЖрдпрд╛рдд рдирд┐рдпрдо рдмрдирд╛рдПрдВ
  80. * рдЬрдбрд╝ рдХреЗ рд░реВрдк рдореЗрдВ, TS рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ
  81. * рд╡реНрдпрдХреНрддрд┐рдЧрдд рдореЗрд▓ рдЖрдпрд╛рдд рдирд┐рдпрдореЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдЬрд░реВрд░рдд рд╣реИ
  82. * рдпрд╣ рдирд┐рдпрдо рд╕рднреА рдХреЛ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред
  83. * /
  84. mam.createMailImport (needSc, pefixStr + task.getParent ()ред getNumber ()ред
  85. task.getParentId (), pefixStr + task.getParent ()ред getNumber (), 1, i,
  86. task.getCategoryId (), curMS.getId (), "" , рд╕рдЪ , рдЧрд▓рдд );
  87. рдкрд╛рдпрд╛ = рд╕рддреНрдп ;
  88. }
  89. }
  90. }
  91. // "Git рдореЗрдВ рд╢рд╛рдЦрд╛ рдХрд╛ рдирд╛рдо" рдирд╛рдо рдХреЗ рд╕рд╛рде UDF рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рди рдЬреЛрдбрд╝реЗрдВред
  92. AdapterManager.getInstance ()ред GetSecuredUDFAdcapeManager ()ред SetTaskUDFValueSimple (
  93. task.getSecure (), task.getId (), "рд╢рд╛рдЦрд╛ рдХрд╛ рдирд╛рдо git" , mailimKey);
  94. }
  95. рдкрдХрдбрд╝рдирд╛ (рдЧреНрд░реИрди рдПрдХреНрд╕рд╕реЗрдкреНрд╢рди рдИ) {
  96. new com.trackstudio.exception.nserMessageException (e.getMessage ()) рдлреЗрдВрдХреЗрдВ;
  97. }
  98. рд╡рд╛рдкрд╕реА рдХрд╛ рдХрд╛рдо;

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдИ рдЧрдИ рдереА, рдЕрдм 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 рдлрд╝рд╛рдЗрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИ:
  1. / **
  2. * рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдпрд╛рддрд┐рдд рд╕рдВрджреЗрд╢ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдмрджрд▓ рджреЗрддреА рд╣реИ рдпрджрд┐ рдпрд╣ рд╕рдВрджреЗрд╢ рд╢рд░реАрд░ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
  3. * рдирд┐рд░реНрдорд╛рдг [new_state = рдкреНрд░рдХрд╛рд░], рдЬрд╣рд╛рдБ рдкреНрд░рдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рд╢реБрд░реВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
  4. * /
  5. рдЖрдпрд╛рдд java.utilред *;
  6. рдЖрдпрд╛рдд java.util.regexред *;
  7. рдЖрдпрд╛рдд java.io. *;
  8. рдХреЛрд╢рд┐рд╢ рдХрд░реЛ {
  9. рдЕрдЧрд░ (рд╕рдВрджреЗрд╢.рд╢реЗрдпрд░рд┐рдВрдЧ! = null )
  10. {
  11. рд╕реНрдЯреНрд░рд┐рдВрдЧ [] tempArr = null ;
  12. // рдирд┐рд░реНрдорд╛рдг рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╣рдореЗрдВ рд╕рдВрджреЗрд╢ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
  13. рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреИрдЯрд░реНрди = "ред * \\ [(\\ w *) = = (\\ w *) \\]ред *" ;
  14. рдкреИрдЯрд░реНрди p = Pattern.compile (рдкреИрдЯрд░реНрди, рдкреИрдЯрд░реНрди.рдорд▓рд╛рдЗрди);
  15. рдорд╛рдЪрд┐рд╕ m = p.matcher (message.description);
  16. рдЕрдЧрд░ (m.find) ()
  17. tempArr = рдирдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ [] {m.group (1), m.group (2)};
  18. // рдЬрд╛рдБрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╕рдВрджреЗрд╢ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рд╣реИ
  19. if (tempArr! = null && tempArr [0] .toLowerCase ()ред рдмрд░рд╛рдмрд░ ( "new_state" )) {
  20. // рд╡рд░реНрддрдорд╛рди рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░реЗрдВ
  21. if (tempArr [1] .toLowerCase ()ред рдмрд░рд╛рдмрд░ ( "рдХрд┐рдпрд╛" )) {
  22. // рд╕рдВрджреЗрд╢ рд╕реЗ рдирд┐рд░реНрджреЗрд╢ рдирд┐рдХрд╛рд▓реЗрдВ
  23. message.description = message.description.replaceFirst ( "\\ [new_state = done \\]" , "" );
  24. // рдЪреЗрдХ рдХрд░реЗрдВ рдХрд┐ рдХрд┐рд╕ рд╢реНрд░реЗрдгреА рдХрд╛ рдХрд╛рд░реНрдп рд╣реИ
  25. рдЕрдЧрд░ (message.getTask) (ред getCategory ()ред getName ()ред рдмрд░рд╛рдмрд░ ( "рдмрджрд▓реЗрдВ" )
  26. // рдЕрдкрдиреЗ рдирд╛рдо рд╕реЗ рдПрдХ рдирдпрд╛ рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд░ рд╕реЗрдЯ рдХрд░реЗрдВ
  27. message.setMstatus ( "рдкреВрд░реНрдг" );
  28. рдЕрдЧрд░ (message.getTask) (ред getCategory ()ред getName ()ред рдмрд░рд╛рдмрд░ ( "рддреНрд░реБрдЯрд┐" )
  29. message.setMstatus ( "рдлрд┐рдХреНрд╕" );
  30. }
  31. if (tempArr [1] .toLowerCase ()ред рдмрд░рд╛рдмрд░ ( "рдкреНрд░рд╛рд░рдВрдн" )) {
  32. message.description = message.description.replaceFirst ( "\\ [new_state = start \\]" , "" );
  33. if (message.getTask ()ред getCategory ()ред getName ()ред рдмрд░рд╛рдмрд░ ( "рдЪреЗрдВрдЬ" ) ||
  34. message.getTask ()ред getCategory ()ред getName ()ред рдмрд░рд╛рдмрд░ ( "рддреНрд░реБрдЯрд┐" )ред
  35. message.setMstatus ( "рдЖрд░рдВрдн рдХрд░реЗрдВ" );
  36. }
  37. }
  38. }
  39. }
  40. рдкрдХрдбрд╝ (рдЕрдкрд╡рд╛рдж рдИ) {
  41. new com.trackstudio.exception.UserMessageException (e.printStackTrace ()) рдлреЗрдВрдХреЗрдВ;
  42. }
  43. рд╡рд╛рдкрд╕реА рдХрд╛ рд╕рдВрджреЗрд╢;
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдИ рдЧрдИ рдереА, рдЕрдм TS рдореЗрдВ рд╣рдо "рдЯрд╛рд╕реНрдХ рдореИрдиреЗрдЬрдореЗрдВрдЯ -> рдкреНрд░реЛрд╕реЗрд╕" рдореЗрдиреВ рдореЗрдВ рд╕реЗрд▓реЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдкрд╣рд▓реЗ "рдЪреЗрдВрдЬ" рдирд╛рдо рдХреЗ рд╕рд╛рде рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдлрд┐рд░ рдЯреИрдм рдСрдкрд░реЗрд╢рди рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ "рдХрдореЗрдВрдЯ" рдирд╛рдо рдХреЗ рд╕рд╛рде рдСрдкрд░реЗрд╢рди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ,

рдЯреИрдм "рдЯреНрд░рд┐рдЧрд░" рдЦреЛрд▓реЗрдВ рдФрд░ "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 / рд╣реБрдХ рдореЗрдВ рд╣реИрдВ ред рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рджреНрд╡рд╛рд░рд╛ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред





рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдирдП рдХрд╛рд░реНрдп рдкрд░ рдХрд╛рдо рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп, рд╡рд░реНрддрдорд╛рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдкрд░рд┐рдЪрд╛рд▓рди рднрдВрдбрд╛рд░ рдореЗрдВ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рд╕реНрдХ рдЙрд╕ рдирд╛рдо рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рдЬрдм рдЯрд╛рд╕реНрдХ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рддреИрдпрд╛рд░-рдХрдореЗрдЯреА- рд╣реБрдХ рд╣реБрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдкреНрд░рддрд┐рдмрджреНрдз рд╕рдВрджреЗрд╢ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░: рдкреЛрд╕реНрдЯ-рдХрдорд┐рдЯ рд╣реБрдХ рднреЗрдЬ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рд╕рдВрджреЗрд╢ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИред рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдФрд░ рдПрдХ рдкрддреНрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдкреИрдЪ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдлрд┐рд░ "рдЗрди" рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдИрдореЗрд▓ рдХреЗ рд▓рд┐рдП рдХрдореЗрдВрдЯ рдХреА рдУрд░ рд╕реЗ рдПрдХ рдкрддреНрд░ рднреЗрдЬрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдЖрд╡реЗрджрди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдореЗрдВ рджрд░реНрдЬ рдХрд░реЗрдВ
$ git add --all & git gui





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

рдпрд╣рд╛рдБ html рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдкреЛрд╕реНрдЯ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИред



рдирд┐рд╖реНрдХрд░реНрд╖

рдПрдХ рдорд╛рдирдХ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдореЗрдВ 4 рдореБрдЦреНрдп рдЪрд░рдг рд╣реЛрддреЗ рд╣реИрдВ:
  1. TS рдореЗрдВ рдХрд╛рд░реНрдп рд╕реЗрдЯ рдХрд░рдирд╛ рдФрд░ git рдХреЗ рд▓рд┐рдП рд╢рд╛рдЦрд╛ рдХрд╛ рдирд╛рдо рдХреЙрдкреА рдХрд░рдирд╛ред
  2. рдЧрд┐рдЯ рдореЗрдВ рдПрдХ рд╢рд╛рдЦрд╛ рдмрдирд╛рдирд╛ рдФрд░ рдЙрд╕ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ред

    рдЖрдк рдЗрд╕реЗ рдПрдХ рдХрдорд╛рдВрдб рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
    $ git checkout -b _



  3. рдХрд╛рд░реНрдп рдкреВрд░реНрдг рд╣реЛрдирд╛ред
  4. TS рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рдХрд░рдирд╛, git рдХрд░рдирд╛ред
рд╕реНрдЯреЗрдЬ 3 рдХреЛ рдПрдХ рд╕рдВрджреЗрд╢ рдореЗрдВ рдордзреНрдпрд╡рд░реНрддреА рдХрдорд┐рдЯ рдХреЗ рд╕рд╛рде рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдирд┐рд░реНрджреЗрд╢ рдирд╣реАрдВ рд╣реЛрдЧрд╛ [new_state = done] - TS рдХрд╛рд░реНрдп рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред





рдЗрд╕ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЯреАрдПрд╕ рдХрд╛ рдЕрднреА рддрдХ рдПрд╕рд╕реАрдПрдо рдЬреАрдЖрдИрдЯреА рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдирд╣реАрдВ рд╣реИред

рдФрд░ рдЬрдм рдпрд╣ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд┐рддрд░рд┐рдд рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдФрд░ рдпрд╣ рд╕рдорд╛рдзрд╛рди рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЪрд┐рдбрд╝рд┐рдпрд╛рдШрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╣реИрдВред рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдХреЗрдВрджреНрд░реАрдп рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдХреНрд░рдо рдФрд░ рд╢реБрджреНрдзрддрд╛ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЯреАрдПрд╕ рддрдХ рд╕реАрдзреА рдкрд╣реБрдВрдЪ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореИрдиреЗрдЬрд░ рдХрд╛рд░реНрдп рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓реЛрдЧреЛрдВ рдХреЛ рдЙрдиреНрд╣реЗрдВ рд╕реМрдВрдк рд╕рдХрддрд╛ рд╣реИред рдкрддреНрд░реЛрдВ рдХреЛ рдЙрдирдХреЗ рдореЗрд▓ рдкрд░ рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдХреЛрдИ рдХрд╛рд░реНрдп рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдЬрд┐рдореНрдореЗрджрд╛рд░ рдард╣рд░рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡рд╣ рд╕рдВрджреЗрд╢ рд╕рдВрджреЗрд╢ рдореЗрдВ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдп рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЧрд┐рдЯ рдХреЗ рд▓рд┐рдП рд╢рд╛рдЦрд╛ рдХрд╛ рдирд╛рдо, рдХрд╛рд░реНрдп рдкрд░ рдХрд╛рдо рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рдХрд╛рд░реНрдп рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╡рд╣ рдЪреБрдкрдЪрд╛рдк рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЖ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдм рдпрд╣ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд╣ рджреВрд░ рд╕реЗ рдРрд╕реЗ рдореБрдЦреМрдЯреЗ рднреА рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдкреВрд░реНрд╡рдЬреЛрдВ рдХреЗ рдХрд╛рд░реНрдп рдХреА рдХреБрдВрдЬреА рдХреЛ рдИрдореЗрд▓ рдкрд░ рдкрддреНрд░ рднреЗрдЬрдХрд░ рдЬрд╛рдирддрд╛ рд╣реЛ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдореЗрд▓ рдЯреАрдПрд╕ рдХреЛ рдЙрд╕ рд╡рд┐рд╖рдп рдХреЗ рд╕рд╛рде рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдХреБрдВрдЬреА рдореМрдЬреВрдж рд╣реИред рдЬрд╡рд╛рдм рдореЗрдВ, рдкрддреНрд░ рднреА рдЖрдПрдВрдЧреЗ рдХрд┐ рдЙрд╕рдиреЗ рдХрд╛рд░реНрдп рдмрдирд╛рдпрд╛ред



рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ




All Articles