/* Ċ Ġ* ĠCopyright Ġ 2 0 0 0 - 2 0 1 7 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* Ġ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 Ġorg . jetbrains . settings Repository Ċ Ċ import Ġcom . intellij . openapi . diagnostic . debug Ċ import Ġcom . intellij . openapi . diagnostic . run And Log Exception Ċ import Ġcom . intellij . openapi . progress . Progress Indicator Ċ import Ġcom . intellij . openapi . util . Atomic Clear able Lazy Value Ċ import Ġcom . intellij . util . containers . map Smart NotNull Ċ import Ġcom . intellij . util . io . exists Ċ import Ġg nu . tro ve . TH ash Set Ċ import Ġorg . eclipse . j git . diff . Diff Entry Ċ import Ġorg . eclipse . j git . diff . Diff Formatter Ċ import Ġorg . eclipse . j git . lib . Repository Ċ import Ġorg . eclipse . j git . util . io . Disabled OutputStream Ċ import Ġorg . jetbrains . settings Repository . git .* Ċ import Ġjava . nio . file . Path Ċ Ċ class ĠReadOnly Source Manager ( private Ġval Ġ ics Manager : ĠI cs Manager , Ġval Ġroot Dir : ĠPath ) Ġ{ ĊĠ Ġprivate Ġval Ġrepository List Ġ= Ġobject Ġ: ĠAtomic Clear able Lazy Value < List < Repository >>() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġcompute (): ĠList < Repository > Ġ{ ĊĠĠĠĠĠ Ġif Ġ( ics Manager . settings . readOnly Sources . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġempty List () ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġreturn Ġ ics Manager . settings . readOnly Sources . map Smart NotNull Ġ{ Ġsource Ġ-> ĊĠĠĠĠĠĠĠ ĠLOG . run And Log Exception Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ(! source . active ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map Smart NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġsource . path Ġ?: Ġreturn @ map Smart NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠ Ġval Ġdir Ġ= Ġroot Dir . resolve ( path ) ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( dir . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map Smart NotNull Ġbuild B are Repository ( dir ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . warn (" Skip Ġread - only Ġsource Ġ${ source . url } Ġbecause Ġdir Ġdoesn 't Ġexist ") ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġval Ġrepositories : ĠList < Repository > ĊĠĠĠ Ġget () Ġ= Ġrepository List . value ĊĊĠ Ġfun Ġset Sources ( sources : ĠList < Readonly Source >) Ġ{ ĊĠĠĠ Ġ ics Manager . settings . readOnly Sources Ġ= Ġsources ĊĠĠĠ Ġrepository List . drop () ĊĠ Ġ} ĊĊĠ Ġfun Ġupdate ( indicator : ĠProgress Indicator ? Ġ= Ġnull ): ĠSet < String >? Ġ{ ĊĠĠĠ Ġvar Ġchanged Root Dirs : ĠMutable Set < String >? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġadd Changed Path ( path : ĠString ?) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( path Ġ== Ġnull Ġ|| Ġpath Ġ== ĠDiff Entry . DEV _ NULL ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġvar Ġfirst Slash Ġ= Ġpath . indexOf ('/') ĊĠĠĠĠĠ Ġif Ġ( first Slash Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġpath Ġmust Ġuse Ġonly Ġ/ , Ġbut Ġwho Ġknows ĊĠĠĠĠĠĠĠ Ġfirst Slash Ġ= Ġpath . indexOf ('\\ ') ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġif Ġ( first Slash Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( changed Root Dirs Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġchanged Root Dirs Ġ= ĠT HashSet () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġchanged Root Dirs !!. add ( path . substring ( 0 , Ġfirst Slash )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfor Ġ( repo Ġin Ġrepositories ) Ġ{ ĊĠĠĠĠĠ Ġindicator ?. check Canceled () ĊĠĠĠĠĠ ĠLOG . debug Ġ{ Ġ" Pull Ġchanges Ġfrom Ġread - only Ġrepo Ġ${ repo . upstream }" Ġ} ĊĊĠĠĠĠĠ ĠPull ( Git Repository Client Impl ( repo , Ġ ics Manager . credentials Store ), Ġindicator ). fetch ( ref Update Processor Ġ= Ġ{ Ġref Update Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġdiff Formatter Ġ= ĠDiff Formatter ( Disabled OutputStream . INSTANCE ) ĊĠĠĠĠĠĠĠ Ġdiff Formatter . set Repository ( repo ) ĊĠĠĠĠĠĠĠ Ġdiff Formatter . use Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġdiff Formatter . scan ( ref Update . old ObjectId , Ġref Update . new ObjectId ) ĊĠĠĠĠĠĠĠĠĠ Ġfor Ġ( e Ġin Ġresult ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e . change Type Ġ== ĠDiff Entry . Change Type . DELETE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Changed Path ( e . old Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Changed Path ( e . old Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Changed Path ( e . new Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġchanged Root Dirs ĊĠ Ġ} Ċ }