package Ġcom . har ley o conn or . git desk . git . repository Ċ Ċ import Ġcom . har ley o conn or . git desk . git . git Command Ċ import Ġcom . har ley o conn or . git desk . git . repository Exists At Ċ import Ġcom . har ley o conn or . git desk . util . Directory Ċ import Ġcom . har ley o conn or . git desk . util . process . Functional Process Builder Ċ import Ġcom . har ley o conn or . git desk . util . process . Pro ced ural Process Builder Ċ import Ġcom . har ley o conn or . git desk . util . process . Response Ċ import Ġcom . har ley o conn or . git desk . util . process . log Failure Ċ import Ġcom . har ley o conn or . git desk . util . substring Until Ċ import Ġcom . har ley o conn or . git desk . util . to Typed Array Ċ import Ġjava . io . File Ċ import Ġjava . util . concurrent . Comp letableFuture Ċ import Ġjava . util . concurrent . Executor Ċ import Ġjava . util . regex . Matcher Ċ import Ġjava . util . regex . Pattern Ċ Ċ /** Ċ Ġ* Ġ@ author ĠHar ley ĠO ' Conn or Ċ Ġ*/ Ċ data Ġclass ĠRepository Ġ@ Throws ( NoSuch Repository Exception :: class ) Ġconstructor ( val Ġdirectory : ĠDirectory ) Ġ{ ĊĊĠĠĠ Ġval Ġname : ĠString Ġby Ġlazy Ġ{ Ġthis . directory . name Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . throw If DoesNotExist () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetCurrent Branch (): ĠBranch Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbranch Name Ġ= Ġthis . getCurrent Branch Name () ĊĠĠĠĠĠĠĠ Ġreturn ĠBranch ( this , Ġbranch Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetCurrent Branch Name (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFunctional Process Builder . normal () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. git Command () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. arguments (" branch ", Ġ"-- show - current ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. directory ( directory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. begin And WaitFor (). result !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Branch ( name : ĠString ): ĠBranch Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBranch ( this , Ġname ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetAll Branches (): ĠFunctional Process Builder < Array < Branch >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFunctional Process Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbranches Ġ= Ġmutable ListOf < Branch >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . output . split ("\ n "). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! it . contains (" Ġ-> Ġ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbranches . add ( parse Branch Data ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbranches . to Typed Array () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. git Command () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. arguments (" branch ", Ġ"- a ", Ġ"- vv ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. directory ( directory ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Branch Data ( verbose Branch Data : ĠString ): ĠBranch Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBranch ( this , Ġverbose Branch Data . substring Until ( 2 , Ġ' Ġ')) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Remote Branches (): ĠFunctional Process Builder < Array < Remote Branch >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFunctional Process Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbranches Ġ= Ġmutable ListOf < Remote Branch >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . output . split ("\ n "). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Ġ= Ġit . substring ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! line . contains (" Ġ-> Ġ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġremote Name Ġ= Ġline . substring Before ('/') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġremote Url Ġ= ĠRemote . getUrl ( directory , Ġremote Name ) Ġ?: Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbranches . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRemote Branch ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRemote Reference ( remote Name , ĠRemote . get Remote ( remote Url )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline . substring After ('/') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbranches . to Typed Array () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. git Command () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. arguments (" branch ", Ġ"-- rem otes ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. directory ( directory ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Branch ( base : ĠBranch , Ġname : ĠString ): ĠPro ced ural Process Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( base . is Remote Branch ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Remote Branch ( base . as Remote Branch (), Ġname ) ĊĠĠĠĠĠĠĠ Ġelse ĠPro ced ural Process Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. git Command () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. arguments (" branch ", Ġname , Ġbase . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. directory ( directory ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Branch With Upstream ( base : ĠBranch , Ġname : ĠString , Ġupstream Branch : ĠRemote Branch ): ĠPro ced ural Process Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġupstream Setter Ġ= ĠPro ced ural Process Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. git Command () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. arguments ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" branch ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- u ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ upstream Branch . remote . name }/${ upstream Branch . name }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. directory ( directory ) ĊĠĠĠĠĠĠĠ Ġval Ġprimary Builder : ĠPro ced ural Process Builder Ġ= Ġif Ġ( base . is Remote Branch ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Remote Branch ( base . as Remote Branch (), Ġname ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPro ced ural Process Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. git Command () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. arguments (" branch ", Ġname , Ġbase . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. directory ( directory ) ĊĠĠĠĠĠĠĠ Ġ}. if Successful Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupstream Setter . begin () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġprimary Builder ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfetch Remote Branch ( ĊĠĠĠĠĠĠĠ Ġbase : ĠRemote Branch , ĊĠĠĠĠĠĠĠ Ġname : ĠString ĊĠĠĠ Ġ): ĠPro ced ural Process Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPro ced ural Process Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. git Command () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. arguments (" fetch ", Ġbase . remote . name , Ġ"${ base . name }: $ name ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. directory ( directory ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhas Branch ( name : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPro ced ural Process Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. git Command () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. arguments (" rev - parse ", Ġ"-- verify ", Ġ"-- quiet ", Ġname ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. directory ( directory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. begin And WaitFor (). code Ġ== Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfetch (): ĠPro ced ural Process Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPro ced ural Process Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. git Command () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. arguments (" fetch ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. directory ( directory ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpull (): ĠPro ced ural Process Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPro ced ural Process Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. git Command () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. arguments (" pull ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. directory ( directory ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpush (): ĠPro ced ural Process Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPro ced ural Process Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. git Command () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. arguments (" push ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. directory ( directory ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠaddTo Stage ( file : ĠFile ): ĠPro ced ural Process Builder Ġ= ĠPro ced ural Process Builder () ĊĠĠĠĠĠĠĠ Ġ. git Command () ĊĠĠĠĠĠĠĠ Ġ. arguments (" add ", Ġfile . canonical File . relative To ( directory ). path ) ĊĠĠĠĠĠĠĠ Ġ. directory ( directory ) ĊĊĠĠĠ Ġfun Ġremove From Stage ( file : ĠFile ): ĠPro ced ural Process Builder Ġ= ĠPro ced ural Process Builder () ĊĠĠĠĠĠĠĠ Ġ. git Command () ĊĠĠĠĠĠĠĠ Ġ. arguments (" reset ", Ġ" HEAD ", Ġ"-- ", Ġfile . canonical File . relative To ( directory ). path ) ĊĠĠĠĠĠĠĠ Ġ. directory ( directory ) ĊĊĠĠĠ Ġfun Ġrollback ( file : ĠFile ): ĠPro ced ural Process Builder Ġ= ĠPro ced ural Process Builder () ĊĠĠĠĠĠĠĠ Ġ. git Command () ĊĠĠĠĠĠĠĠ Ġ. arguments (" checkout ", Ġ" HEAD ", Ġ"-- ", Ġfile . canonical File . relative To ( directory ). path ) ĊĠĠĠĠĠĠĠ Ġ. directory ( directory ) ĊĊĠĠĠ Ġfun Ġrollback All (): ĠPro ced ural Process Builder Ġ= ĠPro ced ural Process Builder () ĊĠĠĠĠĠĠĠ Ġ. git Command () ĊĠĠĠĠĠĠĠ Ġ. arguments (" checkout ", Ġ" HEAD ", Ġ"-- ", Ġ". ") ĊĠĠĠĠĠĠĠ Ġ. directory ( directory ) ĊĊĠĠĠ Ġfun Ġget Changed Files (): ĠFunctional Process Builder < Array < Changed File >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFunctional Process Builder ( this :: map Status Response ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. git Command () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. arguments (" status ", Ġ"-- por cel ain = v 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. directory ( directory ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmap Status Response ( response : ĠResponse ): ĠArray < Changed File > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġresponse . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . output . split ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . isNotEmpty () Ġ}. ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap NotNull Ġ{ Ġline Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChanged File . parse Changed File ( line , Ġdirectory ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠ Ġ}. result !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstage All Files (): ĠPro ced ural Process Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPro ced ural Process Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. git Command () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. arguments (" add ", Ġ". ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. directory ( directory ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġun Stage All Files (): ĠPro ced ural Process Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPro ced ural Process Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. git Command () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. arguments (" reset ", Ġ" HEAD ", Ġ"-- ", Ġ". ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. directory ( directory ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Un St aged Files (): ĠFunctional Process Builder < Array < File >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFunctional Process Builder ( this :: map Changed Files Response ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. git Command () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. arguments (" diff ", Ġ"-- name - only ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. directory ( directory ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmap Changed Files Response ( response : ĠResponse ): ĠArray < File > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġresponse . output . split ("\ n "). stream () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġrelative Path Ġ-> ĠFile ( directory . absolute Path Ġ+ ĠFile . separator Char Ġ+ Ġrelative Path ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Typed Array () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Difference ( file : ĠFile ): ĠFunctional Process Builder < Difference > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFunctional Process Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠD ifference . parse ( it . output ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. git Command () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. arguments (" diff ", Ġfile . canonical File . relative To ( directory ). path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. directory ( directory ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcommit ( summary : ĠString , Ġdescription : ĠString ): ĠPro ced ural Process Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPro ced ural Process Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. git Command () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. arguments (" commit ", Ġ"- m ", Ġsummary , Ġ"- m ", Ġdescription ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. directory ( directory ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFor ces ĠGit Ġto Ġupdate Ġwhich Ġfiles Ġare Ġtracked Ġon Ġthe Ġstage . ĠThis Ġcan Ġbe Ġused Ġto Ġrefresh Ġthe Ġstage Ġafter Ġmaking ĊĠĠĠĠ Ġ* Ġedits Ġto Ġthe Ġ`. gitignore ` Ġfile . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġupdate Tracked Files ( executor : ĠExecutor ): ĠCompletableFuture < Void > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠCompletableFuture . run Async ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstage All (). if Failure (:: log Failure ). begin And WaitFor () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġun Stage All (). if Failure (:: log Failure ). begin And WaitFor () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstage All (). if Failure (:: log Failure ). begin And WaitFor () ĊĠĠĠĠĠĠĠ Ġ}, Ġexecutor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġun Stage All (): ĠPro ced ural Process Builder Ġ= ĠPro ced ural Process Builder () ĊĠĠĠĠĠĠĠ Ġ. git Command () ĊĠĠĠĠĠĠĠ Ġ. arguments (" rm ", Ġ"- r ", Ġ"-- cached ", Ġ". ") ĊĠĠĠĠĠĠĠ Ġ. directory ( directory ) ĊĊĠĠĠ Ġprivate Ġfun Ġstage All (): ĠPro ced ural Process Builder Ġ= ĠPro ced ural Process Builder () ĊĠĠĠĠĠĠĠ Ġ. git Command () ĊĠĠĠĠĠĠĠ Ġ. arguments (" add ", Ġ". ") ĊĠĠĠĠĠĠĠ Ġ. directory ( directory ) ĊĊĠĠĠ Ġ@ Throws ( NoSuch Repository Exception :: class ) ĊĠĠĠ Ġprivate Ġfun Ġthrow If DoesNotExist () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! repository Exists At ( directory )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNoSuch Repository Exception (" Git Ġrepository Ġdoes Ġnot Ġexist Ġat Ġ\" ${ directory . path }\" .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠChanged File ( ĊĠĠĠĠĠĠĠ Ġval Ġfile : ĠFile , ĊĠĠĠĠĠĠĠ Ġval Ġst aged : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġval Ġchange Type : ĠChange Type ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġenum Ġclass ĠChange Type Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMO DI FIED , ĠAD DED ; ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġget For ( char : ĠChar ): ĠChange Type ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( char ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' M ' Ġ-> ĠMO DI FIED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' A ' Ġ-> ĠAD DED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH ANG ED _ FILE _ STATUS _ PATTERN Ġ= ĠPattern . compile (" ([ MA Ġ]) ([ MA Ġ]) Ġ( .* )") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠParses Ġa Ġline Ġfrom Ġthe Ġstatus Ġcommand 's Ġpor cel ain Ġv 1 Ġoutput . ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġparse Changed File ( line : ĠString , Ġrepository Directory : ĠDirectory ): ĠChanged File ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatcher Ġ= ĠCH ANG ED _ FILE _ STATUS _ PATTERN . matcher ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( matcher . find ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠparseFrom Groups ( matcher , Ġrepository Directory ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Could Ġnot Ġparse Ġchanged Ġfile Ġline : Ġ$ line ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun ĠparseFrom Groups ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatcher : ĠMatcher , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository Directory : ĠDirectory ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠChanged File ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġst aged Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstate Ġ= Ġmatcher . group ( 1 )[ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state Ġ== Ġ' Ġ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġst aged Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= Ġmatcher . group ( 2 )[ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrelative Path Ġ= Ġmatcher . group ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠChanged File ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( repository Directory . absolute Path Ġ+ ĠFile . separator Char Ġ+ Ġrelative Path ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġst aged , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChange Type . get For ( state ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }