@@ -15,7 +15,7 @@ public QueryBranches(string repo)
1515 {
1616 WorkingDirectory = repo ;
1717 Context = repo ;
18- Args = "branch -l --all -v --format=\" %(refname)%00%(committerdate:unix)%00%(objectname)%00%(HEAD)%00%(upstream)%00%(upstream:trackshort)\" " ;
18+ Args = "branch -l --all -v --format=\" %(refname)%00%(committerdate:unix)%00%(objectname)%00%(HEAD)%00%(upstream)%00%(upstream:trackshort)%00%(worktreepath) \" " ;
1919 }
2020
2121 public async Task < List < Models . Branch > > GetResultAsync ( )
@@ -26,42 +26,44 @@ public QueryBranches(string repo)
2626 return branches ;
2727
2828 var lines = rs . StdOut . Split ( [ '\r ' , '\n ' ] , StringSplitOptions . RemoveEmptyEntries ) ;
29- var remoteHeads = new Dictionary < string , string > ( ) ;
29+ var mismatched = new HashSet < string > ( ) ;
30+ var remotes = new Dictionary < string , Models . Branch > ( ) ;
3031 foreach ( var line in lines )
3132 {
32- var b = ParseLine ( line ) ;
33+ var b = ParseLine ( line , mismatched ) ;
3334 if ( b != null )
3435 {
3536 branches . Add ( b ) ;
3637 if ( ! b . IsLocal )
37- remoteHeads . Add ( b . FullName , b . Head ) ;
38+ remotes . Add ( b . FullName , b ) ;
3839 }
3940 }
4041
4142 foreach ( var b in branches )
4243 {
4344 if ( b . IsLocal && ! string . IsNullOrEmpty ( b . Upstream ) )
4445 {
45- if ( remoteHeads . TryGetValue ( b . Upstream , out var upstreamHead ) )
46+ if ( remotes . TryGetValue ( b . Upstream , out var upstream ) )
4647 {
4748 b . IsUpstreamGone = false ;
48- b . TrackStatus ??= await new QueryTrackStatus ( WorkingDirectory , b . Head , upstreamHead ) . GetResultAsync ( ) . ConfigureAwait ( false ) ;
49+
50+ if ( mismatched . Contains ( b . FullName ) )
51+ await new QueryTrackStatus ( WorkingDirectory ) . GetResultAsync ( b , upstream ) . ConfigureAwait ( false ) ;
4952 }
5053 else
5154 {
5255 b . IsUpstreamGone = true ;
53- b . TrackStatus ??= new Models . BranchTrackStatus ( ) ;
5456 }
5557 }
5658 }
5759
5860 return branches ;
5961 }
6062
61- private Models . Branch ParseLine ( string line )
63+ private Models . Branch ParseLine ( string line , HashSet < string > mismatched )
6264 {
6365 var parts = line . Split ( '\0 ' ) ;
64- if ( parts . Length != 6 )
66+ if ( parts . Length != 7 )
6567 return null ;
6668
6769 var branch = new Models . Branch ( ) ;
@@ -103,12 +105,13 @@ private Models.Branch ParseLine(string line)
103105 branch . Upstream = parts [ 4 ] ;
104106 branch . IsUpstreamGone = false ;
105107
106- if ( ! branch . IsLocal ||
107- string . IsNullOrEmpty ( branch . Upstream ) ||
108- string . IsNullOrEmpty ( parts [ 5 ] ) ||
109- parts [ 5 ] . Equals ( "=" , StringComparison . Ordinal ) )
110- branch . TrackStatus = new Models . BranchTrackStatus ( ) ;
108+ if ( branch . IsLocal &&
109+ ! string . IsNullOrEmpty ( branch . Upstream ) &&
110+ ! string . IsNullOrEmpty ( parts [ 5 ] ) &&
111+ ! parts [ 5 ] . Equals ( "=" , StringComparison . Ordinal ) )
112+ mismatched . Add ( branch . FullName ) ;
111113
114+ branch . WorktreePath = parts [ 6 ] ;
112115 return branch ;
113116 }
114117 }
0 commit comments