/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠInter shop ĠCom munications ĠAG . Ċ Ġ* Ċ Ġ* Ġ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 . inter shop . gradle . scm . extension Ċ Ċ import Ġcom . inter shop . gradle . scm . services . Sc m Local Service Ċ import Ġcom . inter shop . gradle . scm . services . file . File Local Service Ċ import Ġcom . inter shop . gradle . scm . services . git . Git Local Service Ċ import Ġcom . inter shop . gradle . scm . utils . Prefix Config Ċ import Ġcom . inter shop . gradle . scm . utils . Sc m Key Ċ import Ġcom . inter shop . gradle . scm . utils . Sc m Type Ċ import Ġcom . inter shop . gradle . scm . utils . Sc m User Ċ import Ġgro ovy . lang . Closure Ċ import Ġorg . gradle . api . Action Ċ import Ġorg . gradle . api . file . Project Layout Ċ import Ġorg . gradle . api . model . ObjectFactory Ċ import Ġorg . gradle . util . Configure Util Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠExtension Ġfor Ġall ĠS CM Ġbased Ġplugins . Ċ Ġ*/ Ċ abstract Ġclass ĠS cm Extension Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInject Ġservice Ġof ĠObject Factory Ġ( See Ġ" Service Ġinjection " Ġin ĠGradle Ġdocumentation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ get : Inject ĊĠĠĠ Ġabstract Ġval Ġobject Factory : ĠObject Factory ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInject Ġservice Ġof ĠProject Layout Ġ( See Ġ" Service Ġinjection " Ġin ĠGradle Ġdocumentation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ get : Inject ĊĠĠĠ Ġabstract Ġval Ġproject Layout : ĠProject Layout ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ< p > SCM Ġuser </ p > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ< p > Can Ġbe Ġconfigured / over written Ġwith Ġenvironment Ġvariables ĠS CM _ USERNAME , ĊĠĠĠĠ Ġ* ĠS CM _ PASSWORD ; Ġjava Ġenvironment ĠS CM _ USERNAME , ĠS CM _ PASSWORD Ġor Ġproject ĊĠĠĠĠ Ġ* Ġvariables Ġsc m UserName , Ġsc m User Pass wd .</ p > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ< pre > ĊĠĠĠĠ Ġ* Ġ{@ code ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġuser Ġ{ ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ'' ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠ Ġpassword Ġ= Ġ'' ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġ} ĊĠĠĠĠ Ġ* Ġ} ĊĠĠĠĠ Ġ* Ġ</ pre > ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġuser : ĠS cm User Ġ= Ġobject Factory . newInstance ( Sc m User :: class . java ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ< p > SCM Ġkey </ p > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ< p > Can Ġbe Ġconfigured / over written Ġwith Ġenvironment Ġvariables ĠS CM _ KEY FILE , ĊĠĠĠĠ Ġ* ĠS CM _ KEY PAS SP HR ASE ; Ġjava Ġenvironment ĠS CM _ KEY FILE , ĠS CM _ KEY PAS SP HR ASE Ġor Ġproject ĊĠĠĠĠ Ġ* Ġvariables Ġsc m Key File , Ġsc m Key Pass phrase .</ p > ĊĠĠĠĠ Ġ* Ġ< pre > ĊĠĠĠĠ Ġ* Ġ{@ code ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġkey Ġ{ ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠ Ġfile Ġ( File ) ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠ Ġpassphrase Ġ= Ġ'' ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġ} ĊĠĠĠĠ Ġ* Ġ} ĊĠĠĠĠ Ġ* Ġ</ pre > ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġkey : ĠS cm Key Ġ= Ġobject Factory . newInstance ( Sc m Key :: class . java ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPrefix es Ġfor Ġbranches Ġand Ġtags . ĊĠĠĠĠ Ġ* Ġ< pre > ĊĠĠĠĠ Ġ* Ġ{@ code ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġprefixes Ġ{ ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠ Ġstabil ization Prefix Ġ= Ġ' SB ' ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠ Ġfeature Prefix Ġ= Ġ' FB ' ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠ Ġtag Prefix Ġ= Ġ' RELEASE ' ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠ Ġprefix Se perator Ġ= Ġ'_' ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġ} ĊĠĠĠĠ Ġ* Ġ} ĊĠĠĠĠ Ġ* Ġ</ pre > ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġprefixes : ĠPrefix Config Ġ= Ġobject Factory . newInstance ( Prefix Config :: class . java ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGetter Ġfor Ġsc m Type . ĊĠĠĠĠ Ġ* Ġ@ property Ġsc m Type Ġthe Ġsc m Type Ġobject Ġfor Ġthe Ġdetected ĠS CM ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġsc m Type : ĠS cm Type ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgit Dir Ġ= Ġproject Layout . project Directory . file (". git "). as File ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen ( git Dir . exists () Ġ&& Ġgit Dir . isDirectory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> ĠS cm Type . GIT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> ĠS cm Type . FILE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġprovides Ġthe Ġlocal Ġservice Ġfunctionality Ġfor Ġall ĊĠĠĠĠ Ġ* Ġtasks Ġ ect . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ property Ġlocal Service ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġlocal Service : ĠS cm Local Service Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( scm Type Ġ== ĠS cm Type . GIT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGit Local Service ( project Layout . project Directory . as File , Ġprefixes ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile Local Service ( project Layout . project Directory . as File , Ġprefixes ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġextension Ġcontains Ġsettings Ġfor Ġversion Ġcalculation Ġand ĊĠĠĠĠ Ġ* Ġread Ġproperties Ġfor Ġthe Ġcurrent Ġversion Ġand Ġprevious Ġversion . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġversion : ĠVersion Extension Ġ= Ġobject Factory . newInstance ( Version Extension :: class . java , Ġthis ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġextension Ġcontains Ġsettings Ġfor Ġchange Ġlog Ġconfiguration . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġchangelog : ĠChange Log Extension Ġ= Ġobject Factory . newInstance ( Change Log Extension :: class . java ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠS CM Ġuser Ġfor Ġauthentication . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġclosure Ġsc m Ġuser Ġ( see ĠS cm User ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġuser ( closure : ĠClosure < Sc m User >) Ġ{ ĊĠĠĠĠĠĠĠ ĠConfigure Util . configure ( closure , Ġuser ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠS CM Ġuser Ġfor Ġauthentication Ġfor ĠJava / Kotlin . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġaction Ġsc m Ġuser Ġ( see ĠS cm User ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġuser ( action : ĠAction < in ĠS cm User >) Ġ{ ĊĠĠĠĠĠĠĠ Ġaction . execute ( user ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠS CM Ġkey Ġconfiguration Ġfor Ġauthentication . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġclosure Ġsc m Ġuser Ġ( see ĠS cm Key ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġkey ( closure : ĠClosure < Sc m Key >) Ġ{ ĊĠĠĠĠĠĠĠ ĠConfigure Util . configure ( closure , Ġkey ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠS CM Ġkey Ġconfiguration Ġfor Ġauthentication Ġfor ĠJava / Kotlin . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġaction Ġsc m Ġuser Ġ( see ĠS cm Key ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġkey ( action : ĠAction < in ĠS cm Key >) Ġ{ ĊĠĠĠĠĠĠĠ Ġaction . execute ( key ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPrefix Ġconfiguration Ġfor Ġbranches Ġand Ġtags . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġclosure Ġprefix Ġconfiguration Ġ( see ĠPrefix Config ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġprefixes ( closure : ĠClosure < Prefix Config >) Ġ{ ĊĠĠĠĠĠĠĠ ĠConfigure Util . configure ( closure , Ġprefixes ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPrefix Ġconfiguration Ġfor Ġbranches Ġand Ġtags Ġfor ĠJava / Kotlin . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġaction Ġprefix Ġconfiguration Ġ( see ĠPrefix Config ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġprefixes ( action : ĠAction < in ĠPrefix Config >) Ġ{ ĊĠĠĠĠĠĠĠ Ġaction . execute ( prefixes ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠVersion Ġextension Ġwith Ġconfiguration . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġclosure Ġversion Ġextension Ġ( Version Extension ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġversion ( closure : ĠClosure < Version Extension >) Ġ{ ĊĠĠĠĠĠĠĠ ĠConfigure Util . configure ( closure , Ġversion ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠVersion Ġextension Ġwith Ġconfiguration Ġfor ĠJava / Kotlin . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġaction Ġversion Ġextension Ġ( Version Extension ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġversion ( action : ĠAction < in ĠVersion Extension >) Ġ{ ĊĠĠĠĠĠĠĠ Ġaction . execute ( version ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠChangelog Ġext en ions Ġwith Ġconfiguration . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġclosure Ġchangelog Ġextension Ġ( Change log Extension ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġchangelog ( closure : ĠClosure < Change Log Extension >) Ġ{ ĊĠĠĠĠĠĠĠ ĠConfigure Util . configure ( closure , Ġchangelog ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠChangelog Ġext en ions Ġwith Ġconfiguration Ġfor ĠJava / Kotlin . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġaction Ġchangelog Ġextension Ġ( Change log Extension ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġchangelog ( action : ĠAction < in ĠChange Log Extension >) Ġ{ ĊĠĠĠĠĠĠĠ Ġaction . execute ( changelog ) ĊĠĠĠ Ġ} Ċ } Ċ