Exemple #1
0
        private void OnEditorUpdateInternal()
        {
            //Only initialize if the editor Window is focused
            if (HasFocus && initilized == null && gitManager.Repository != null)
            {
                var gitManagerStatus = gitManager.GetCachedStatus();
                if (gitManagerStatus != null)
                {
                    cachedStatus = gitManagerStatus;
                    initilized   = true;
                    if (!gitManager.IsValidRepo)
                    {
                        return;
                    }
                    OnInitialize();
                    OnGitManagerUpdateRepositoryInternal(gitManagerStatus, null);
                    //simulate repository loading for first initialization
                    OnRepositoryLoad(gitManager.Repository);
                    Repaint();
                }
            }

            if (HasFocus)
            {
                OnEditorUpdate();
            }
        }
Exemple #2
0
 public void IssueUpdateRepository(GitRepoStatus repoStatus, string[] paths)
 {
     if (UpdateRepository != null)
     {
         UpdateRepository.Invoke(repoStatus, paths);
     }
 }
Exemple #3
0
        private void CreateStatusListInternal(GitRepoStatus status, string[] paths, bool threaded)
        {
            if (status == null)
            {
                logger.Log(LogType.Assert, "Trying to create status list from empty status");
                return;
            }
            try
            {
                var newStatusList = new DiffWindowStatusList(gitSettings, gitManager, lfsHelper);

                if (paths == null || paths.Length <= 0)
                {
                    lock (diffWindowStatusList.LockObj)
                    {
                        lock (status.LockObj)
                        {
                            foreach (var entry in status.Where(e => settings.showFileStatusTypeFilter.IsFlagSet(e.Status)))
                            {
                                newStatusList.Add(entry, null);
                            }
                            newStatusList.Sort(sorter);
                            diffWindowStatusList = newStatusList;
                        }
                    }
                }
                else
                {
                    lock (diffWindowStatusList.LockObj)
                    {
                        newStatusList.Copy(diffWindowStatusList);
                        newStatusList.RemoveRange(paths);
                        List <GitAsyncOperation> operations = new List <GitAsyncOperation>();
                        foreach (var path in paths)
                        {
                            operations.Add(asyncManager.QueueWorkerWithLock((p) =>
                            {
                                GitStatusEntry entry;
                                if (status.Get(p, out entry) && settings.showFileStatusTypeFilter.IsFlagSet(entry.Status))
                                {
                                    newStatusList.Add(entry, sorter);
                                }
                            }, path, newStatusList.LockObj, threaded));
                        }
                        while (operations.Any(o => !o.IsDone))
                        {
                            //spin wait
                        }
                        diffWindowStatusList = newStatusList;
                    }
                }

                //statusList.Sort();
            }
            catch (Exception e)
            {
                logger.LogException(e);
            }
        }
Exemple #4
0
 protected virtual void OnLostFocus()
 {
     //the window is docked and has become hidden reset the initialization
     if (!HasFocus)
     {
         initilized   = null;
         cachedStatus = null;
     }
 }
 public override void OnGitUpdate(GitRepoStatus status, string[] paths)
 {
     base.OnGitUpdate(status, paths);
     if (gitManager.Repository == null)
     {
         return;
     }
     UpdateRemotes();
 }
Exemple #6
0
 protected override void OnGitUpdate(GitRepoStatus status, string[] paths)
 {
     if (GitManager.Repository == null)
     {
         return;
     }
     UpdateRemotes();
     UpdateBranches();
 }
Exemple #7
0
 private void UpdateStatusTreeThreaded(GitRepoStatus status)
 {
     asyncManager.QueueWorkerWithLock(() =>
     {
         lock (status.LockObj)
         {
             UpdateStatusTree(status, true);
         }
     }, statusTreeLock, true);
 }
 private void OnGitManagerUpdateInternal(GitRepoStatus status, string[] paths)
 {
     //only update the window if it is initialized. That means opened and visible.
     //the editor window will initialize itself once it's focused
     if (!initilized || !gitManager.IsValidRepo)
     {
         return;
     }
     OnGitUpdate(status, paths);
 }
Exemple #9
0
 protected override void OnGitUpdate(GitRepoStatus status, string[] paths)
 {
     if (gitManager.Threading.IsFlagSet(GitSettingsJson.ThreadingType.StatusListGui))
     {
         CreateStatusListThreaded(status, paths);
     }
     else
     {
         CreateStatusList(status, paths);
     }
 }
 private void UpdateStatusTree(GitRepoStatus status, bool threaded = false)
 {
     try
     {
         var newStatusTree = new StatusTreeClass(gitSettings, status);
         statusTree = newStatusTree;
         gitManager.ExecuteAction(RepaintProjectWidnow, threaded);
     }
     catch (Exception e)
     {
         Debug.LogException(e);
     }
 }
