/// <summary> /// Loads branches and commits. /// </summary> /// <param name="repo"></param> private void LoadBranchesAndCommits(LibGit2Sharp.Repository repo) { var dispose = false; if (repo == null) { repo = new LibGit2Sharp.Repository(RepositoryFullPath); dispose = true; } // Small performance boosts. Commits.DisableNotifications(); Branches.DisableNotifications(); // Create commits. Commits.Clear(); List <Commit> commitList = new List <Commit>(); foreach (LibGit2Sharp.Commit commit in repo.Commits.QueryBy(new LibGit2Sharp.Filter { Since = repo.Branches }).Take(CommitsPerPage)) { commitList.Add(Commit.Create(repo, commit, Tags)); } Commits.AddRange(commitList); // Create branches. Branches.Clear(); foreach (LibGit2Sharp.Branch branch in repo.Branches) { Branch b = Branch.Create(this, repo, branch); Branches.Add(b); } // Post-process branches (tips and tracking branches). foreach (Branch branch in Branches) { // Set the HEAD property if it matches. if (repo.Head.Name == branch.Name) { Head = branch; branch.Tip.IsHead = true; } branch.PostProcess(Branches, Commits); } // Post-process commits (commit parents). foreach (Commit commit in Commits) { // Set the HEAD property to a DetachedHead branch if the HEAD matched and it was null. if (Head == null && repo.Head.Tip.Sha == commit.Hash) { Head = new DetachedHead { Tip = commit }; commit.IsHead = true; } commit.PostProcess(Commits, Branches); } // Calculate commit visual positions for each branch tree. foreach (Branch branch in Branches) { RepoUtil.IncrementCommitTreeVisualPositionsRecursively(branch.Tip); } Commits.EnableNotifications(); Branches.EnableNotifications(); if (dispose) { repo.Dispose(); } }
/// <summary> /// Loads branches and commits. /// </summary> /// <param name="repo"></param> private void LoadBranchesAndCommits(LibGit2Sharp.Repository repo = null) { var dispose = false; if (repo == null) { repo = new LibGit2Sharp.Repository(RepositoryFullPath); dispose = true; } // Small performance boosts. Commits.DisableNotifications(); Branches.DisableNotifications(); // Create commits. Commits.Clear(); var commitList = new List <Commit>(); foreach (var commit in repo.Commits.QueryBy(new LibGit2Sharp.Filter { Since = repo.Branches }).Take(CommitsPerPage)) { commitList.Add(Commit.Create(repo, commit, Tags)); } Commits.AddRange(commitList); // Create branches. Branches.Clear(); foreach (var branch in repo.Branches) { var b = Branch.Create(this, repo, branch); Branches.Add(b); } // Post-process branches (tips and tracking branches). foreach (var branch in Branches) { // Set the HEAD property if it matches. if (repo.Head.Name == branch.Name) { Head = branch; branch.Tip.IsHead = true; } branch.PostProcess(Branches, Commits); } // Post-process commits (commit parents). foreach (var commit in Commits) { // Set the HEAD property to a DetachedHead branch if the HEAD matched and it was null. if (Head == null && repo.Head.Tip.Sha == commit.Hash) { Head = new DetachedHead { Tip = commit }; commit.IsHead = true; } commit.PostProcess(Commits, Branches); } // Calculate commit visual positions for each branch tree. foreach (var branch in Branches) { RepoUtil.IncrementCommitTreeVisualPositionsRecursively(branch.Tip); } // Fire notifications for the collections on the UI thread. Application.Current.Dispatcher.Invoke( DispatcherPriority.Normal, (Action)(() => { Commits.EnableNotifications(true); Branches.EnableNotifications(true); var tabControl = UIHelper.FindChild <TabControl>(Application.Current.MainWindow, "RepositoryTabs"); var changesetHistory = UIHelper.FindChild <ChangesetHistory>(tabControl); if (changesetHistory != null) { changesetHistory.RedrawGraph(); } }) ); if (dispose) { repo.Dispose(); } }