コード例 #1
0
            static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)
            {
                if (EditorPrefs.GetBool("UniGit_DisablePostprocess"))
                {
                    return;
                }
                if (GitManager.Repository != null)
                {
                    if (GitManager.Settings != null && GitManager.Settings.AutoStage)
                    {
                        if (importedAssets != null && importedAssets.Length > 0)
                        {
                            string[] importedAssetsToStage = importedAssets.Where(a => !GitManager.IsEmptyFolder(a)).SelectMany(g => GitManager.GetPathWithMeta(g)).Where(g => GitManager.CanStage(GitManager.Repository.RetrieveStatus(g))).ToArray();
                            if (importedAssetsToStage.Length > 0)
                            {
                                GitManager.Repository.Stage(importedAssetsToStage);
                                GitManager.MarkDirty(importedAssetsToStage);
                            }
                        }

                        if (movedAssets != null && movedAssets.Length > 0)
                        {
                            string[] movedAssetsFinal = movedAssets.Where(a => !GitManager.IsEmptyFolder(a)).SelectMany(g => GitManager.GetPathWithMeta(g)).Where(g => GitManager.CanStage(GitManager.Repository.RetrieveStatus(g))).ToArray();
                            if (movedAssetsFinal.Length > 0)
                            {
                                GitManager.Repository.Stage(movedAssetsFinal);
                                GitManager.MarkDirty(movedAssetsFinal);
                            }
                        }
                    }

                    //automatic deletion of previously moved asset is necessary even if AutoStage is off
                    if (movedFromAssetPaths != null && movedFromAssetPaths.Length > 0)
                    {
                        string[] movedFromAssetPathsFinal = movedFromAssetPaths.SelectMany(g => GitManager.GetPathWithMeta(g)).Where(g => GitManager.CanUnstage(GitManager.Repository.RetrieveStatus(g))).ToArray();
                        if (movedFromAssetPathsFinal.Length > 0)
                        {
                            GitManager.Repository.Unstage(movedFromAssetPathsFinal);
                            GitManager.MarkDirty(movedFromAssetPathsFinal);
                        }
                    }

                    //automatic deletion is necessary even if AutoStage is off
                    if (deletedAssets != null && deletedAssets.Length > 0)
                    {
                        string[] deletedAssetsFinal = deletedAssets.SelectMany(g => GitManager.GetPathWithMeta(g)).Where(g => GitManager.CanUnstage(GitManager.Repository.RetrieveStatus(g))).ToArray();
                        if (deletedAssetsFinal.Length > 0)
                        {
                            GitManager.Repository.Unstage(deletedAssetsFinal);
                            GitManager.MarkDirty(deletedAssetsFinal);
                        }
                    }
                }
            }
コード例 #2
0
 private static string[] OnWillSaveAssets(string[] paths)
 {
     if (GitManager.Settings != null && GitManager.Settings.AutoStage)
     {
         string[] pathsFinal = paths.SelectMany(g => GitManager.GetPathWithMeta(g)).Where(g => GitManager.CanStage(GitManager.Repository.RetrieveStatus(g))).ToArray();
         if (pathsFinal.Length > 0)
         {
             GitManager.Repository.Stage(pathsFinal);
         }
     }
     GitManager.Update();
     return(paths);
 }
コード例 #3
0
 private static string[] OnWillSaveAssets(string[] paths)
 {
     if (EditorPrefs.GetBool("UniGit_DisablePostprocess"))
     {
         return(paths);
     }
     if (GitManager.Settings != null && GitManager.Settings.AutoStage && GitManager.Repository != null && paths != null && paths.Length > 0)
     {
         string[] pathsFinal = paths.SelectMany(g => GitManager.GetPathWithMeta(g)).Where(g => GitManager.CanStage(GitManager.Repository.RetrieveStatus(g))).ToArray();
         if (pathsFinal.Length > 0)
         {
             GitManager.Repository.Stage(pathsFinal);
             GitManager.MarkDirty(pathsFinal);
         }
     }
     return(paths);
 }
コード例 #4
0
        static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)
        {
            if (GitManager.Settings != null && GitManager.Settings.AutoStage)
            {
                if (importedAssets.Length > 0)
                {
                    string[] importedAssetsFinal = importedAssets.SelectMany(g => GitManager.GetPathWithMeta(g)).Where(g => GitManager.CanStage(GitManager.Repository.RetrieveStatus(g))).ToArray();
                    if (importedAssetsFinal.Length > 0)
                    {
                        GitManager.Repository.Stage(importedAssetsFinal);
                    }
                }

                if (movedAssets.Length > 0)
                {
                    string[] movedAssetsFinal = movedAssets.SelectMany(g => GitManager.GetPathWithMeta(g)).Where(g => GitManager.CanStage(GitManager.Repository.RetrieveStatus(g))).ToArray();
                    if (movedAssetsFinal.Length > 0)
                    {
                        GitManager.Repository.Stage(movedAssetsFinal);
                    }
                }
            }
            GitManager.Update();
        }
