@@ -26,8 +26,8 @@ export class Repository {
2626 public watcher : FileSystemWatcher ;
2727 public sourceControl : SourceControl ;
2828 public changes : SourceControlResourceGroup ;
29- public notTracked : SourceControlResourceGroup ;
3029 public external : SourceControlResourceGroup ;
30+ public changelists : Map < string , SourceControlResourceGroup > = new Map ( ) ;
3131 private disposables : Disposable [ ] = [ ] ;
3232 public currentBranch = "" ;
3333 public isSwitchingBranch : boolean = false ;
@@ -124,17 +124,12 @@ export class Repository {
124124 updateBranchName ( ) ;
125125
126126 this . changes = this . sourceControl . createResourceGroup ( "changes" , "Changes" ) ;
127- this . notTracked = this . sourceControl . createResourceGroup (
128- "unversioned" ,
129- "Not Tracked"
130- ) ;
131127 this . external = this . sourceControl . createResourceGroup (
132128 "external" ,
133129 "External"
134130 ) ;
135131
136132 this . changes . hideWhenEmpty = true ;
137- this . notTracked . hideWhenEmpty = true ;
138133 this . external . hideWhenEmpty = true ;
139134
140135 this . disposables . push (
@@ -160,8 +155,9 @@ export class Repository {
160155 @debounce ( 1000 )
161156 async update ( ) {
162157 let changes : any [ ] = [ ] ;
163- let notTracked : any [ ] = [ ] ;
164158 let external : any [ ] = [ ] ;
159+ let changelists : Map < string , Resource [ ] > = new Map ( ) ;
160+
165161 const statuses = ( await this . repository . getStatus ( ) ) || [ ] ;
166162
167163 const fileConfig = workspace . getConfiguration ( "files" ) ;
@@ -187,28 +183,55 @@ export class Repository {
187183
188184 if ( status . status === Status . EXTERNAL ) {
189185 external . push ( new Resource ( uri , status . status , renameUri ) ) ;
190- } else if ( status . status === Status . UNVERSIONED ) {
191- const matches = status . path . match (
192- / ( .+ ?) \. ( m i n e | w o r k i n g | m e r g e - \w + \. r \d + | r \d + ) $ /
193- ) ;
194-
195- //If file end with (mine, working, merge, etc..) and has file without extension
196- if (
197- matches &&
198- matches [ 1 ] &&
199- statuses . some ( s => s . path === matches [ 1 ] )
200- ) {
201- return ;
186+ } else {
187+ if ( status . status === Status . UNVERSIONED ) {
188+ const matches = status . path . match (
189+ / ( .+ ?) \. ( m i n e | w o r k i n g | m e r g e - \w + \. r \d + | r \d + ) $ /
190+ ) ;
191+
192+ //If file end with (mine, working, merge, etc..) and has file without extension
193+ if (
194+ matches &&
195+ matches [ 1 ] &&
196+ statuses . some ( s => s . path === matches [ 1 ] )
197+ ) {
198+ return ;
199+ }
202200 }
203201
204- notTracked . push ( new Resource ( uri , status . status , renameUri ) ) ;
205- } else {
206- changes . push ( new Resource ( uri , status . status , renameUri ) ) ;
202+ if ( ! status . changelist ) {
203+ changes . push ( new Resource ( uri , status . status , renameUri ) ) ;
204+ } else {
205+ let changelist = changelists . get ( status . changelist ) ;
206+ if ( ! changelist ) {
207+ changelist = [ ] ;
208+ }
209+ changelist . push ( new Resource ( uri , status . status , renameUri ) ) ;
210+ changelists . set ( status . changelist , changelist ) ;
211+ }
207212 }
208213 } ) ;
209214
210215 this . changes . resourceStates = changes ;
211- this . notTracked . resourceStates = notTracked ;
216+
217+ this . changelists . forEach ( ( group , changelist ) => {
218+ group . resourceStates = [ ] ;
219+ } ) ;
220+
221+ changelists . forEach ( ( resources , changelist ) => {
222+ let group = this . changelists . get ( changelist ) ;
223+ if ( ! group ) {
224+ group = this . sourceControl . createResourceGroup (
225+ `changelist-${ changelist } ` ,
226+ `Changelist "${ changelist } "`
227+ ) ;
228+ group . hideWhenEmpty = true ;
229+
230+ this . changelists . set ( changelist , group ) ;
231+ }
232+
233+ group . resourceStates = resources ;
234+ } ) ;
212235
213236 if ( svnConfig . get < boolean > ( "sourceControl.showExternal" ) ) {
214237 this . external . resourceStates = external ;
0 commit comments