/* Ċ Ġ* ĠTencent Ġis Ġplease d Ġto Ġsupport Ġthe Ġopen Ġsource Ġcommunity Ġby Ġmaking ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġavailable . Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 ĠTH L ĠA 2 9 ĠLimited , Ġa ĠTencent Ġcompany . Ġ ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġis Ġlicensed Ġunder Ġthe ĠMIT Ġlicense . Ċ Ġ* Ċ Ġ* ĠA Ġcopy Ġof Ġthe ĠMIT ĠLicense Ġis Ġincluded Ġin Ġthis Ġfile . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠTerms Ġof Ġthe ĠMIT ĠLicense : Ċ Ġ* Ġ------------------------------------------------ --- Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . tencent . bk repo . helm . artifact . repository Ċ Ċ import Ġcom . tencent . bk repo . common . artifact . repository . context . Artifact Download Context Ċ import Ġcom . tencent . bk repo . common . artifact . repository . context . Artifact Query Context Ċ import Ġcom . tencent . bk repo . common . artifact . repository . context . Artifact Remove Context Ċ import Ġcom . tencent . bk repo . common . artifact . repository . context . Artifact Upload Context Ċ import Ġcom . tencent . bk repo . common . artifact . repository . local . Local Repository Ċ import Ġcom . tencent . bk repo . common . artifact . resolve . response . Artifact Channel Ċ import Ġcom . tencent . bk repo . common . artifact . resolve . response . Artifact Resource Ċ import Ġcom . tencent . bk repo . common . artifact . stream . Artifact InputStream Ċ import Ġcom . tencent . bk repo . common . artifact . stream . Range Ċ import Ġcom . tencent . bk repo . common . artifact . util . Package Keys Ċ import Ġcom . tencent . bk repo . common . service . util . Spring Context Utils . Companion . publish Event Ċ import Ġcom . tencent . bk repo . helm . constants . CH ART Ċ import Ġcom . tencent . bk repo . helm . constants . FILE _ TYPE Ċ import Ġcom . tencent . bk repo . helm . constants . FORCE Ċ import Ġcom . tencent . bk repo . helm . constants . FULL _ PATH Ċ import Ġcom . tencent . bk repo . helm . constants . META _ DETAIL Ċ import Ġcom . tencent . bk repo . helm . constants . NAME Ċ import Ġcom . tencent . bk repo . helm . constants . OVER WRITE Ċ import Ġcom . tencent . bk repo . helm . constants . PROV Ċ import Ġcom . tencent . bk repo . helm . constants . SIZE Ċ import Ġcom . tencent . bk repo . helm . constants . VERSION Ċ import Ġcom . tencent . bk repo . helm . exception . Helm BadRequest Exception Ċ import Ġcom . tencent . bk repo . helm . exception . Helm File AlreadyExists Exception Ċ import Ġcom . tencent . bk repo . helm . exception . Helm FileNotFoundException Ċ import Ġcom . tencent . bk repo . helm . listener . event . Chart Delete Event Ċ import Ġcom . tencent . bk repo . helm . listener . event . Chart Upload Event Ċ import Ġcom . tencent . bk repo . helm . listener . event . Chart Version Delete Event Ċ import Ġcom . tencent . bk repo . helm . pojo . artifact . Helm Delete Artifact Info Ċ import Ġcom . tencent . bk repo . helm . pojo . chart . Chart Package Delete Request Ċ import Ġcom . tencent . bk repo . helm . pojo . chart . Chart Version Delete Request Ċ import Ġcom . tencent . bk repo . helm . service . impl . Helm Operation Service Ċ import Ġcom . tencent . bk repo . helm . utils . Chart Parser Util Ċ import Ġcom . tencent . bk repo . helm . utils . Helm Metadata Utils Ċ import Ġcom . tencent . bk repo . helm . utils . Helm Utils Ċ import Ġcom . tencent . bk repo . helm . utils . Object Builder Util Ċ import Ġcom . tencent . bk repo . repository . pojo . download . Package Download Record Ċ import Ġcom . tencent . bk repo . repository . pojo . node . service . Node CreateRequest Ċ import Ġorg . slf 4 j . Logger Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . stereotype . Component Ċ Ċ @ Component Ċ class ĠHelm Local Repository ( ĊĠĠĠ Ġprivate Ġval Ġhelm Operation Service : ĠHelm Operation Service Ċ ) Ġ: ĠLocal Repository () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġon Upload Before ( context : ĠArtifact Upload Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Upload Before ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġget Artifact File (). getSize () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Attribute ( SIZE , Ġsize ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( getString Attribute ( FILE _ TYPE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCH ART Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchart Metadata Ġ= ĠChart Parser Util . parse Chart FileInfo ( context . get Artifact File ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Attribute ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFULL _ PATH , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHelm Utils . get Chart File FullPath ( chart Metadata . name , Ġchart Metadata . version ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Attribute ( META _ DETAIL , ĠHelm Metadata Utils . convertTo Map ( chart Metadata )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Attribute ( NAME , Ġchart Metadata . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Attribute ( VERSION , Ġchart Metadata . version ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠHelm BadRequest Exception (" The Ġchart Ġis Ġbroken ..... ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPRO V Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprov FileInfo Ġ= ĠChart Parser Util . parse Prov FileInfo ( context . get Artifact File ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Attribute ( FULL _ PATH , ĠHelm Utils . get Prov File FullPath ( prov FileInfo . first , Ġprov FileInfo . second )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠåĪ¤æĸŃ æĺ¯åĲ¦ æĺ¯ å¼º åĪ¶ ä¸Ĭä¼ł ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Force Ġ= Ġrequest . getParameter ( FORCE )?. let Ġ{ Ġtrue Ġ} Ġ?: Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Attribute ( FORCE , Ġis Force ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrepository Detail Ġ= Ġrepository Detail ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠprojectId Ġ= Ġrepository Detail . projectId ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrepo Name Ġ= Ġrepository Detail . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfull Path Ġ= ĠgetString Attribute ( FULL _ PATH ). or Empty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Exist Ġ= Ġnode Client . check Exist ( projectId , Ġrepo Name , Ġfull Path ). data !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Overwrite Ġ= Ġis Overwrite ( fullPath , Ġis Force ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Attribute ( OVER WRITE , Ġis Overwrite ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Exist Ġ&& Ġ! is Overwrite ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠHelm File AlreadyExists Exception ("${ fullPath . trim Start ('/ ')} Ġalready Ġexists ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ä¸Ĭä¼ł æĪĲåĬŁ åĽŀè°ĥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Upload Success ( context : ĠArtifact Upload Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Upload Success ( context ) ĊĠĠĠĠĠĠĠ Ġhelm Operation Service . init Package Info ( context ) ĊĠĠĠĠĠĠĠ Ġif Ġ( CH ART Ġ== Ġcontext . getString Attribute ( FILE _ TYPE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublish Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChart Upload Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObject Builder Util . build Chart Upload Request ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbuild Node CreateRequest ( context : ĠArtifact Upload Context ): ĠNode CreateRequest Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfull Path Ġ= ĠgetString Attribute ( FULL _ PATH ). or Empty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Force Ġ= Ġget Boolean Attribute ( FORCE ) !! ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNode CreateRequest ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprojectId Ġ= ĠprojectId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepo Name Ġ= Ġrepo Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfolder Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfull Path Ġ= Ġfull Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= Ġget Long Attribute ( SIZE ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsha 2 5 6 Ġ= Ġget Artifact Sha 2 5 6 (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmd 5 Ġ= Ġget Artifact Md 5 (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoperator Ġ= ĠuserId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata Ġ= Ġparse MetaData ( context ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverwrite Ġ= Ġis Overwrite ( fullPath , Ġis Force ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ä¸ĭè½½ åīį åĽŀè°ĥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Download Before ( context : ĠArtifact Download Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Download Before ( context ) ĊĠĠĠĠĠĠĠ Ġcontext . put Attribute ( FULL _ PATH , Ġcontext . artifact Info . get Artifact FullPath ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Download ( context : ĠArtifact Download Context ): ĠArtifact Resource ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfull Path Ġ= Ġcontext . getString Attribute ( FULL _ PATH ) !! ĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= Ġnode Client . getNode Detail ( context . projectId , Ġcontext . repo Name , Ġfull Path ). data ĊĠĠĠĠĠĠĠ Ġnode ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode . metadata [ NAME ]?. let Ġ{ Ġcontext . put Attribute ( NAME , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode . metadata [ VERSION ]?. let Ġ{ Ġcontext . put Attribute ( VERSION , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval ĠinputStream Ġ= Ġstorage Manager . load Artifact InputStream ( node , Ġcontext . storage Credentials ) ĊĠĠĠĠĠĠĠ ĠinputStream ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠArtifact Resource ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . artifact Info . getResponse Name (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArtifact Channel . LOCAL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . use Disposition ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbuild Download Record ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠArtifact Download Context , ĊĠĠĠĠĠĠĠ Ġartifact Resource : ĠArtifact Resource ĊĠĠĠ Ġ): ĠPackage Download Record ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObject Builder Util . build Download Record Request ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġquery ( context : ĠArtifact Query Context ): ĠArtifact InputStream ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfull Path Ġ= Ġcontext . getString Attribute ( FULL _ PATH ) !! ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . on Query ( context ) Ġ?: Ġthrow ĠHelm FileNotFoundException (" Artifact [$ fullPath ] Ġdoes Ġnot Ġexist ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Query ( context : ĠArtifact Query Context ): ĠArtifact InputStream ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrepository Detail Ġ= Ġcontext . repository Detail ĊĠĠĠĠĠĠĠ Ġval ĠprojectId Ġ= Ġrepository Detail . projectId ĊĠĠĠĠĠĠĠ Ġval Ġrepo Name Ġ= Ġrepository Detail . name ĊĠĠĠĠĠĠĠ Ġval Ġfull Path Ġ= Ġcontext . getString Attribute ( FULL _ PATH ) !! ĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= Ġnode Client . getNode Detail ( projectId , Ġrepo Name , Ġfull Path ). data ĊĠĠĠĠĠĠĠ Ġif Ġ( node Ġ== Ġnull Ġ|| Ġnode . folder ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġstorage Service . load ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode . sha 2 5 6 !! , ĠRange . full ( node . size ), Ġcontext . storage Credentials ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ çīĪæľ¬ ä¸įåŃĺåľ¨ æĹ¶ Ġstatus Ġcode Ġ 4 0 4 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" IMP LICIT _ CAST _ TO _ ANY ") ĊĠĠĠ Ġoverride Ġfun Ġremove ( context : ĠArtifact Remove Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġhelm Operation Service . remove Chart Or Prov ( context ) ĊĠĠĠĠĠĠĠ Ġwith ( context . artifact Info Ġas ĠHelm Delete Artifact Info ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent Ġ= Ġif Ġ( version . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChart Delete Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChart Package Delete Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprojectId Ġ= ĠprojectId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepo Name Ġ= Ġrepo Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= ĠPackage Keys . resolve Helm ( packageName ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoperator Ġ= Ġcontext . userId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChart Version Delete Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChart Version Delete Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprojectId Ġ= ĠprojectId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepo Name Ġ= Ġrepo Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= ĠPackage Keys . resolve Helm ( packageName ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ= Ġversion , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoperator Ġ= Ġcontext . userId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublish Event ( event ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse MetaData ( context : ĠArtifact Upload Context ): ĠMap < String , ĠAny >? Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfull Path Ġ= ĠgetString Attribute ( FULL _ PATH ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġforce Update Ġ= Ġget Boolean Attribute ( FORCE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfileType Ġ= ĠgetString Attribute ( FILE _ TYPE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult : ĠMap < String , ĠAny >? Ġ= Ġempty Map () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Overwrite ( fullPath !! , Ġforce Update !! )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( fileType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCH ART Ġ-> Ġresult Ġ= Ġget Attribute ( META _ DETAIL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPRO V Ġ-> Ġresult Ġ= ĠChart Parser Util . parse Name And Version ( fullPath ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Overwrite ( fullPath : ĠString , Ġis Force : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġis Force Ġ|| Ġ!( fullPath . trim (). endsWith (". tgz ", Ġtrue ) Ġ|| Ġfull Path . trim (). endsWith (". prov ", Ġtrue )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger : ĠLogger Ġ= ĠLoggerFactory . getLogger ( Helm Local Repository :: class . java ) ĊĠĠĠ Ġ} Ċ } Ċ