// ĠCopyright Ġ 2 0 0 0 - 2 0 1 8 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ package Ġorg . jetbrains . idea . svn Ċ Ċ import Ġcom . intellij . openapi . application . Application Manager Ċ import Ġcom . intellij . openapi . progress . Background Task Queue Ċ import Ġcom . intellij . openapi . progress . Progress Indicator Ċ import Ġcom . intellij . openapi . progress . Task Ċ import Ġcom . intellij . openapi . util . Zip per Updater Ċ import Ġcom . intellij . openapi . vcs . Project Level V cs Manager Ċ import Ġcom . intellij . openapi . vcs . V cs Listener Ċ import Ġcom . intellij . openapi . vfs . V fs Util Core . virtual To Io File Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġcom . intellij . util . Alarm Ċ import Ġorg . jetbrains . annotations . Called In Background Ċ import Ġorg . jetbrains . idea . svn . S vn Util . is Ancestor Ċ import Ġorg . jetbrains . idea . svn . api . Url Ċ Ċ // Ġ 1 . Ġlisten Ġto Ġroots Ġchanges Ċ // Ġ 2 . Ġ- Ġpossibly Ġ- Ġto Ġdeletion / checkout s ??? Ġwhat Ġif ĠWC Ġroots Ġcan Ġbe Ċ class ĠRoot sTo Working Cop ies ( private Ġval Ġmy V cs : ĠS vn V cs ) Ġ: ĠV cs Listener Ġ{ ĊĠ Ġprivate Ġval Ġmy Lock Ġ= ĠAny () ĊĠ Ġprivate Ġval Ġmy Project Ġ= Ġmy V cs . project ĊĠ Ġprivate Ġval Ġmy Root Mapping Ġ= Ġmutable Map Of < Virtual File , ĠWorking Copy >() ĊĠ Ġprivate Ġval Ġmy Un versioned Ġ= Ġmutable Set Of < Virtual File >() ĊĠ Ġprivate Ġval Ġmy Queue Ġ= ĠBackground Task Queue ( my Project , Ġ" SV N ĠV CS Ġroots Ġauthorization Ġchecker ") ĊĠ Ġprivate Ġval Ġmy Zip per Updater Ġ= ĠZip per Updater ( 2 0 0 , ĠAlarm . Thread ToUse . PO O LED _ THREAD , Ġmy Project ) ĊĠ Ġprivate Ġval Ġmy Re checker Ġ= ĠRunnable Ġ{ ĊĠĠĠ Ġclear () ĊĠĠĠ Ġval Ġroots Ġ= ĠProject Level V cs Manager . getInstance ( my Project ). getRoot s Under V cs ( my V cs ) ĊĠĠĠ Ġfor Ġ( root Ġin Ġroots ) Ġ{ ĊĠĠĠĠĠ Ġadd Root ( root ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġadd Root ( root : ĠVirtual File ) Ġ{ ĊĠĠĠ Ġmy Queue . run ( object Ġ: ĠTask . Background able ( my Project , Ġ" Looking Ġfor Ġ'${ root . path }' Ġworking Ġcopy Ġroot ", Ġfalse ) Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġrun ( indicator : ĠProgress Indicator ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcalculate Root ( root ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠ Ġ} ĊĊĠ Ġ@ Called In Background ĊĠ Ġfun Ġget Matching Copy ( url : ĠUrl ?): ĠWorking Copy ? Ġ{ ĊĠĠĠ Ġassert (! Application Manager . getApplication (). is Dispatch Thread Ġ|| ĠApplication Manager . getApplication (). is UnitTest Mode ) ĊĠĠĠ Ġif Ġ( url Ġ== Ġnull ) Ġreturn Ġnull ĊĊĠĠĠ Ġval Ġroots Ġ= ĠProject Level V cs Manager . getInstance ( my Project ). getRoot s Under V cs ( S vn V cs . getInstance ( my Project )) ĊĠĠĠ Ġsynchronized ( my Lock ) Ġ{ ĊĠĠĠĠĠ Ġfor Ġ( root Ġin Ġroots ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwc Root Ġ= Ġget Wc Root ( root ) ĊĠĠĠĠĠĠĠ Ġif Ġ( wc Root Ġ!= Ġnull Ġ&& Ġ( is Ancestor ( wc Root . url , Ġurl ) Ġ|| Ġis Ancestor ( url , Ġwc Root . url ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġreturn Ġwc Root ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġnull ĊĠ Ġ} ĊĊĠ Ġ@ Called In Background ĊĠ Ġfun Ġget Wc Root ( root : ĠVirtual File ): ĠWorking Copy ? Ġ{ ĊĠĠĠ Ġassert (! Application Manager . getApplication (). is Dispatch Thread Ġ|| ĠApplication Manager . getApplication (). is UnitTest Mode ) ĊĊĠĠĠ Ġsynchronized ( my Lock ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( my Un versioned . contains ( root )) Ġreturn Ġnull ĊĠĠĠĠĠ Ġval Ġexisting Ġ= Ġmy Root Mapping [ root ] ĊĠĠĠĠĠ Ġif Ġ( existing Ġ!= Ġnull ) Ġreturn Ġexisting ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġcalculate Root ( root ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcalculate Root ( root : ĠVirtual File ): ĠWorking Copy ? Ġ{ ĊĠĠĠ Ġval Ġworking Copy Root Ġ= ĠS vn Util . get Working Copy Root ( virtual To Io File ( root )) ĊĠĠĠ Ġvar Ġworking Copy : ĠWorking Copy ? Ġ= Ġnull ĊĊĠĠĠ Ġif Ġ( working Copy Root Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġval Ġsvn Info Ġ= Ġmy V cs . getInfo ( working Copy Root ) ĊĊĠĠĠĠĠ Ġif Ġ( svn Info Ġ!= Ġnull Ġ&& Ġsvn Info . url Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġworking Copy Ġ= ĠWorking Copy ( working Copy Root , Ġsvn Info . url ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġregister Working Copy ( root , Ġworking Copy ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġregister Working Copy ( root : ĠVirtual File , Ġresolved Working Copy : ĠWorking Copy ?): ĠWorking Copy ? Ġ{ ĊĠĠĠ Ġsynchronized ( my Lock ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( resolved Working Copy Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmy Root Mapping . remove ( root ) ĊĠĠĠĠĠĠĠ Ġmy Un versioned . add ( root ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġmy Un versioned . remove ( root ) ĊĠĠĠĠĠĠĠ Ġmy Root Mapping [ root ] Ġ= Ġresolved Working Copy ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġresolved Working Copy ĊĠ Ġ} ĊĊĠ Ġfun Ġclear () Ġ{ ĊĠĠĠ Ġsynchronized ( my Lock ) Ġ{ ĊĠĠĠĠĠ Ġmy Root Mapping . clear () ĊĠĠĠĠĠ Ġmy Un versioned . clear () ĊĠĠĠ Ġ} ĊĠĠĠ Ġmy Zip per Updater . stop () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġdirectory Mapping Changed () Ġ{ ĊĠĠĠ Ġ// Ġtodo Ġ+- Ġhere ... Ġshould nt Ġbe ĊĠĠĠ Ġmy V cs . auth Notifier . clear () ĊĊĠĠĠ Ġmy Zip per Updater . queue ( my Re checker ) ĊĠ Ġ} Ċ } Ċ