/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠV lad im ir ĠS it nik ov Ġ< sit nik ov . vl ad im ir @ gmail . com > Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ċ Ġ*/ Ċ package Ġcom . github . v ls i . gradle . checksum Ċ Ċ import Ġcom . github . v ls i . gradle . checksum . model .* Ġ// Ġk tl int - disable Ċ import Ġcom . github . v ls i . gradle . checksum . pgp .* Ġ// Ġk tl int - disable Ċ import Ġorg . gradle . Build Adapter Ċ import Ġorg . gradle . Build Result Ċ import Ġorg . gradle . api . Gradle Exception Ċ import Ġorg . gradle . api . Plugin Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . initialization . Settings Ċ import Ġorg . gradle . api . invocation . Gradle Ċ import Ġorg . gradle . api . logging . Logging Ċ import Ġorg . gradle . api . plugins . Help Tasks Plugin Ċ import Ġorg . gradle . api . tasks . diagnostics . Dependency Report Task Ċ import Ġorg . gradle . kotlin . dsl . create Ċ import Ġorg . gradle . kotlin . dsl . extra Ċ import Ġorg . gradle . kotlin . dsl . register Ċ import Ġorg . gradle . util . Gradle Version Ċ import Ġjava . io . File Ċ import Ġjava . net . URI Ċ import Ġjava . time . Duration Ċ import Ġjava . util . concurrent . Fork Join Pool Ċ Ċ private Ġval Ġlogger Ġ= ĠLogging . getLogger ( Checksum Dependency Plugin :: class . java ) Ċ Ċ open Ġclass ĠCheck sum Dependency Plugin Ġ: ĠPlugin < Settings > Ġ{ ĊĠĠĠ Ġprivate Ġfun ĠSettings . property ( name : ĠString , Ġdefault : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġsettings . extra . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . has ( name )) Ġit . get ( name ) Ġas ĠString Ġelse Ġdefault ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠSettings . property ( name : ĠString , Ġdefault : Ġ() Ġ-> ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġsettings . extra . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . has ( name )) Ġit . get ( name ) Ġas ĠString Ġelse Ġdefault () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠSettings . bool Property ( name : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġsettings . extra . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . has ( name ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( it . get ( name ) Ġas ĠString ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. equals (" false ", Ġignore Case Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. not () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġapply ( settings : ĠSettings ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchecksum Ignore Ġ= Ġsettings . bool Property (" checksum Ignore ") ĊĠĠĠĠĠĠĠ Ġif Ġ( checksum Ignore ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . lifecycle (" checksum - dependency - plugin Ġis Ġdisabled Ġsince Ġchecksum Ignore Ġproperty Ġis Ġpresent ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġchecksum Ignore On Task Ġ= Ġsettings . property (" checksum Ignore On Task ", Ġ" dependency Updates ") ĊĊĠĠĠĠĠĠĠ Ġval Ġchecksum FileName Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings . property (" checksum . xml ", Ġ" checksum . xml ") ĊĠĠĠĠĠĠĠ Ġval Ġchecksum s Ġ= ĠFile ( settings . rootDir , Ġchecksum FileName ) ĊĠĠĠĠĠĠĠ Ġval Ġbuild Dir Ġ= Ġsettings . property (" checksum Build Dir ", Ġ" build / checksum ") ĊĠĠĠĠĠĠĠ Ġval Ġbuild Folder Ġ= ĠFile ( settings . rootDir , Ġbuild Dir ) ĊĊĠĠĠĠĠĠĠ Ġval Ġchecksum Update All Ġ= Ġsettings . bool Property (" checksum Update All ") ĊĠĠĠĠĠĠĠ Ġval Ġchecksum Update Ġ= Ġchecksum Update All Ġ|| Ġsettings . bool Property (" checksum Update ") ĊĠĠĠĠĠĠĠ Ġval Ġcomputed Checksum File Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( checksum Update ) Ġchecksum s Ġelse ĠFile ( build Folder , Ġ" checksum . xml ") ĊĊĠĠĠĠĠĠĠ Ġval Ġchecksum Print Ġ= Ġsettings . bool Property (" checksum Print ") ĊĠĠĠĠĠĠĠ Ġval Ġchecksum Tim ings Print Ġ= Ġsettings . bool Property (" checksum Tim ings Print ") ĊĊĠĠĠĠĠĠĠ Ġval Ġfail On Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings . property (" checksum Fail On ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( checksum Update Ġ&& Ġ! checksum s . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . lifecycle (" Checksum s Ġfile Ġis Ġmissing Ġ($ checksum s ), Ġand Ġchecksum Ġupdate Ġwas Ġrequested Ġ(- P checksum Update ). ĠWill Ġre fr ain Ġfrom Ġfailing Ġthe Ġbuild Ġon Ġthe Ġfirst Ġchecksum / pgp Ġviolation ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" NE VER " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( checksum Update All ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . lifecycle ("- P checksum Update All Ġis Ġspecified , Ġso Ġthe Ġbuild Ġwon 't Ġfail Ġin Ġcase Ġof Ġthe Ġchecksum Ġmismatch ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" NE VER " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" FIRST _ ERROR " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toUpperCase (). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFail On . valueOf ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠGradle Exception ("' $ it ' Ġis Ġnot Ġsupported Ġfor Ġ' checksum Fail On ' Ġproperty . ĠPlease Ġuse Ġone Ġof Ġ${ Fail On . values (). toList () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġp gp Key server Ġ= Ġsettings . property (" pgp Key server ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" h kp :// pool . sk s - key servers . net , https :// keys . fedoraproject . org , https :// key server . ubuntu . com , h kp :// keys . open pgp . org ") ĊĊĠĠĠĠĠĠĠ Ġval Ġp gp Connect Timeout Ġ= Ġsettings . property (" pgp Connect Timeout ", Ġ" 5 "). to Long () ĊĠĠĠĠĠĠĠ Ġval Ġp gp Read Timeout Ġ= Ġsettings . property (" pgp Read Timeout ", Ġ" 2 0 "). to Long () ĊĠĠĠĠĠĠĠ Ġval Ġp gp Min Log gable Timeout Ġ= Ġsettings . property (" pgp Min Log gable Timeout ", Ġ" 4 "). to Long () ĊĊĠĠĠĠĠĠĠ Ġval Ġp gp Retry Count Ġ= Ġsettings . property (" pgp Retry Count ", Ġ" 4 0 "). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġp gp Initial Retry Delay Ġ= Ġsettings . property (" pgp Initial Retry Delay ", Ġ" 1 0 0 "). to Long () ĊĠĠĠĠĠĠĠ Ġval Ġp gp Maximum Retry Delay Ġ= Ġsettings . property (" pgp Maximum Retry Delay ", Ġ" 1 0 0 0 0 "). to Long () ĊĊĠĠĠĠĠĠĠ Ġval Ġp gp Resolution Timeout Ġ= Ġsettings . property (" pgp Resolution Timeout ", Ġ" 3 0 "). to Long () ĊĠĠĠĠĠĠĠ Ġval Ġchecksum Cpu Threads Ġ= Ġsettings . property (" checksum Cpu Threads ", ĠFork Join Pool . get Common Pool Parallel ism (). toString ()). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġchecksum Io Threads Ġ= Ġsettings . property (" checksum Io Threads ", Ġ" 5 0 "). toInt () ĊĊĠĠĠĠĠĠĠ Ġval Ġkey Downloader Ġ= ĠKey Downloader ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġretry Ġ= ĠRetry ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġur is Ġ= Ġp gp Key server . split (',' ). map Ġ{ ĠURI ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġretry Schedule Ġ= ĠRetry Schedule ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Delay Ġ= Ġp gp Initial Retry Delay , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaximum Delay Ġ= Ġp gp Maximum Retry Delay ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġretry Count Ġ= Ġp gp Retry Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Resolution Timeout Ġ= ĠDuration . of Seconds ( pgp Resolution Timeout ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Log gable Timeout Ġ= ĠDuration . of Seconds ( pgp Min Log gable Timeout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimeouts Ġ= ĠTimeout s ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnect Timeout Ġ= ĠDuration . of Seconds ( pgp Connect Timeout ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread Timeout Ġ= ĠDuration . of Seconds ( pgp Read Timeout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġkey Store Ġ= ĠKey Store ( File ( build Folder , Ġ" keystore "), Ġkey Downloader ) ĊĠĠĠĠĠĠĠ Ġval Ġverification Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( checksum s . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDependency Verification Store . load ( checksum s ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDependency Verification ( Verification Config ( P gp Level . GROUP , ĠCheck sum Level . NONE )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġverification Db Ġ= ĠDependency Verification Db ( verification ) ĊĠĠĠĠĠĠĠ Ġval Ġexec utors Ġ= ĠExec utors (" checksum - dependency ", Ġchecksum Cpu Threads , Ġchecksum Io Threads ) ĊĠĠĠĠĠĠĠ Ġval Ġchecksum Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCheck sum Dependency ( settings , Ġchecksum Update , Ġchecksum Print , Ġchecksum Tim ings Print , Ġcomputed Checksum File , Ġkey Store , Ġverification Db , Ġfail On , Ġexec utors ) ĊĠĠĠĠĠĠĠ Ġsettings . gradle . addListener ( checksum . resolution Listener ) ĊĠĠĠĠĠĠĠ Ġsettings . gradle . add Build Listener ( checksum . build Listener ) ĊĊĠĠĠĠĠĠĠ Ġsettings . gradle . add Build Listener ( object Ġ: ĠBuild Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġunregister Checksum Listeners () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings . gradle . remove Listener ( checksum . resolution Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings . gradle . remove Listener ( checksum . build Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġprojects Evalu ated ( gradle : ĠGradle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( checksum Ignore On Task . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtasks Ġ= Ġchecksum Ignore On Task . split ( Regex ("\\ s *, \\ s * ")). toSet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgradle . task Graph . when Ready Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstop Task Ġ= Ġall Tasks . first OrNull Ġ{ Ġtasks . contains ( it . name ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stop Task Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . lifecycle (" checksum - dependency Ġis Ġdisabled Ġbecause Ġtask Ġexecution Ġgraph Ġcontains Ġtask Ġ$ stop Task ," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġand Ġchecksum Ignore On Task Ġis Ġset Ġto Ġ'$ checksum Ignore On Task '") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunregister Checksum Listeners () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbuild Finished ( result : ĠBuild Result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunregister Checksum Listeners () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexec utors . cpu . shutdown () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexec utors . io . shutdown () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġval Ġall Deps Ġ= Ġsettings . property (" all Dependencies Enabled ", Ġ" true "). to Boolean () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( all Deps ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings . gradle . root Project Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Gradle Version . current () Ġ>= ĠGradle Version . version (" 4 . 8 ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister Add All Dependencies Task () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Add All Dependencies Task () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠProject . register Add All Dependencies Task () Ġ{ ĊĠĠĠĠĠĠĠ Ġtasks . register (" all Dependencies ", ĠDependency Report Task :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ= ĠHelp Tasks Plugin . HELP _ GROUP ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Shows Ġdependencies Ġof Ġall Ġprojects " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsub projects Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtasks . register (" all Dependencies ", ĠDependency Report Task :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠProject . create Add All Dependencies Task () Ġ{ ĊĠĠĠĠĠĠĠ Ġtasks . create (" all Dependencies ", ĠDependency Report Task :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ= ĠHelp Tasks Plugin . HELP _ GROUP ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Shows Ġdependencies Ġof Ġall Ġprojects " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsub projects Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtasks . create (" all Dependencies ", ĠDependency Report Task :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