コード例 #5
0
 private void AddSelectedCallback()
 {
     GitManager.Repository.Stage(statusList.Where(e => e.Selected).SelectMany(e => GitManager.GetPathWithMeta(e.Path)));
     GitManager.Update();
 }
コード例 #6
0
 private void RevertSelectedCallback()
 {
     GitManager.Repository.CheckoutPaths("HEAD", statusList.Where(e => e.Selected).SelectMany(e => GitManager.GetPathWithMeta(e.Path)), new CheckoutOptions()
     {
         CheckoutModifiers = CheckoutModifiers.Force, OnCheckoutProgress = OnRevertProgress
     });
     EditorUtility.ClearProgressBar();
 }
コード例 #7
0
        private void DoDiffStatusContex(FileStatus fileStatus, GenericMenu menu)
        {
            menu.AddItem(new GUIContent("Select All"), false, SelectFilteredCallback, fileStatus);
            if (GitManager.CanStage(fileStatus))
            {
                menu.AddItem(new GUIContent("Add All"), false, () =>
                {
                    GitManager.Repository.Stage(statusList.Where(s => s.State.IsFlagSet(fileStatus)).SelectMany(s => GitManager.GetPathWithMeta(s.Path)));
                    GitManager.Update();
                });
            }
            else
            {
                menu.AddDisabledItem(new GUIContent("Add All"));
            }

            if (GitManager.CanUnstage(fileStatus))
            {
                menu.AddItem(new GUIContent("Remove All"), false, () =>
                {
                    GitManager.Repository.Unstage(statusList.Where(s => s.State.IsFlagSet(fileStatus)).SelectMany(s => GitManager.GetPathWithMeta(s.Path)));
                    GitManager.Update();
                });
            }
            else
            {
                menu.AddDisabledItem(new GUIContent("Remove All"));
            }
        }
コード例 #8
0
        private static void Revet()
        {
            var paths = Selection.assetGUIDs.Select(e => AssetDatabase.GUIDToAssetPath(e)).SelectMany(e => GitManager.GetPathWithMeta(e)).ToArray();

            if (GitExternalManager.TakeRevert(paths))
            {
                AssetDatabase.Refresh();
                GitManager.MarkDirty(paths);
                return;
            }

            GitManager.Repository.CheckoutPaths("HEAD", paths, new CheckoutOptions()
            {
                CheckoutModifiers = CheckoutModifiers.Force, OnCheckoutProgress = OnRevertProgress
            });
            EditorUtility.ClearProgressBar();
            AssetDatabase.Refresh();
            GitManager.MarkDirty(paths);
        }
コード例 #9
0
 private static bool RemoveSelectedValidate()
 {
     string[] paths = Selection.assetGUIDs.Select(g => string.IsNullOrEmpty(Path.GetExtension(AssetDatabase.GUIDToAssetPath(g))) ? AssetDatabase.GUIDToAssetPath(g) + ".meta" : AssetDatabase.GUIDToAssetPath(g)).SelectMany(g => GitManager.GetPathWithMeta(g)).ToArray();
     return(paths.Any(g => GitManager.CanUnstage(GitManager.Repository.RetrieveStatus(g))));
 }
コード例 #10
0
 private static void RemoveSelected()
 {
     string[] paths = Selection.assetGUIDs.Select(g => AssetDatabase.GUIDToAssetPath(g)).SelectMany(g => GitManager.GetPathWithMeta(g)).ToArray();
     GitManager.Repository.Unstage(paths);
     GitManager.MarkDirty(paths);
 }
コード例 #11
0
 private static bool RevetValidate()
 {
     return(Selection.assetGUIDs.Select(e => AssetDatabase.GUIDToAssetPath(e)).SelectMany(e => GitManager.GetPathWithMeta(e)).Where(e => File.Exists(e)).Select(e => GitManager.Repository.RetrieveStatus(e)).Any(e => GitManager.CanStage(e) | GitManager.CanUnstage(e)));
 }
