/* Ċ Ġ* Ġ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 . task Ċ Ċ import Ġcom . inter shop . gradle . scm . extension . Sc m Extension Ċ import Ġcom . inter shop . gradle . scm . utils . Branch Type Ċ import Ġcom . inter shop . gradle . scm . utils . Sc m Exception Ċ import Ġcom . inter shop . release . version . Parser Exception Ċ import Ġcom . inter shop . release . version . Version Parser Ċ import Ġorg . gradle . api . Gradle Exception Ċ import Ġorg . gradle . api . tasks . Input Ċ import Ġorg . gradle . api . tasks . Optional Ċ import Ġorg . gradle . api . tasks . Task Action Ċ import Ġorg . gradle . api . tasks . options . Option Ċ Ċ /** Ċ Ġ* ĠThis Ġis Ġthe Ġimplementation Ġof ĠGradle Ċ Ġ* Ġtask Ġto Ġswitch Ġthe Ġbranch Ġto Ġa Ġspecial Ġversion . Ċ Ġ*/ Ċ open Ġclass ĠTo Version : ĠAbstract D ry Run Task () Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġoutputs . up ToDate When Ġ{ Ġfalse Ġ} ĊĊĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Moves Ġthe Ġexisting Ġworking Ġcopy Ġto Ġa Ġspecified Ġversion Ġ_ tag _" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġversion Prop : ĠString Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġbranch Type Prop : ĠString Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġfeature Ext Prop : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġproperty Ġis Ġused Ġif Ġa Ġspecial Ġversion Ġshould Ġbe Ġspecified . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ property Ġversion ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ set : Option ( option Ġ= Ġ" version ", Ġdescription Ġ= Ġ" Target Ġversion Ġfor Ġthe Ġto Version Ġtask .") ĊĠĠĠ Ġ@ get : Optional ĊĠĠĠ Ġ@ get : Input ĊĠĠĠ Ġvar Ġversion : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġversion Prop ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġversion Prop Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġproperty Ġis Ġused Ġfor Ġa Ġspecial Ġbranch Ġtype . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ property Ġbranch Type ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ set : Option ( option Ġ= Ġ" branch Type ", Ġdescription Ġ= Ġ" Branch Ġtype Ġfor Ġthe Ġto Version Ġtask .") ĊĠĠĠ Ġ@ get : Optional ĊĠĠĠ Ġ@ get : Input ĊĠĠĠ Ġvar Ġbranch Type : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġbranch Type Prop ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbranch Type Prop Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġproperty Ġis Ġused Ġfor Ġa Ġspecial Ġbranch Ġtype . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ property Ġfeature ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ set : Option ( option Ġ= Ġ" feature ", Ġdescription Ġ= Ġ" Feature Ġextension Ġfor Ġversion Ġtasks .") ĊĠĠĠ Ġ@ get : Optional ĊĠĠĠ Ġ@ get : Input ĊĠĠĠ Ġvar Ġfeature : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġfeature Ext Prop ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfeature Ext Prop Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetProperty ( prop Name : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif ( Ġproject . has Property ( prop Name ) Ġ) Ġ{ Ġproject . property ( prop Name ). toString () Ġ} Ġelse Ġ{ Ġ"" Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Branch Type ( branch Type Str : ĠString , Ġfeature Branch Str : ĠString ): ĠBranch Type Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbranch Type Str . isNotEmpty () ĠĠĠĠĠ Ġ-> ĠBranch Type . valueOf ( branch Type Str ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfeature Branch Str . isNotEmpty () ĠĠ Ġ-> ĠBranch Type . FEATURE BRANCH ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠBranch Type . BRANCH ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠImplementation Ġof Ġthe Ġtask Ġaction . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( Gradle Exception :: class ) ĊĠĠĠ Ġ@ Task Action ĊĠĠĠ Ġfun Ġto Version Action () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġversion Config Ġ= Ġproject . extensions . getBy Type ( Sc m Extension :: class . java ). version ĊĊĠĠĠĠĠĠĠ Ġproject . logger . debug (" Version Ġis Ġ{} Ġbranch Ġtype Ġis Ġ{}, ĠFeature Ġis Ġ{}", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Prop , Ġbranch Type Prop , Ġfeature Ext Prop ) ĊĊĠĠĠĠĠĠĠ Ġif ( version Prop . isNotEmpty ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb Type Ġ= Ġget Branch Type ( branch Type Prop , Ġfeature Ext Prop ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġv Ġ= ĠVersion Parser . parse Version ( version Prop , Ġversion Config . version Type ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( feature Ext Prop . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv Ġ= Ġv . set Branch Metadata ( feature Ext Prop ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . logger . debug (" Target Ġversion Ġis Ġ{}", Ġv . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . logger . debug (" Branch Ġtype Ġis Ġ{}", Ġb Type . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġversion Service Ġ= Ġversion Config . version Service ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! Ġdry Run ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrevision Ġ= Ġversion Service . moveTo ( v . toString (), Ġb Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . logger . info (" Working Ġcopy Ġwas Ġswitched Ġto Ġ{} Ġwith Ġrevision Ġid Ġ{}", Ġv . toString (), Ġrevision ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ """ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| -------------------------------- -------------- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ ĠD ry Run : ĠWorking Ġcopy Ġwill Ġbe Ġswitched ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġto Ġ$ v Ġwith Ġfor Ġ$ b Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| -------------------------------- -------------- """. trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch ( i ex : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . logger . error (" The Ġbranch Ġtype Ġ{} Ġis Ġnot Ġa Ġvalid Ġtype .", Ġbranch Type Prop ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠGradle Exception (" The Ġbranch Ġtype Ġis Ġnot Ġvalid ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch ( Ġex : ĠParser Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . logger . error (" The Ġversion Ġ{} Ġis Ġnot Ġa Ġvalid Ġversion .", Ġversion Prop ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠGradle Exception (" The Ġtarget Ġversion Ġis Ġnot Ġvalid ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch ( Ġex : ĠS cm Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . logger . error ( Ġ" It Ġwas Ġnot Ġpossible Ġto Ġswitch Ġthe Ġcurrent Ġworking Ġcopy Ġto Ġthe Ġspec if ed Ġversion .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠGradle Exception ( Ġ" It Ġwas Ġnot Ġpossible Ġto Ġswitch Ġthe Ġcurrent Ġworking Ġcopy Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" to Ġthe Ġspec if ed Ġversion Ġ[ ${ ex . message } ]. ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