/* Ċ Ġ* ĠTencent Ġis Ġplease d Ġto Ġsupport Ġthe Ġopen Ġsource Ġcommunity Ġby Ġmaking ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġavailable . Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 Ġ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 . devops . process . engine . service . code Ċ Ċ import Ġcom . tencent . devops . common . pipeline . pojo . element . trigger . enums . Code EventType Ċ import Ġcom . tencent . devops . common . pipeline . pojo . element . trigger . enums . Code Type Ċ import Ġcom . tencent . devops . process . engine . service . Pipeline Webhook Service Ċ import Ġcom . tencent . devops . process . pojo . code . Sc m Webhook Matcher Ċ import Ġcom . tencent . devops . process . pojo . code . svn . S vn Commit Event Ċ import Ġcom . tencent . devops . repository . pojo . Code S vn Repository Ċ import Ġcom . tencent . devops . repository . pojo . Repository Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . util . regex . Pattern Ċ Ċ class ĠS vn Web Hook Matcher ( ĊĠĠĠ Ġval Ġevent : ĠS vn Commit Event , ĊĠĠĠ Ġprivate Ġval Ġpipeline Webhook Service : ĠPipeline Webhook Service Ċ ) Ġ: ĠS cm Webhook Matcher Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( S vn Web Hook Matcher :: class . java ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġregex Ġ= ĠPattern . compile ("[ , ; ]") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Match ( ĊĠĠĠĠĠĠĠ ĠprojectId : ĠString , ĊĠĠĠĠĠĠĠ Ġpipeline Id : ĠString , ĊĠĠĠĠĠĠĠ Ġrepository : ĠRepository , ĊĠĠĠĠĠĠĠ Ġweb Hook Params : ĠS cm Webhook Matcher . Web Hook Params ĊĠĠĠ Ġ): ĠS cm Webhook Matcher . Match Result Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( web Hook Params ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" Code Ġsvn Ġ$ repository ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( repository Ġ! is ĠCode S vn Repository ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" The Ġrepo ($ repository ) Ġis Ġnot Ġcode Ġsvn Ġrepo Ġfor Ġsvn Ġweb Ġhook ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠS cm Webhook Matcher . Match Result ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcheck Ġproject Ġmatch ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ é¡¹çĽ® åĲį æĺ¯ ä¸ī å±Ĥ çļĦ ï¼Į æ¯Ķå¦Ĥ ied / ied _ ki han _ rep / server _ proj ï¼Į éĤ£ å¯¹åºĶçļĦ rep _ name Ġæĺ¯ Ġi ed _ ki han _ rep ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Match Project Ġ= Ġrepository . projectName Ġ== Ġevent . rep _ name Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpipeline Webhook Service . getProject Name ( repository . projectName ) Ġ== Ġevent . rep _ name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Match Project ) ĠS cm Webhook Matcher . Match Result ( false ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" project Ġm act h : Ġ${ event . rep _ name }") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġexclude Ġusers Ġof Ġcommits ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! exclude Users . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexclude User Set Ġ= Ġregex . split ( exclude Users ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexclude User Set . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== Ġget Username ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" The Ġexclude Ġuser ($ exclude Users ) Ġexclude Ġthe Ġsvn Ġupdate Ġon Ġpipeline ($ pipeline Id )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠS cm Webhook Matcher . Match Result ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" exclude Ġuser Ġdo Ġnot Ġmatch : Ġ${ exclude User Set . join ToString (",") }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġinclude Ġusers Ġof Ġcommits ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! include Users . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinclude User Set Ġ= Ġregex . split ( include Users ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! include User Set . any Ġ{ Ġit Ġ== Ġget Username () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" include Ġuser Ġdo Ġnot Ġmatch : Ġ${ include User Set . join ToString (",") }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠS cm Webhook Matcher . Match Result ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject RelativePath Ġ= Ġpipeline Webhook Service . get RelativePath ( repository . url ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġexclude Ġpath Ġof Ġcommits ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! exclude Paths . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexclude Path Set Ġ= Ġregex . split ( exclude Paths ). filter Ġ{ Ġit . isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" Exclude Ġpath Ġset ($ exclude Path Set )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . paths . forEach Ġ{ Ġpath Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexclude Path Set . forEach Ġ{ Ġexclude Path Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfinal RelativePath Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(" ${ project RelativePath . remove Suffix ("/") }/ " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexclude Path . remove Prefix ("/ ")). remove Prefix ("/") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( path . startsWith ( final RelativePath )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" S vn Ġexclude Ġpath Ġ$ path Ġmatch Ġ$ final RelativePath ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠS cm Webhook Matcher . Match Result ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" S vn Ġexclude Ġpath Ġ$ path Ġnot Ġmatch Ġ$ final RelativePath ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġinclude Ġpath Ġof Ġcommits ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( relative Path Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrelative Path Set Ġ= Ġregex . split ( relative Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . paths . forEach Ġ{ Ġpath Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelative Path Set . forEach Ġ{ Ġrelative Sub Path Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfinal RelativePath Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(" ${ project RelativePath . remove Suffix ("/") }/ " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelative Sub Path . remove Prefix ("/ ")). remove Prefix ("/") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( path . startsWith ( final RelativePath )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" S vn Ġpath Ġ$ path Ġmatch Ġ$ final RelativePath ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠS cm Webhook Matcher . Match Result ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" S vn Ġpath Ġ$ path Ġnot Ġmatch Ġ$ final RelativePath ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠS cm Webhook Matcher . Match Result ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠS cm Webhook Matcher . Match Result ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Username () Ġ= Ġevent . userName ĊĊĠĠĠ Ġoverride Ġfun Ġget Revision () Ġ= Ġevent . revision . toString () ĊĊĠĠĠ Ġoverride Ġfun Ġget Repo Name () Ġ= Ġevent . rep _ name ĊĊĠĠĠ Ġoverride Ġfun Ġget Branch Name (): ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġget EventType () Ġ= ĠCode EventType . POST _ COMMIT ĊĊĠĠĠ Ġoverride Ġfun Ġget Code Type () Ġ= ĠCode Type . SV N Ċ }