// ĠCopyright Ġ 2 0 1 9 ĠAmazon . com , ĠInc . Ġor Ġits Ġaffiliates . ĠAll ĠRights ĠReserved . Ċ // ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ċ package Ġsoftware . aws . tool k its . jetbrains . core . exec ut ables Ċ Ċ import Ġcom . intellij . execution . configurations . General CommandLine Ċ import Ġcom . intellij . openapi . util . System Info Ċ import Ġcom . intellij . util . Environment Util Ċ import Ġcom . intellij . util . text . Sem Ver Ċ import Ġcom . intellij . util . text . nul lize Ċ import Ġsoftware . aws . tool k its . jetbrains . utils . FileInfo Cache Ċ import Ġsoftware . aws . tool k its . resources . message Ċ import Ġjava . time . Duration Ċ Ċ class ĠExec utable Common Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġget CommandLine ( path : ĠString , Ġexecutable Name : ĠString ): ĠGeneral CommandLine Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsanitized Path Ġ= Ġpath . nul lize ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠRuntimeException ( message (" executable Common . cli _ not _ configured ", Ġexecutable Name )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwe Ġhave Ġsome Ġenv - hack s Ġthat Ġwe Ġwant Ġto Ġdo , Ġso Ġwe 're Ġbuilding Ġour Ġown Ġenvironment Ġusing Ġthe Ġsame Ġutil Ġas ĠGeneral CommandLine ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGeneral CommandLine Ġwill Ġapply Ġsome Ġmore Ġenv Ġpatches Ġprior Ġto Ġprocess Ġlaunch Ġ( see Ġstart Process ()) Ġso Ġthis Ġshould Ġbe Ġfine ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeffective Environment Ġ= ĠEnvironment Util . get Environment Map (). to Mutable Map () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġapply Ġhack s ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeffective Environment . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGitHub Ġissue : Ġhttps :// github . com / aws / aws - toolkit - jetbrains / issues / 6 4 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġstrip Ġout Ġany ĠAWS Ġcredentials Ġin Ġthe Ġparent Ġenvironment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove (" AWS _ ACCESS _ KEY _ ID ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove (" AWS _ SECRET _ ACCESS _ KEY ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove (" AWS _ SESSION _ TOKEN ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGitHub Ġissue : Ġhttps :// github . com / aws / aws - toolkit - jetbrains / issues / 5 7 7 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġco erce Ġthe Ġlocale Ġto ĠUTF - 8 Ġas Ġspecified Ġin ĠPEP Ġ 5 3 8 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġis Ġneeded Ġfor ĠPython Ġ 3 . 0 Ġup Ġto ĠPython Ġ 3 . 7 . 0 Ġ( inclusive ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwe Ġcan Ġremove Ġthis Ġonce Ġour ĠIDE Ġminimum Ġversion Ġhas Ġa Ġfix Ġfor Ġhttps :// yout rack . jetbrains . com / issue / PY - 3 0 7 8 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcurrently Ġonly Ġseeing Ġthis Ġon ĠOS ĠX , Ġso Ġonly Ġsco ping Ġto Ġthat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( System Info . is Mac ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġon Ġother Ġplatforms Ġthis Ġcould Ġbe ĠC . UTF - 8 Ġor ĠC . UTF 8 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [" LC _ CTYPE "] Ġ= Ġ" UTF - 8 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwe 're Ġnot Ġsetting ĠPYTHON IO ENCODING Ġbecause Ġwe Ġmight Ġbreak ĠSAM Ġon Ġpy 2 . 7 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠGeneral CommandLine ( sanit ized Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Parent Environment Type ( General CommandLine . Parent Environment Type . NONE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Environment ( effective Environment ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCompare ĠSem Ver Ġversion Ġto Ġpredefined Ġbounds Ġand Ġthrow Ġan Ġexception Ġif Ġout Ġof Ġrange . ĊĠĠĠĠĠĠĠĠ Ġ* ĠMax Ġversion Ġwill Ġalways Ġbe Ġevaluated Ġexclus ively , Ġand Ġmin Ġversion Ġwill Ġalways Ġbe Ġevaluated Ġincl us ively ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġcheck Sem Ver Version ( version : ĠSem Ver , Ġmin : ĠSem Ver , Ġmax : ĠSem Ver , Ġexecutable Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġversion OutOfRange Message Ġ= Ġmessage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" executable Common . version _ wrong ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecutable Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( version Ġ>= Ġmax ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException ("$ version OutOfRange Message Ġ${ message (" executable Common . version _ too _ high ") }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( version Ġ< Ġmin ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException ("$ version OutOfRange Message Ġ${ message (" executable Common . version _ too _ low ", Ġexecutable Name )} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠVersion Ġof Ġthe Ġexecutable , Ġas Ġwhatever Ġtype Ġis Ġtracked Ġby Ġthe ĠFileInfo Cache Ġobject ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġget Version ( path : ĠString , Ġexecutable Version Cache : ĠFileInfo Cache < T >, Ġexecutable Name : ĠString ): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsanitized Path Ġ= Ġpath . nul lize ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠRuntimeException ( message (" executable Common . cli _ not _ configured ", Ġexecutable Name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġexecutable Version Cache . evaluate Blocking ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsanitized Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDEFAULT _ TIMEOUT . to Millis (). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). result ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDEFAULT _ TIMEOUT Ġ= ĠDuration . of Seconds ( 5 ) ĊĠĠĠ Ġ} Ċ } Ċ