コード例 #12
0
        internal void Build(FileStatus fileStatus, GenericMenu menu, GitDiffWindow window)
        {
            menu.AddItem(new GUIContent("Select All"), false, () => SelectFilteredCallback(fileStatus, window));
            if (GitManager.CanStage(fileStatus))
            {
                menu.AddItem(new GUIContent("Add All"), false, () =>
                {
                    string[] paths = window.GetStatusList().Where(s => s.State.IsFlagSet(fileStatus)).SelectMany(s => gitManager.GetPathWithMeta(s.LocalPath)).ToArray();
                    if (gitManager.Threading.IsFlagSet(GitSettingsJson.ThreadingType.Stage))
                    {
                        gitManager.AsyncStage(paths).onComplete += (o) => { window.Repaint(); };
                    }
                    else
                    {
                        GitCommands.Stage(gitManager.Repository, paths);
                        gitManager.MarkDirtyAuto(paths);
                    }
                    window.Repaint();
                });
            }
            else
            {
                menu.AddDisabledItem(new GUIContent("Add All"));
            }

            if (GitManager.CanUnstage(fileStatus))
            {
                menu.AddItem(new GUIContent("Remove All"), false, () =>
                {
                    string[] paths = window.GetStatusList().Where(s => s.State.IsFlagSet(fileStatus)).SelectMany(s => gitManager.GetPathWithMeta(s.LocalPath)).ToArray();
                    if (gitManager.Threading.IsFlagSet(GitSettingsJson.ThreadingType.Unstage))
                    {
                        gitManager.AsyncUnstage(paths).onComplete += (o) => { window.Repaint(); };
                    }
                    else
                    {
                        GitCommands.Unstage(gitManager.Repository, paths);
                        gitManager.MarkDirtyAuto(paths);
                    }
                    window.Repaint();
                });
            }
            else
            {
                menu.AddDisabledItem(new GUIContent("Remove All"));
            }
        }
コード例 #13
0
        public int Compare(StatusListEntry x, StatusListEntry y)
        {
            int stateCompare = window.IsGrouping() ? GetPriority(x.State).CompareTo(GetPriority(y.State)) : 0;

            if (stateCompare == 0)
            {
                var settings = window.GitDiffSettings;

                if (settings.sortDir == GitDiffWindow.SortDir.Descending)
                {
                    var oldLeft = x;
                    x = y;
                    y = oldLeft;
                }

                if (settings.unstagedChangesPriority)
                {
                    bool canStageX   = GitManager.CanStage(x.State);
                    bool canUnstageX = GitManager.CanUnstage(x.State);
                    bool canStageY   = GitManager.CanStage(y.State);
                    bool canUnstageY = GitManager.CanUnstage(y.State);

                    //prioritize upsaged changes that are pending
                    if ((canStageX && canUnstageX) && !(canStageY && canUnstageY))
                    {
                        return(-1);
                    }
                    if (!(canStageX && canUnstageX) && (canStageY && canUnstageY))
                    {
                        return(1);
                    }
                }

                switch (settings.sortType)
                {
                case GitDiffWindow.SortType.Name:
                    stateCompare = string.Compare(x.Name, y.Name, StringComparison.InvariantCultureIgnoreCase);
                    break;

                case GitDiffWindow.SortType.Path:
                    stateCompare = string.Compare(x.LocalPath, y.LocalPath, StringComparison.InvariantCultureIgnoreCase);
                    break;

                case GitDiffWindow.SortType.ModificationDate:
                    //todo cache modification dates
                    DateTime modifedTimeLeft  = GetClosest(gitManager.GetPathWithMeta(x.LocalPath).Select(p => File.GetLastWriteTime(UniGitPathHelper.Combine(gitManager.GetCurrentRepoPath(), p))));
                    DateTime modifedRightTime = GetClosest(gitManager.GetPathWithMeta(x.LocalPath).Select(p => File.GetLastWriteTime(UniGitPathHelper.Combine(gitManager.GetCurrentRepoPath(), p))));
                    stateCompare = DateTime.Compare(modifedRightTime, modifedTimeLeft);
                    break;

                case GitDiffWindow.SortType.CreationDate:
                    //todo cache creation dates
                    DateTime createdTimeLeft  = GetClosest(gitManager.GetPathWithMeta(x.LocalPath).Select(p => File.GetCreationTime(UniGitPathHelper.Combine(gitManager.GetCurrentRepoPath(), p))));
                    DateTime createdRightTime = GetClosest(gitManager.GetPathWithMeta(y.LocalPath).Select(p => File.GetCreationTime(UniGitPathHelper.Combine(gitManager.GetCurrentRepoPath(), p))));
                    stateCompare = DateTime.Compare(createdRightTime, createdTimeLeft);
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
            if (stateCompare == 0)
            {
                stateCompare = String.Compare(x.LocalPath, y.LocalPath, StringComparison.Ordinal);
            }
            return(stateCompare);
        }
コード例 #14
0
 private static void Revet()
 {
     GitManager.Repository.CheckoutPaths("HEAD", Selection.assetGUIDs.Select(e => AssetDatabase.GUIDToAssetPath(e)).SelectMany(e => GitManager.GetPathWithMeta(e)), new CheckoutOptions()
     {
         CheckoutModifiers = CheckoutModifiers.Force, OnCheckoutProgress = OnRevertProgress
     });
     EditorUtility.ClearProgressBar();
     GitManager.Update();
     AssetDatabase.Refresh();
 }
コード例 #15
0
 private static void RemoveSelected()
 {
     GitManager.Repository.Unstage(Selection.assetGUIDs.Select(g => AssetDatabase.GUIDToAssetPath(g)).SelectMany(g => GitManager.GetPathWithMeta(g)));
     GitManager.Update();
 }