/// <summary> /// Loads the repository status (modified, added, removed). /// </summary> private void LoadRepositoryStatus() { var repo = new LibGit2Sharp.Repository(RepositoryFullPath); StatusItems.Clear(); // Load status items. List<StatusItem> itemList = new List<StatusItem>(); LibGit2Sharp.RepositoryStatus status = repo.Index.RetrieveStatus(); foreach (LibGit2Sharp.StatusEntry fileStatus in status) { foreach (LibGit2Sharp.FileStatus value in Enum.GetValues(typeof(LibGit2Sharp.FileStatus))) { bool isSet = fileStatus.State.HasFlag(value); if (isSet == false || value.ToString() == "Unaltered" || value.ToString() == "Ignored") continue; string fileFullPath = RepositoryFullPath + "/" + fileStatus.FilePath; // Only those enum statuses that were set will generate a row in the status grid (and those that are not ignored/unaltered). StatusItem item = new StatusItem { Filename = fileStatus.FilePath, Status = value, Size = FileUtil.GetFormattedFileSize(fileFullPath), IsBinary = FileUtil.IsBinaryFile(fileFullPath) ? "Yes" : "-" }; itemList.Add(item); } } StatusItems.AddRange(itemList); repo.Dispose(); }
/// <summary> /// Loads the repository status (modified, added, removed). /// </summary> private void LoadRepositoryStatus(LibGit2Sharp.Repository repo = null) { var dispose = false; if (repo == null) { repo = new LibGit2Sharp.Repository(RepositoryFullPath); dispose = true; } // A small performance boost. StatusItemsStaged.DisableNotifications(); StatusItemsUnstaged.DisableNotifications(); StatusItemsStaged.Clear(); StatusItemsUnstaged.Clear(); // Load status items. var itemList = new List<StatusItem>(); var status = repo.Index.RetrieveStatus(); foreach (var fileStatus in status) { foreach (LibGit2Sharp.FileStatus value in Enum.GetValues(typeof(LibGit2Sharp.FileStatus))) { var isSet = fileStatus.State.HasFlag(value); if (isSet == false || value.ToString() == "Unaltered" || value.ToString() == "Ignored") continue; // TODO: would it be better without full repo path? var fileFullPath = RepositoryFullPath + "/" + fileStatus.FilePath; // Only those enum statuses that were set will generate a row in the status grid (and those that are not ignored/unaltered). var item = new StatusItem { Filename = fileStatus.FilePath, Status = value, Size = FileUtil.GetFormattedFileSize(fileFullPath), // TODO: Should these two file IO be done lazily? IsBinary = FileUtil.IsBinaryFile(fileFullPath) ? "Yes" : "-" }; itemList.Add(item); } } StatusItemsStaged.AddRange(itemList.Where(s => s.IsStaged)); StatusItemsUnstaged.AddRange(itemList.Where(s => !s.IsStaged)); if (dispose) repo.Dispose(); // Fire notifications for the collection on the UI thread. Application.Current.Dispatcher.Invoke( DispatcherPriority.Normal, (Action)( () => { StatusItemsStaged.EnableNotifications(true); StatusItemsUnstaged.EnableNotifications(true); } ) ); }