@@ -852,7 +852,7 @@ public void UpdateGroupOptions()
852852 FilesAndFolders . GetExtendedGroupHeaderInfo = groupInfoSelector . Item2 ;
853853 }
854854
855- public Dictionary < string , BitmapImage > DefaultIcons = new ( ) ;
855+ public Dictionary < string , BitmapImage > DefaultIcons = new ( ) ;
856856
857857 private uint currentDefaultIconSize = 0 ;
858858
@@ -1193,6 +1193,31 @@ await SafetyExtensions.IgnoreExceptions(() =>
11931193 gp . InitializeExtendedGroupHeaderInfoAsync ( ) ;
11941194 } ) ) ;
11951195 }
1196+
1197+ if ( item . IsGitItem &&
1198+ GitHelpers . IsRepositoryEx ( item . ItemPath , out var repoPath ) &&
1199+ ! string . IsNullOrEmpty ( repoPath ) )
1200+ {
1201+ cts . Token . ThrowIfCancellationRequested ( ) ;
1202+ await SafetyExtensions . IgnoreExceptions ( ( ) =>
1203+ {
1204+ var repo = new LibGit2Sharp . Repository ( repoPath ) ;
1205+ GitItemModel gitItemModel = GitHelpers . GetGitInformationForItem ( repo , item . ItemPath ) ;
1206+
1207+ return dispatcherQueue . EnqueueOrInvokeAsync ( ( ) =>
1208+ {
1209+ var gitItem = item . AsGitItem ;
1210+ gitItem . UnmergedGitStatusLabel = gitItemModel . StatusHumanized ;
1211+ gitItem . GitLastCommitDate = gitItemModel . LastCommit ? . Author . When ;
1212+ gitItem . GitLastCommitMessage = gitItemModel . LastCommit ? . MessageShort ;
1213+ gitItem . GitLastCommitAuthor = gitItemModel . LastCommit ? . Author . Name ;
1214+ gitItem . GitLastCommitSha = gitItemModel . LastCommit ? . Sha . Substring ( 0 , 7 ) ;
1215+
1216+ repo . Dispose ( ) ;
1217+ } ,
1218+ Microsoft . UI . Dispatching . DispatcherQueuePriority . Low ) ;
1219+ } ) ;
1220+ }
11961221 }
11971222 } , cts . Token ) ;
11981223 }
@@ -1363,8 +1388,14 @@ private async Task RapidAddItemsToCollection(string? path, LibraryItem? library
13631388 case 0 :
13641389 currentStorageFolder ??= await FilesystemTasks . Wrap ( ( ) => StorageFileExtensions . DangerousGetFolderWithPathFromPathAsync ( path ) ) ;
13651390 var syncStatus = await CheckCloudDriveSyncStatusAsync ( currentStorageFolder ? . Item ) ;
1366- PageTypeUpdated ? . Invoke ( this , new PageTypeUpdatedEventArgs ( ) { IsTypeCloudDrive = syncStatus != CloudDriveSyncStatus . NotSynced && syncStatus != CloudDriveSyncStatus . Unknown } ) ;
1391+ PageTypeUpdated ? . Invoke ( this , new PageTypeUpdatedEventArgs ( )
1392+ {
1393+ IsTypeCloudDrive = syncStatus != CloudDriveSyncStatus . NotSynced && syncStatus != CloudDriveSyncStatus . Unknown ,
1394+ IsTypeGitRepository = GitDirectory is not null
1395+ } ) ;
13671396 WatchForDirectoryChanges ( path , syncStatus ) ;
1397+ if ( GitDirectory is not null )
1398+ WatchForGitChanges ( ) ;
13681399 break ;
13691400
13701401 // Enumerated with StorageFolder
@@ -1936,9 +1967,6 @@ private void WatchForDirectoryChanges(string path, CloudDriveSyncStatus syncStat
19361967 Debug . WriteLine ( "aWatcherAction done: {0}" , rand ) ;
19371968 } ) ;
19381969
1939- if ( GitDirectory is not null )
1940- WatchForGitChanges ( hasSyncStatus ) ;
1941-
19421970 watcherCTS . Token . Register ( ( ) =>
19431971 {
19441972 if ( aWatcherAction is not null )
@@ -1956,7 +1984,7 @@ private void WatchForDirectoryChanges(string path, CloudDriveSyncStatus syncStat
19561984 } ) ;
19571985 }
19581986
1959- private void WatchForGitChanges ( bool hasSyncStatus )
1987+ private void WatchForGitChanges ( )
19601988 {
19611989 var hWatchDir = NativeFileOperationsHelper . CreateFileFromApp (
19621990 GitDirectory ! ,
@@ -1979,9 +2007,6 @@ private void WatchForGitChanges(bool hasSyncStatus)
19792007 var rand = Guid . NewGuid ( ) ;
19802008 var notifyFilters = FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_SIZE | FILE_NOTIFY_CHANGE_CREATION ;
19812009
1982- if ( hasSyncStatus )
1983- notifyFilters |= FILE_NOTIFY_CHANGE_ATTRIBUTES ;
1984-
19852010 var overlapped = new OVERLAPPED ( ) ;
19862011 overlapped . hEvent = CreateEvent ( IntPtr . Zero , false , false , null ) ;
19872012 const uint INFINITE = 0xFFFFFFFF ;
@@ -2255,9 +2280,9 @@ private async Task AddFileOrFolderAsync(ListedItem? item)
22552280
22562281 // FILE_ATTRIBUTE_DIRECTORY
22572282 if ( ( findData . dwFileAttributes & 0x10 ) > 0 )
2258- listedItem = await Win32StorageEnumerator . GetFolder ( findData , Directory . GetParent ( fileOrFolderPath ) . FullName , addFilesCTS . Token ) ;
2283+ listedItem = await Win32StorageEnumerator . GetFolder ( findData , Directory . GetParent ( fileOrFolderPath ) . FullName , GitDirectory is not null , addFilesCTS . Token ) ;
22592284 else
2260- listedItem = await Win32StorageEnumerator . GetFile ( findData , Directory . GetParent ( fileOrFolderPath ) . FullName , addFilesCTS . Token ) ;
2285+ listedItem = await Win32StorageEnumerator . GetFile ( findData , Directory . GetParent ( fileOrFolderPath ) . FullName , GitDirectory is not null , addFilesCTS . Token ) ;
22612286
22622287 await AddFileOrFolderAsync ( listedItem ) ;
22632288
@@ -2446,6 +2471,8 @@ public class PageTypeUpdatedEventArgs
24462471 public bool IsTypeCloudDrive { get ; set ; }
24472472
24482473 public bool IsTypeRecycleBin { get ; set ; }
2474+
2475+ public bool IsTypeGitRepository { get ; set ; }
24492476 }
24502477
24512478 public class WorkingDirectoryModifiedEventArgs : EventArgs
0 commit comments