Exemple #11
0
        private void OnGitManagerUpdateInternal(GitRepoStatus status, string[] paths)
        {
            titleContent.image = GitManager.GetGitStatusIcon();

            //only update the window if it is initialized. That means opened and visible.
            //the editor window will initialize itself once it's focused
            if (initilized == null || !GitManager.IsValidRepo)
            {
                return;
            }
            OnGitUpdate(status, paths);
            Repaint();
        }
Exemple #12
0
 private static void RebuildStatus(string[] paths)
 {
     if (paths != null && paths.Length > 0 && status != null)
     {
         foreach (var path in paths)
         {
             status.Update(path, repository.RetrieveStatus(path));
         }
     }
     else
     {
         status = new GitRepoStatus(repository.RetrieveStatus());
     }
 }
Exemple #13
0
 private void StartUpdateChaches(GitRepoStatus status)
 {
     if (gitManager.Threading.IsFlagSet(GitSettingsJson.ThreadingType.CommitListGui))
     {
         loadingCommits = asyncManager.QueueWorkerWithLock(UpdateChaches, status, "Loading Commits", (o) =>
         {
             OnCachesUpdated();
         }, commitCachesLock);
     }
     else
     {
         UpdateChaches(status);
         OnCachesUpdated();
     }
 }
Exemple #14
0
 private void OnEnable()
 {
     if (repositoryStatus == null)
     {
         repositoryStatus = new GitRepoStatus();
     }
     if (dirtyFilesQueue == null)
     {
         dirtyFilesQueue = new List <string>();
     }
     if (logEntries == null)
     {
         logEntries = new List <GitLog.LogEntry>();
     }
 }
 private void OnUpdateRepository(GitRepoStatus status, string[] paths)
 {
     if (gitSettings.Threading.IsFlagSet(GitSettingsJson.ThreadingType.StatusList))
     {
         gitManager.ActionQueue.Enqueue(() =>
         {
             UpdateStatusTreeThreaded(status);
         });
     }
     else
     {
         GitProfilerProxy.BeginSample("Git Project Window status tree building");
         UpdateStatusTree(status);
         GitProfilerProxy.EndSample();
     }
 }
Exemple #16
0
 private static void RebuildStatus(string[] paths)
 {
     if (paths != null && paths.Length > 0 && status != null)
     {
         foreach (var path in paths)
         {
             status.Update(path, repository.RetrieveStatus(path));
         }
     }
     else
     {
         var options = GetStatusOptions();
         var s       = repository.RetrieveStatus(options);
         status = new GitRepoStatus(s);
     }
 }
Exemple #17
0
 private static void UpdateStatusTreeThreaded(object statusObj)
 {
     Monitor.Enter(statusTreeLock);
     try
     {
         GitRepoStatus status = (GitRepoStatus)statusObj;
         statusTree = new StatusTreeClass(status);
         actionQueue.Enqueue(RepaintProjectWidnow);
     }
     catch (Exception e)
     {
         Debug.LogException(e);
     }
     finally
     {
         Monitor.Exit(statusTreeLock);
     }
 }
Exemple #18
0
        private void UpdateChachesThreaded(object statusObj)
        {
            Monitor.Enter(commitCachesLock);
            try
            {
                GitRepoStatus status = (GitRepoStatus)statusObj;

                //update all branches
                cachedBranches = GitManager.Repository.Branches.Select(b => new BranchInfo(b)).ToArray();

                //update selected branch
                UpdateSelectedBranch();

                int commitCount = 0;
                if (selectedBranch != null)
                {
                    //update commits and limit them depending on settings
                    var loadedBranch = selectedBranch.LoadBranch();
                    if (loadedBranch != null && loadedBranch.Commits != null)
                    {
                        IEnumerable <Commit> commits = GitManager.Settings.MaxCommits >= 0 ? loadedBranch.Commits.Take(GitManager.Settings.MaxCommits) : loadedBranch.Commits;
                        if (commits != null)
                        {
                            cachedCommits = commits.Take(GitManager.Settings.MaxCommits).Select(c => new CommitInfo(c, cachedBranches.Where(b => b.Tip.Id == c.Id).ToArray())).ToArray();
                            commitCount   = cachedCommits.Length;
                        }
                    }
                }

                commitRects  = new Rect[commitCount];
                hasConflicts = status.Any(s => s.Status == FileStatus.Conflicted);
                GitManager.ActionQueue.Enqueue(UpdateGitStatusIcon);
                GitManager.ActionQueue.Enqueue(Repaint);
            }
            catch (Exception e)
            {
                Debug.LogException(e);
            }
            finally
            {
                Monitor.Exit(commitCachesLock);
            }
        }
Exemple #19
0
        private void UpdateStatusTree(GitRepoStatus status, bool threaded = false)
        {
            try
            {
                var subModules = status.SubModuleEntries;
                if (gitManager.InSubModule)
                {
                    subModules = subModules.Concat(new [] { new GitStatusSubModuleEntry(gitSettings.ActiveSubModule) });
                }

                var newStatusTree = injectionHelper.CreateInstance <StatusTreeClass>(cullNonAssetPaths);
                newStatusTree.Build(status, subModules);
                statusTree = newStatusTree;
                gitManager.ExecuteAction(RepaintProjectWidnow, threaded);
            }
            catch (Exception e)
            {
                logger.LogException(e);
            }
        }
Exemple #20
0
        private void CreateStatusListThreaded(GitRepoStatus status, string[] paths)
        {
            if (statusListUpdateOperation != null && !statusListUpdateOperation.IsDone)
            {
                needsAsyncStatusListUpdate = true;
                if (paths != null)
                {
                    foreach (var path in paths)
                    {
                        pathsToBeUpdated.Add(path);
                    }
                }
            }
            else
            {
                statusListUpdateOperation = asyncManager.QueueWorkerWithLock(() =>
                {
                    CreateStatusListInternal(status, paths, true);
                },
                                                                             (o) =>
                {
                    updatingPaths.Clear();
                    Repaint();
                }, statusListLock, true);

                if (paths != null)
                {
                    foreach (var path in paths)
                    {
                        updatingPaths.Add(path);
                    }
                }

                foreach (var path in pathsToBeUpdated)
                {
                    updatingPaths.Add(path);
                }
                pathsToBeUpdated.Clear();
            }
        }
Exemple #21
0
        private void UpdateChaches(GitRepoStatus status)
        {
            try
            {
                //update all branches
                cachedBranches = gitManager.Repository.Branches.Select(b => new BranchInfo(b)).ToArray();

                //update selected branch
                SetSelectedBranch(selectedBranchName);

                int          commitCount      = 0;
                CommitInfo[] newCachedCommits = null;
                if (selectedBranch != null)
                {
                    //update commits and limit them depending on settings
                    var loadedBranch = selectedBranch.LoadBranch(gitManager);
                    if (loadedBranch != null && loadedBranch.Commits != null)
                    {
                        Commit[] commits = loadedBranch.Commits.Take(maxCommitsCount).ToArray();
                        newCachedCommits = new CommitInfo[commits.Length];
                        for (int i = 0; i < commits.Length; i++)
                        {
                            newCachedCommits[i] = new CommitInfo(commits[i], cachedBranches.Where(b => b.Tip.Id == commits[i].Id).ToArray());
                        }
                        commitCount = newCachedCommits.Length;
                    }
                }

                commitRects   = new Rect[commitCount];
                cachedCommits = newCachedCommits;
                hasConflicts  = status.Any(s => s.Status == FileStatus.Conflicted);
            }
            catch (Exception e)
            {
                Debug.LogException(e);
            }
        }
Exemple #22
0
 private void RepositoryUpdate(GitRepoStatus status, string[] paths)
 {
     updateRepositoryCalled++;
 }
Exemple #23
0
 protected override void OnGitUpdate(GitRepoStatus status, string[] path)
 {
     Repaint();
     StartUpdateChaches(status);
 }
Exemple #24
0
 public virtual void OnGitUpdate(GitRepoStatus status, string[] paths)
 {
 }
Exemple #25
0
 protected abstract void OnGitUpdate(GitRepoStatus status, string[] paths);
 protected override void OnGitUpdate(GitRepoStatus status, string[] paths)
 {
 }
Exemple #27
0
 private void CreateStatusList(GitRepoStatus param, string[] paths)
 {
     CreateStatusListInternal(param, paths, false);
     Repaint();
 }
Exemple #28
0
 private void OnUpdateRepository(GitRepoStatus status, string[] paths)
 {
     UpdateInitilized();
 }
Exemple #29
0
 private void CreateStatusList(GitRepoStatus param)
 {
     CreateStatusListInternal(param, null, false);
     Repaint();
 }
Exemple #30
0
 protected override void OnGitUpdate(GitRepoStatus status, string[] path)
 {
     ThreadPool.QueueUserWorkItem(UpdateChachesThreaded, status);
 }