From 124df94cacd1252942129ab57cce0e67ae4e1219 Mon Sep 17 00:00:00 2001 From: Simeon Radivoev Date: Wed, 31 Jan 2018 15:18:19 +0200 Subject: [PATCH] GitInitializer now handles repository initialization --- Assets/Editor/Tests/GitDiffWindowTests.cs | 4 +- Assets/Editor/Tests/GitManagerTests.cs | 2 +- Assets/Editor/Tests/InitializationTests.cs | 7 +- Assets/Editor/Tests/TestRepoFixture.cs | 3 +- .../Plugins/UniGit/Editor/GitAutoFetcher.cs | 7 +- .../UniGit/Editor/GitConflictsHandler.cs | 8 +- Assets/Plugins/UniGit/Editor/GitDiffWindow.cs | 32 +++---- .../Plugins/UniGit/Editor/GitHistoryWindow.cs | 16 ++-- .../Plugins/UniGit/Editor/GitInitializer.cs | 85 +++++++++++++++++++ .../UniGit/Editor/GitInitializer.cs.meta | 3 + Assets/Plugins/UniGit/Editor/GitManager.cs | 78 +++-------------- .../UniGit/Editor/GitProjectContextMenus.cs | 17 ++-- .../UniGit/Editor/GitSettingsWindow.cs | 8 +- Assets/Plugins/UniGit/Editor/GitUnityMenu.cs | 12 +-- .../UniGit/Editor/GitUpdatableWindow.cs | 12 +-- Assets/Plugins/UniGit/Editor/GitWizardBase.cs | 9 +- .../Editor/Settings/GitBranchesSettingsTab.cs | 5 +- .../Settings/GitExternalsSettingsTab.cs | 5 +- .../Editor/Settings/GitGeneralSettingsTab.cs | 5 +- .../Editor/Settings/GitLFSSettingsTab.cs | 5 +- .../Editor/Settings/GitRemotesSettingsTab.cs | 9 +- .../Editor/Settings/GitSecuritySettingsTab.cs | 5 +- .../UniGit/Editor/Settings/GitSettingsTab.cs | 14 ++- Assets/Plugins/UniGit/Editor/UniGitLoader.cs | 44 +++++----- 24 files changed, 230 insertions(+), 165 deletions(-) create mode 100644 Assets/Plugins/UniGit/Editor/GitInitializer.cs create mode 100644 Assets/Plugins/UniGit/Editor/GitInitializer.cs.meta diff --git a/Assets/Editor/Tests/GitDiffWindowTests.cs b/Assets/Editor/Tests/GitDiffWindowTests.cs index dd35c82..c8fd753 100644 --- a/Assets/Editor/Tests/GitDiffWindowTests.cs +++ b/Assets/Editor/Tests/GitDiffWindowTests.cs @@ -49,7 +49,7 @@ public void OnCommit_CommitChangesWithFileCommitMessage() injectionHelper.GetInstance().ReadFromFile = true; const string commitText = "First Commit from File Commit Message"; - File.WriteAllText(gitManager.GitCommitMessageFilePath, commitText); + File.WriteAllText(injectionHelper.GetInstance().GitCommitMessageFilePath, commitText); diffWindow.Commit(); Assert.AreEqual(1,gitManager.Repository.Commits.Count()); Assert.AreEqual(commitText,gitManager.Repository.Commits.First().Message); @@ -62,7 +62,7 @@ public void OnOpen_ReadCommitFileContents() const string commitText = "Test Message"; diffWindow2.Focus(); - File.WriteAllText(gitManager.GitCommitMessageFilePath, commitText); + File.WriteAllText(injectionHelper.GetInstance().GitCommitMessageFilePath, commitText); diffWindow.Focus(); Assert.AreEqual(commitText, diffWindow.GitDiffSettings.commitMessageFromFile); } diff --git a/Assets/Editor/Tests/GitManagerTests.cs b/Assets/Editor/Tests/GitManagerTests.cs index 32a8052..25e2b1d 100644 --- a/Assets/Editor/Tests/GitManagerTests.cs +++ b/Assets/Editor/Tests/GitManagerTests.cs @@ -39,7 +39,7 @@ public void RepositoryHandlesLockedFileWhileRetrivingStatus() [UnityTest] public IEnumerator RepositoryHandlesLockedFileWhenWithIgnoreStatus() { - File.AppendAllText(gitManager.GitIgnoreFilePath, "testFile.txt"); + File.AppendAllText(injectionHelper.GetInstance().GitIgnoreFilePath, "testFile.txt"); string lockedFilePathName = "testFile.txt"; string lockedFilePath = UniGitPath.Combine(gitManager.RepoPath, lockedFilePathName); using (var lockFileStream = File.CreateText(lockedFilePath)) diff --git a/Assets/Editor/Tests/InitializationTests.cs b/Assets/Editor/Tests/InitializationTests.cs index c184224..5524557 100644 --- a/Assets/Editor/Tests/InitializationTests.cs +++ b/Assets/Editor/Tests/InitializationTests.cs @@ -2,6 +2,7 @@ using System.IO; using LibGit2Sharp; using NUnit.Framework; +using UniGit; using UniGit.Utils; using UnityEditor; @@ -17,14 +18,14 @@ public void InitilizeValidRepository_RepositoryInitilized() [Test] public void InitilizeUniGitSettingsFolder_SettingsFolderCreated() { - Assert.IsTrue(Directory.Exists(gitManager.GitSettingsFolderPath)); + Assert.IsTrue(Directory.Exists(injectionHelper.GetInstance().GitSettingsFolderPath)); } [Test] public void InitilizeGitIgnore_GitIgnoreInitilized() { - Assert.IsTrue(File.Exists(gitManager.GitIgnoreFilePath)); - Assert.AreEqual(File.ReadAllText(gitManager.GitIgnoreFilePath),GitIgnoreTemplate.Template); + Assert.IsTrue(File.Exists(injectionHelper.GetInstance().GitIgnoreFilePath)); + Assert.AreEqual(File.ReadAllText(injectionHelper.GetInstance().GitIgnoreFilePath),GitIgnoreTemplate.Template); } /*[Test] diff --git a/Assets/Editor/Tests/TestRepoFixture.cs b/Assets/Editor/Tests/TestRepoFixture.cs index d2c52e3..4992582 100644 --- a/Assets/Editor/Tests/TestRepoFixture.cs +++ b/Assets/Editor/Tests/TestRepoFixture.cs @@ -31,9 +31,10 @@ public void Setup() injectionHelper.Bind().To(); injectionHelper.Bind().FromInstance(Debug.unityLogger); injectionHelper.Bind(); + injectionHelper.Bind(); gitManager = injectionHelper.GetInstance(); - gitManager.InitializeRepository(); + injectionHelper.GetInstance().InitializeRepository(); gitCallbacks = injectionHelper.GetInstance(); signature = new Signature("Test", "Test@Test.com", DateTime.Now); data = injectionHelper.GetInstance(); diff --git a/Assets/Plugins/UniGit/Editor/GitAutoFetcher.cs b/Assets/Plugins/UniGit/Editor/GitAutoFetcher.cs index b283882..e5373ec 100644 --- a/Assets/Plugins/UniGit/Editor/GitAutoFetcher.cs +++ b/Assets/Plugins/UniGit/Editor/GitAutoFetcher.cs @@ -14,6 +14,7 @@ public class GitAutoFetcher : IDisposable private readonly GitCallbacks gitCallbacks; private readonly GitSettingsJson gitSettings; private readonly ILogger logger; + private readonly GitInitializer initializer; private bool needsFetch; [UniGitInject] @@ -21,13 +22,15 @@ public GitAutoFetcher(GitManager gitManager, GitCredentialsManager credentialsManager, GitCallbacks gitCallbacks, GitSettingsJson gitSettings, - ILogger logger) + ILogger logger, + GitInitializer initializer) { this.gitManager = gitManager; this.credentialsManager = credentialsManager; this.gitCallbacks = gitCallbacks; this.logger = logger; this.gitSettings = gitSettings; + this.initializer = initializer; gitCallbacks.EditorUpdate += OnEditorUpdate; needsFetch = !EditorApplication.isPlayingOrWillChangePlaymode && !EditorApplication.isCompiling && !EditorApplication.isUpdating; } @@ -50,7 +53,7 @@ private void OnEditorUpdate() private bool AutoFetchChanges() { - if (gitManager.Repository == null || !gitManager.IsValidRepo || !gitSettings.AutoFetch) return false; + if (gitManager.Repository == null || !initializer.IsValidRepo || !gitSettings.AutoFetch) return false; Remote remote = gitManager.Repository.Network.Remotes.FirstOrDefault(); if (remote == null) return false; GitProfilerProxy.BeginSample("Git automatic fetching"); diff --git a/Assets/Plugins/UniGit/Editor/GitConflictsHandler.cs b/Assets/Plugins/UniGit/Editor/GitConflictsHandler.cs index 5f87e76..2b9e89b 100644 --- a/Assets/Plugins/UniGit/Editor/GitConflictsHandler.cs +++ b/Assets/Plugins/UniGit/Editor/GitConflictsHandler.cs @@ -6,23 +6,25 @@ public class GitConflictsHandler { private readonly GitManager gitManager; private readonly GitExternalManager externalManager; + private readonly GitInitializer initializer; - public GitConflictsHandler(GitManager gitManager,GitExternalManager externalManager) + public GitConflictsHandler(GitManager gitManager,GitExternalManager externalManager,GitInitializer initializer) { this.gitManager = gitManager; this.externalManager = externalManager; + this.initializer = initializer; } public bool CanResolveConflictsWithTool(string path) { - if (!gitManager.IsValidRepo) return false; + if (!initializer.IsValidRepo) return false; var conflict = gitManager.Repository.Index.Conflicts[path]; return !gitManager.Repository.Lookup(conflict.Ours.Id).IsBinary; } public void ResolveConflicts(string path, MergeFileFavor favor) { - if(!gitManager.IsValidRepo) return; + if(!initializer.IsValidRepo) return; if (favor == MergeFileFavor.Normal) { diff --git a/Assets/Plugins/UniGit/Editor/GitDiffWindow.cs b/Assets/Plugins/UniGit/Editor/GitDiffWindow.cs index b964452..3c29a39 100644 --- a/Assets/Plugins/UniGit/Editor/GitDiffWindow.cs +++ b/Assets/Plugins/UniGit/Editor/GitDiffWindow.cs @@ -125,7 +125,7 @@ private void Construct(GitExternalManager externalManager, this.asyncManager = asyncManager; this.gitOverlay = gitOverlay; this.injectionHelper = injectionHelper; - conflictsHandler = new GitConflictsHandler(gitManager, externalManager); + conflictsHandler = new GitConflictsHandler(gitManager, externalManager,initializer); } protected override void Subscribe(GitCallbacks callbacks) @@ -326,9 +326,9 @@ protected override void OnFocus() if (gitManager != null && gitSettings != null && gitSettings.ReadFromFile) { - if (File.Exists(gitManager.GitCommitMessageFilePath)) + if (File.Exists(initializer.GitCommitMessageFilePath)) { - var lastWriteTime = File.GetLastWriteTime(gitManager.GitCommitMessageFilePath); + var lastWriteTime = File.GetLastWriteTime(initializer.GitCommitMessageFilePath); if (lastWriteTime.CompareTo(settings.lastMessageUpdate) != 0) { settings.lastMessageUpdate = lastWriteTime; @@ -344,9 +344,9 @@ private void OnGUI() { CreateStyles(); - if (gitManager == null || !gitManager.IsValidRepo) + if (gitManager == null || !initializer.IsValidRepo) { - GitHistoryWindow.InvalidRepoGUI(gitManager); + GitHistoryWindow.InvalidRepoGUI(initializer); return; } @@ -482,7 +482,7 @@ private void BuildCommitMenu(GenericMenu commitMenu) commitMenu.AddSeparator(""); commitMenu.AddItem(new GUIContent("Commit Message/Clear"), false, ClearCommitMessage); commitMenu.AddItem(new GUIContent("Commit Message/Read from file"), gitSettings.ReadFromFile, ToggleReadFromFile); - if (File.Exists(gitManager.GitCommitMessageFilePath)) + if (File.Exists(initializer.GitCommitMessageFilePath)) { commitMenu.AddItem(new GUIContent("Commit Message/Open File"), false, OpenCommitMessageFile); } @@ -586,9 +586,9 @@ private void ToggleReadFromFile() private void OpenCommitMessageFile() { - if (File.Exists(gitManager.GitCommitMessageFilePath)) + if (File.Exists(initializer.GitCommitMessageFilePath)) { - Application.OpenURL(gitManager.GitCommitMessageFilePath); + Application.OpenURL(initializer.GitCommitMessageFilePath); } } @@ -1127,9 +1127,9 @@ private string GetStatusBuildingState() private void ReadCommitMessageFromFile() { - if (File.Exists(gitManager.GitCommitMessageFilePath)) + if (File.Exists(initializer.GitCommitMessageFilePath)) { - settings.commitMessageFromFile = File.ReadAllText(gitManager.GitCommitMessageFilePath); + settings.commitMessageFromFile = File.ReadAllText(initializer.GitCommitMessageFilePath); } else { @@ -1157,7 +1157,7 @@ private void SaveCommitMessageToFile() { try { - SaveCommitMessageToFile(gitManager, settings.commitMessageFromFile); + SaveCommitMessageToFile(initializer, settings.commitMessageFromFile); } catch (Exception e) { @@ -1168,17 +1168,17 @@ private void SaveCommitMessageToFile() } } - private static void SaveCommitMessageToFile(GitManager gitManager,string message) + private static void SaveCommitMessageToFile(GitInitializer initializer,string message) { try { - string settingsFolder = gitManager.GitSettingsFolderPath; + string settingsFolder = initializer.GitSettingsFolderPath; if (!Directory.Exists(settingsFolder)) { Directory.CreateDirectory(settingsFolder); } - File.WriteAllText(gitManager.GitCommitMessageFilePath, message); + File.WriteAllText(initializer.GitCommitMessageFilePath, message); } catch (Exception e) { @@ -1205,11 +1205,11 @@ public void SetCommitMessage(string commitMessage) SaveCommitMessage(); } - internal static void SetCommitMessage(GitManager gitManager,GitSettingsJson gitSettings,string commitMessage) + internal static void SetCommitMessage(GitInitializer initializer,GitManager gitManager,GitSettingsJson gitSettings,string commitMessage) { if (gitSettings.ReadFromFile) { - SaveCommitMessageToFile(gitManager, commitMessage); + SaveCommitMessageToFile(initializer, commitMessage); } gitManager.Prefs.SetString(CommitMessageKey, commitMessage); } diff --git a/Assets/Plugins/UniGit/Editor/GitHistoryWindow.cs b/Assets/Plugins/UniGit/Editor/GitHistoryWindow.cs index c4b5d08..32b0165 100644 --- a/Assets/Plugins/UniGit/Editor/GitHistoryWindow.cs +++ b/Assets/Plugins/UniGit/Editor/GitHistoryWindow.cs @@ -317,9 +317,9 @@ private void OnGUI() { CreateStyles(); - if (gitManager == null || !gitManager.IsValidRepo) + if (gitManager == null || !initializer.IsValidRepo) { - InvalidRepoGUI(gitManager); + InvalidRepoGUI(initializer); return; } @@ -420,7 +420,7 @@ private void DoToolbar(Rect rect, RepositoryInformation info) } } - GUI.enabled = gitManager.IsValidRepo; + GUI.enabled = initializer.IsValidRepo; btRect = new Rect(btRect.x + 64,btRect.y,64,btRect.height); if (GUI.Button(btRect, GitGUI.GetTempContent("Stash", gitOverlay.icons.stashIcon.image), EditorStyles.toolbarButton)) { @@ -943,9 +943,9 @@ public static string HashEmailForGravatar(string email) #endregion #region Invalid Repo GUI - internal static void InvalidRepoGUI(GitManager gitManager) + internal static void InvalidRepoGUI(GitInitializer initializer) { - if (gitManager == null) + if (initializer == null) { Rect initilizingRect = GUILayoutUtility.GetRect(GUIContent.none, GUIStyle.none, GUILayout.ExpandHeight(true), GUILayout.ExpandWidth(true)); GitGUI.DrawLoading(new Rect(initilizingRect.x, initilizingRect.y, initilizingRect.width, initilizingRect.height), GitGUI.GetTempContent("Initializing...")); @@ -968,20 +968,18 @@ internal static void InvalidRepoGUI(GitManager gitManager) GUILayout.FlexibleSpace(); EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); - GUI.enabled = gitManager != null; if (GUILayout.Button(GitGUI.GetTempContent("Create"), GitGUI.Styles.LargeButton, GUILayout.Height(32), GUILayout.Width(128))) { if (EditorUtility.DisplayDialog("Initialize Repository", "Are you sure you want to initialize a Repository for your project", "Yes", "Cancel")) { - if (gitManager != null && !gitManager.IsValidRepo) + if (!initializer.IsValidRepo) { - gitManager.InitializeRepositoryAndRecompile(); + initializer.InitializeRepositoryAndRecompile(); } GUIUtility.ExitGUI(); return; } } - GUI.enabled = true; GUILayout.FlexibleSpace(); EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); diff --git a/Assets/Plugins/UniGit/Editor/GitInitializer.cs b/Assets/Plugins/UniGit/Editor/GitInitializer.cs new file mode 100644 index 0000000..09d8fb3 --- /dev/null +++ b/Assets/Plugins/UniGit/Editor/GitInitializer.cs @@ -0,0 +1,85 @@ +using System.IO; +using System.Linq; +using LibGit2Sharp; +using UniGit.Utils; +using UnityEditor; +using UnityEngine; + +namespace UniGit +{ + public class GitInitializer + { + private readonly string repoPath; + private readonly string gitPath; + private readonly ILogger logger; + private readonly GitCallbacks callbacks; + + [UniGitInject] + public GitInitializer(string repoPath,ILogger logger,GitCallbacks callbacks) + { + this.repoPath = repoPath; + this.logger = logger; + this.callbacks = callbacks; + gitPath = UniGitPath.Combine(repoPath, ".git"); + } + + public void InitializeRepository() + { + Repository.Init(repoPath); + Directory.CreateDirectory(GitSettingsFolderPath); + string newGitIgnoreFile = GitIgnoreFilePath; + if (!File.Exists(newGitIgnoreFile)) + { + File.WriteAllText(newGitIgnoreFile, GitIgnoreTemplate.Template); + } + else + { + logger.Log(LogType.Log,"Git Ignore file already present"); + } + + logger.Log(LogType.Log,"Repository Initialized"); + //Initialize(); + } + + internal void InitializeRepositoryAndRecompile() + { + InitializeRepository(); + callbacks.IssueAssetDatabaseRefresh(); + callbacks.IssueSaveDatabaseRefresh(); + callbacks.IssueRepositoryCreate(); + //Update(true); + } + + internal static void Recompile() + { + var importer = PluginImporter.GetAllImporters().FirstOrDefault(i => i.assetPath.EndsWith("UniGitResources.dll")); + if (importer == null) + { + Debug.LogError("Could not find LibGit2Sharp.dll. You will have to close and open Unity to recompile scripts."); + return; + } + importer.SetCompatibleWithEditor(true); + importer.SaveAndReimport(); + } + + public bool IsValidRepo + { + get { return Repository.IsValid(repoPath); } + } + + public string GitSettingsFolderPath + { + get { return UniGitPath.Combine(gitPath, Path.Combine("UniGit", "Settings")); } + } + + public string GitCommitMessageFilePath + { + get { return UniGitPath.Combine(gitPath, "UniGit","Settings", "CommitMessage.txt"); } + } + + public string GitIgnoreFilePath + { + get { return UniGitPath.Combine(repoPath, ".gitignore"); } + } + } +} diff --git a/Assets/Plugins/UniGit/Editor/GitInitializer.cs.meta b/Assets/Plugins/UniGit/Editor/GitInitializer.cs.meta new file mode 100644 index 0000000..de96be5 --- /dev/null +++ b/Assets/Plugins/UniGit/Editor/GitInitializer.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7d885979cc3f4fb292670fa9d8b908e4 +timeCreated: 1517403446 \ No newline at end of file diff --git a/Assets/Plugins/UniGit/Editor/GitManager.cs b/Assets/Plugins/UniGit/Editor/GitManager.cs index 5609699..0cb67f5 100644 --- a/Assets/Plugins/UniGit/Editor/GitManager.cs +++ b/Assets/Plugins/UniGit/Editor/GitManager.cs @@ -37,6 +37,7 @@ public class GitManager : IDisposable private readonly GitAsyncManager asyncManager; private readonly List watchers = new List(); private readonly ILogger logger; + private readonly GitInitializer initializer; [UniGitInject] public GitManager(string repoPath, @@ -45,7 +46,8 @@ public GitManager(string repoPath, IGitPrefs prefs, GitAsyncManager asyncManager, UniGitData gitData, - ILogger logger) + ILogger logger, + GitInitializer initializer) { this.gitData = gitData; this.repoPath = repoPath; @@ -53,6 +55,7 @@ public GitManager(string repoPath, this.prefs = prefs; this.asyncManager = asyncManager; this.logger = logger; + this.initializer = initializer; gitSettings = settings; gitPath = UniGitPath.Combine(repoPath, ".git"); @@ -61,7 +64,7 @@ public GitManager(string repoPath, private void Initialize() { - if (!IsValidRepo) + if (!initializer.IsValidRepo) { return; } @@ -92,45 +95,6 @@ private void OnDelayedCall() MarkDirty(); } - public void InitializeRepository() - { - Repository.Init(repoPath); - Directory.CreateDirectory(GitSettingsFolderPath); - string newGitIgnoreFile = GitIgnoreFilePath; - if (!File.Exists(newGitIgnoreFile)) - { - File.WriteAllText(newGitIgnoreFile, GitIgnoreTemplate.Template); - } - else - { - logger.Log(LogType.Log,"Git Ignore file already present"); - } - - logger.Log(LogType.Log,"Repository Initialized"); - Initialize(); - } - - internal void InitializeRepositoryAndRecompile() - { - InitializeRepository(); - callbacks.IssueAssetDatabaseRefresh(); - callbacks.IssueSaveDatabaseRefresh(); - callbacks.IssueRepositoryCreate(); - Update(true); - } - - internal static void Recompile() - { - var importer = PluginImporter.GetAllImporters().FirstOrDefault(i => i.assetPath.EndsWith("UniGitResources.dll")); - if (importer == null) - { - Debug.LogError("Could not find LibGit2Sharp.dll. You will have to close and open Unity to recompile scripts."); - return; - } - importer.SetCompatibleWithEditor(true); - importer.SaveAndReimport(); - } - public void DeleteRepository() { if(string.IsNullOrEmpty(repoPath)) return; @@ -212,7 +176,7 @@ private void Update(bool reloadRepository,string[] paths = null) { StartUpdating(paths); - if (reloadRepository && IsValidRepo) + if (reloadRepository && initializer.IsValidRepo) { if (repository != null) repository.Dispose(); repository = new Repository(RepoPath); @@ -253,7 +217,7 @@ private void OnPostprocessMovedAssets(string[] paths,string[] movedFrom) private void PostprocessStage(string[] paths) { - if(repository == null || !IsValidRepo) return; + if(repository == null || !initializer.IsValidRepo) return; if (prefs.GetBool(UnityEditorGitPrefs.DisablePostprocess)) return; string[] pathsFinal = paths.Where(a => !IsEmptyFolder(a)).SelectMany(GetPathWithMeta).ToArray(); if (pathsFinal.Length > 0) @@ -280,7 +244,7 @@ private void PostprocessStage(string[] paths) private void PostprocessUnstage(string[] paths) { - if (repository == null || !IsValidRepo) return; + if (repository == null || !initializer.IsValidRepo) return; if (prefs.GetBool(UnityEditorGitPrefs.DisablePostprocess)) return; string[] pathsFinal = paths.SelectMany(GetPathWithMeta).ToArray(); if (pathsFinal.Length > 0) @@ -301,7 +265,7 @@ private void PostprocessUnstage(string[] paths) private void CheckNullRepository() { - if (IsValidRepo && repository == null) + if (initializer.IsValidRepo && repository == null) { repository = new Repository(RepoPath); callbacks.IssueOnRepositoryLoad(repository); @@ -500,7 +464,7 @@ internal bool IsFileStaging(string path) public Texture2D GetGitStatusIcon() { - if (!IsValidRepo) return GitGUI.Textures.CollabNew; + if (!initializer.IsValidRepo) return GitGUI.Textures.CollabNew; if (Repository == null) return GitGUI.Textures.Collab; if (isUpdating) return GitGUI.GetTempSpinAnimatedTexture(); if (Repository.Index.Conflicts.Any()) return GitGUI.Textures.CollabConflict; @@ -852,7 +816,7 @@ public void EnablePostprocessing() public UpdateStatusEnum GetUpdateStatus() { - if (!IsValidRepo) + if (!initializer.IsValidRepo) { return UpdateStatusEnum.InvalidRepo; } @@ -880,21 +844,6 @@ public IGitPrefs Prefs get { return prefs; } } - public string GitSettingsFolderPath - { - get { return UniGitPath.Combine(gitPath, Path.Combine("UniGit", "Settings")); } - } - - public string GitCommitMessageFilePath - { - get { return UniGitPath.Combine(gitPath, "UniGit","Settings", "CommitMessage.txt"); } - } - - public string GitIgnoreFilePath - { - get { return UniGitPath.Combine(repoPath, ".gitignore"); } - } - public bool IsUpdating { get { return isUpdating; } @@ -915,11 +864,6 @@ public Signature Signature get { return new Signature(Repository.Config.GetValueOrDefault("user.name"), Repository.Config.GetValueOrDefault("user.email"),DateTimeOffset.Now);} } - public bool IsValidRepo - { - get { return Repository.IsValid(RepoPath); } - } - public Repository Repository { get { return repository; } diff --git a/Assets/Plugins/UniGit/Editor/GitProjectContextMenus.cs b/Assets/Plugins/UniGit/Editor/GitProjectContextMenus.cs index 6a6edde..aa72a7d 100644 --- a/Assets/Plugins/UniGit/Editor/GitProjectContextMenus.cs +++ b/Assets/Plugins/UniGit/Editor/GitProjectContextMenus.cs @@ -16,6 +16,7 @@ public static class GitProjectContextMenus private static GitProjectOverlay gitProjectOverlay; private static GitReflectionHelper reflectionHelper; private static ILogger logger; + private static GitInitializer initializer; [UniGitInject] internal static void Init(GitManager gitManager, @@ -23,7 +24,8 @@ internal static void Init(GitManager gitManager, GitCallbacks gitCallbacks, ILogger logger, GitProjectOverlay gitProjectOverlay, - GitReflectionHelper reflectionHelper) + GitReflectionHelper reflectionHelper, + GitInitializer initializer) { GitProjectContextMenus.gitManager = gitManager; GitProjectContextMenus.externalManager = externalManager; @@ -31,6 +33,7 @@ internal static void Init(GitManager gitManager, GitProjectContextMenus.logger = logger; GitProjectContextMenus.reflectionHelper = reflectionHelper; GitProjectContextMenus.gitProjectOverlay = gitProjectOverlay; + GitProjectContextMenus.initializer = initializer; } [MenuItem("Assets/Git/Add", priority = 50), UsedImplicitly] @@ -43,7 +46,7 @@ private static void AddSelected() [MenuItem("Assets/Git/Add", true, priority = 50), UsedImplicitly] private static bool AddSelectedValidate() { - if (gitManager == null || !gitManager.IsValidRepo) return false; + if (initializer == null || !initializer.IsValidRepo) return false; return Selection.assetGUIDs.Select(AssetDatabase.GUIDToAssetPath).SelectMany(gitManager.GetPathWithMeta).Any(g => GitManager.CanStage(gitManager.Repository.RetrieveStatus(g))); } @@ -57,7 +60,7 @@ private static void RemoveSelected() [MenuItem("Assets/Git/Remove", true, priority = 50), UsedImplicitly] private static bool RemoveSelectedValidate() { - if (gitManager == null || !gitManager.IsValidRepo) return false; + if (gitManager == null || !initializer.IsValidRepo) return false; return Selection.assetGUIDs.Select(AssetDatabase.GUIDToAssetPath).SelectMany(gitManager.GetPathWithMeta).Any(g => GitManager.CanUnstage(gitManager.Repository.RetrieveStatus(g))); } @@ -70,7 +73,7 @@ private static void SeeDifference() [MenuItem("Assets/Git/Difference", true, priority = 65)] private static bool SeeDifferenceValidate() { - if (gitManager == null || !gitManager.IsValidRepo) return false; + if (gitManager == null || !initializer.IsValidRepo) return false; if (Selection.assetGUIDs.Length != 1) return false; if (gitManager.IsDirectory(Selection.assetGUIDs[0])) return false; var entry = gitManager.Repository.Index[AssetDatabase.GUIDToAssetPath(Selection.assetGUIDs[0])]; @@ -133,7 +136,7 @@ private static void Revet() [MenuItem("Assets/Git/Revert",true, priority = 80), UsedImplicitly] private static bool RevetValidate() { - if (gitManager == null || !gitManager.IsValidRepo) return false; + if (gitManager == null || !initializer.IsValidRepo) return false; return Selection.assetGUIDs.Select(AssetDatabase.GUIDToAssetPath).SelectMany(gitManager.GetPathWithMeta).Where(File.Exists).Select(e => gitManager.Repository.RetrieveStatus(e)).Any(e => GitManager.CanStage(e) | GitManager.CanUnstage(e)); } @@ -157,7 +160,7 @@ private static void BlameObject() [MenuItem("Assets/Git/Blame/Object", priority = 100,validate = true), UsedImplicitly] private static bool BlameObjectValidate() { - if (gitManager == null || !gitManager.IsValidRepo) return false; + if (gitManager == null || !initializer.IsValidRepo) return false; var path = Selection.assetGUIDs.Select(AssetDatabase.GUIDToAssetPath).FirstOrDefault(); return gitManager.CanBlame(path); } @@ -172,7 +175,7 @@ private static void BlameMeta() [MenuItem("Assets/Git/Blame/Meta", priority = 100,validate = true), UsedImplicitly] private static bool BlameMetaValidate() { - if (gitManager == null || !gitManager.IsValidRepo) return false; + if (gitManager == null || !initializer.IsValidRepo) return false; var path = Selection.assetGUIDs.Select(AssetDatabase.GUIDToAssetPath).Select(AssetDatabase.GetTextMetaFilePathFromAssetPath).FirstOrDefault(); return gitManager.CanBlame(path); } diff --git a/Assets/Plugins/UniGit/Editor/GitSettingsWindow.cs b/Assets/Plugins/UniGit/Editor/GitSettingsWindow.cs index b7ca60f..ae02af1 100644 --- a/Assets/Plugins/UniGit/Editor/GitSettingsWindow.cs +++ b/Assets/Plugins/UniGit/Editor/GitSettingsWindow.cs @@ -46,7 +46,7 @@ protected override void OnEnable() private void InitTabs() { - if(gitManager == null || !gitManager.IsValidRepo) return; + if(gitManager == null || !initializer.IsValidRepo) return; if (tabs != null) { foreach (var settingsTab in tabs) @@ -69,7 +69,7 @@ private void InitTabs() protected override void OnInitialize() { - if (!gitManager.IsValidRepo) return; + if (!initializer.IsValidRepo) return; if (tabs == null) { InitTabs(); @@ -98,9 +98,9 @@ protected override void OnEditorUpdate() [UsedImplicitly] private void OnGUI() { - if (gitManager == null || !gitManager.IsValidRepo) + if (gitManager == null || !initializer.IsValidRepo) { - GitHistoryWindow.InvalidRepoGUI(gitManager); + GitHistoryWindow.InvalidRepoGUI(initializer); return; } diff --git a/Assets/Plugins/UniGit/Editor/GitUnityMenu.cs b/Assets/Plugins/UniGit/Editor/GitUnityMenu.cs index b058068..2917581 100644 --- a/Assets/Plugins/UniGit/Editor/GitUnityMenu.cs +++ b/Assets/Plugins/UniGit/Editor/GitUnityMenu.cs @@ -6,12 +6,12 @@ namespace UniGit { public static class GitUnityMenu { - private static GitManager gitManager; + private static GitInitializer initializer; [UniGitInject] - internal static void Init(GitManager gitManager) + internal static void Init(GitInitializer initializer) { - GitUnityMenu.gitManager = gitManager; + GitUnityMenu.initializer = initializer; } #region Windows @@ -52,16 +52,16 @@ private static void OpenAboutWindow() [UsedImplicitly,MenuItem("UniGit/Initialize",false,0)] private static void Initilize() { - if (!gitManager.IsValidRepo && EditorUtility.DisplayDialog("Initialize Repository", "Are you sure you want to initialize a Repository for your project", "Yes", "Cancel")) + if (!initializer.IsValidRepo && EditorUtility.DisplayDialog("Initialize Repository", "Are you sure you want to initialize a Repository for your project", "Yes", "Cancel")) { - gitManager.InitializeRepositoryAndRecompile(); + initializer.InitializeRepositoryAndRecompile(); } } [UsedImplicitly,MenuItem("UniGit/Initialize", true, 0)] private static bool InitilizeValidate() { - return !gitManager.IsValidRepo; + return !initializer.IsValidRepo; } [UsedImplicitly,MenuItem("UniGit/Report Issue", false, 0)] diff --git a/Assets/Plugins/UniGit/Editor/GitUpdatableWindow.cs b/Assets/Plugins/UniGit/Editor/GitUpdatableWindow.cs index 627a2d3..9741639 100644 --- a/Assets/Plugins/UniGit/Editor/GitUpdatableWindow.cs +++ b/Assets/Plugins/UniGit/Editor/GitUpdatableWindow.cs @@ -19,6 +19,7 @@ public abstract class GitUpdatableWindow : EditorWindow, IGitWatcher [NonSerialized] protected ILogger logger; [NonSerialized] private bool lastHadFocus; [NonSerialized] private bool isDirty; + [NonSerialized] protected GitInitializer initializer; protected virtual void OnEnable() { @@ -33,11 +34,12 @@ private void Construct(GitManager gitManager, UniGitData data, ILogger logger, GitSettingsJson gitSettings, - GitCallbacks gitCallbacks) + GitCallbacks gitCallbacks, + GitInitializer initializer) { this.logger = logger; this.gitSettings = gitSettings; - + this.initializer = initializer; if (gitManager == null) { @@ -106,7 +108,7 @@ private void OnGitManagerUpdateRepositoryInternal(GitRepoStatus status,string[] //only update the window if it is initialized. That means opened and visible. //the editor window will initialize itself once it's focused - if (!initialized || !gitManager.IsValidRepo || !HasFocus) return; + if (!initialized || !initializer.IsValidRepo || !HasFocus) return; OnGitUpdate(status, paths); } @@ -124,7 +126,7 @@ private void OnEditorUpdateInternal() if (!initialized) { initialized = true; - if (!gitManager.IsValidRepo) return; + if (!initializer.IsValidRepo) return; isDirty = false; OnInitialize(); OnGitManagerUpdateRepositoryInternal(data.RepositoryStatus, null); @@ -134,7 +136,7 @@ private void OnEditorUpdateInternal() } else if (isDirty) { - if (!gitManager.IsValidRepo) return; + if (!initializer.IsValidRepo) return; isDirty = false; OnGitManagerUpdateRepositoryInternal(data.RepositoryStatus, null); //simulate repository loading for first initialization diff --git a/Assets/Plugins/UniGit/Editor/GitWizardBase.cs b/Assets/Plugins/UniGit/Editor/GitWizardBase.cs index 948cddb..d0d07cd 100644 --- a/Assets/Plugins/UniGit/Editor/GitWizardBase.cs +++ b/Assets/Plugins/UniGit/Editor/GitWizardBase.cs @@ -26,19 +26,22 @@ public class GitWizardBase : ScriptableWizard protected GitExternalManager externalManager; protected ILogger logger; protected GitSettingsJson gitSettings; + protected GitInitializer initializer; [UniGitInject] private void Construct(GitManager gitManager, GitCredentialsManager credentialsManager, GitExternalManager externalManager, ILogger logger, - GitSettingsJson gitSettings) + GitSettingsJson gitSettings, + GitInitializer initializer) { this.logger = logger; this.gitManager = gitManager; this.credentialsManager = credentialsManager; this.externalManager = externalManager; this.gitSettings = gitSettings; + this.initializer = initializer; remotes = gitManager.Repository.Network != null && gitManager.Repository.Network.Remotes != null ? gitManager.Repository.Network.Remotes.ToArray() : new Remote[0]; remoteNames = remotes.Select(r => new GUIContent(r.Name)).ToArray(); @@ -190,7 +193,7 @@ protected void OnMergeComplete(MergeResult result,string mergeType) } else { - GitDiffWindow.SetCommitMessage(gitManager, gitSettings,gitManager.Repository.Info.Message); + GitDiffWindow.SetCommitMessage(initializer,gitManager, gitSettings,gitManager.Repository.Info.Message); } logger.LogFormat(LogType.Log,"{0} Complete without Fast Forwarding.",mergeType); break; @@ -203,7 +206,7 @@ protected void OnMergeComplete(MergeResult result,string mergeType) } else { - GitDiffWindow.SetCommitMessage(gitManager, gitSettings,gitManager.Repository.Info.Message); + GitDiffWindow.SetCommitMessage(initializer,gitManager, gitSettings,gitManager.Repository.Info.Message); } break; } diff --git a/Assets/Plugins/UniGit/Editor/Settings/GitBranchesSettingsTab.cs b/Assets/Plugins/UniGit/Editor/Settings/GitBranchesSettingsTab.cs index 779713f..fa335a7 100644 --- a/Assets/Plugins/UniGit/Editor/Settings/GitBranchesSettingsTab.cs +++ b/Assets/Plugins/UniGit/Editor/Settings/GitBranchesSettingsTab.cs @@ -26,8 +26,9 @@ public GitBranchesSettingsTab(GitManager gitManager, UniGitData data, ILogger logger, GitSettingsJson gitSettings, - GitCallbacks gitCallbacks) - : base(new GUIContent("Branches"), gitManager,settingsWindow,data,gitSettings,gitCallbacks) + GitCallbacks gitCallbacks, + GitInitializer initializer) + : base(new GUIContent("Branches"), gitManager,settingsWindow,data,gitSettings,gitCallbacks,initializer) { this.injectionHelper = injectionHelper; this.externalManager = externalManager; diff --git a/Assets/Plugins/UniGit/Editor/Settings/GitExternalsSettingsTab.cs b/Assets/Plugins/UniGit/Editor/Settings/GitExternalsSettingsTab.cs index f540591..212f7b0 100644 --- a/Assets/Plugins/UniGit/Editor/Settings/GitExternalsSettingsTab.cs +++ b/Assets/Plugins/UniGit/Editor/Settings/GitExternalsSettingsTab.cs @@ -14,8 +14,9 @@ public GitExternalsSettingsTab(GitManager gitManager, GitExternalManager externalManager, UniGitData data, GitSettingsJson gitSettings, - GitCallbacks gitCallbacks) - : base(new GUIContent("Externals", "External Programs Helpers"), gitManager, settingsWindow,data,gitSettings,gitCallbacks) + GitCallbacks gitCallbacks, + GitInitializer initializer) + : base(new GUIContent("Externals", "External Programs Helpers"), gitManager, settingsWindow,data,gitSettings,gitCallbacks,initializer) { this.externalManager = externalManager; } diff --git a/Assets/Plugins/UniGit/Editor/Settings/GitGeneralSettingsTab.cs b/Assets/Plugins/UniGit/Editor/Settings/GitGeneralSettingsTab.cs index 3c1b2af..7563b84 100644 --- a/Assets/Plugins/UniGit/Editor/Settings/GitGeneralSettingsTab.cs +++ b/Assets/Plugins/UniGit/Editor/Settings/GitGeneralSettingsTab.cs @@ -18,8 +18,9 @@ public GitGeneralSettingsTab(GitManager gitManager, GitLfsManager lfsManager, UniGitData data, GitSettingsJson gitSettings, - GitCallbacks gitCallbacks) - : base(new GUIContent("General"), gitManager, settingsWindow,data,gitSettings,gitCallbacks) + GitCallbacks gitCallbacks, + GitInitializer initializer) + : base(new GUIContent("General"), gitManager, settingsWindow,data,gitSettings,gitCallbacks,initializer) { this.lfsManager = lfsManager; } diff --git a/Assets/Plugins/UniGit/Editor/Settings/GitLFSSettingsTab.cs b/Assets/Plugins/UniGit/Editor/Settings/GitLFSSettingsTab.cs index 539f69d..b7d24a4 100644 --- a/Assets/Plugins/UniGit/Editor/Settings/GitLFSSettingsTab.cs +++ b/Assets/Plugins/UniGit/Editor/Settings/GitLFSSettingsTab.cs @@ -19,8 +19,9 @@ public GitLFSSettingsTab(GitManager gitManager, InjectionHelper injectionHelper, UniGitData data, GitSettingsJson gitSettings, - GitCallbacks gitCallbacks) - : base(new GUIContent("LFS", "Git Large File Storage (beta)"), gitManager,settingsWindow,data,gitSettings,gitCallbacks) + GitCallbacks gitCallbacks, + GitInitializer initializer) + : base(new GUIContent("LFS", "Git Large File Storage (beta)"), gitManager,settingsWindow,data,gitSettings,gitCallbacks,initializer) { this.injectionHelper = injectionHelper; this.lfsManager = lfsManager; diff --git a/Assets/Plugins/UniGit/Editor/Settings/GitRemotesSettingsTab.cs b/Assets/Plugins/UniGit/Editor/Settings/GitRemotesSettingsTab.cs index e066d1d..1c63591 100644 --- a/Assets/Plugins/UniGit/Editor/Settings/GitRemotesSettingsTab.cs +++ b/Assets/Plugins/UniGit/Editor/Settings/GitRemotesSettingsTab.cs @@ -15,8 +15,13 @@ public class GitRemotesSettingsTab : GitSettingsTab private Vector2 scroll; [UniGitInject] - public GitRemotesSettingsTab(GitManager gitManager, GitSettingsWindow settingsWindow,UniGitData data,GitSettingsJson gitSettings,GitCallbacks gitCallbacks) - : base(new GUIContent("Remotes", "Remote Repositories"), gitManager, settingsWindow,data,gitSettings,gitCallbacks) + public GitRemotesSettingsTab(GitManager gitManager, + GitSettingsWindow settingsWindow, + UniGitData data, + GitSettingsJson gitSettings, + GitCallbacks gitCallbacks, + GitInitializer initializer) + : base(new GUIContent("Remotes", "Remote Repositories"), gitManager, settingsWindow,data,gitSettings,gitCallbacks,initializer) { } diff --git a/Assets/Plugins/UniGit/Editor/Settings/GitSecuritySettingsTab.cs b/Assets/Plugins/UniGit/Editor/Settings/GitSecuritySettingsTab.cs index 65a21b4..e810428 100644 --- a/Assets/Plugins/UniGit/Editor/Settings/GitSecuritySettingsTab.cs +++ b/Assets/Plugins/UniGit/Editor/Settings/GitSecuritySettingsTab.cs @@ -16,8 +16,9 @@ public GitSecuritySettingsTab(GitManager gitManager, GitCredentialsManager credentialsManager, UniGitData data, GitSettingsJson gitSettings, - GitCallbacks gitCallbacks) - : base(new GUIContent("Security"), gitManager, settingsWindow,data,gitSettings,gitCallbacks) + GitCallbacks gitCallbacks, + GitInitializer initializer) + : base(new GUIContent("Security"), gitManager, settingsWindow,data,gitSettings,gitCallbacks,initializer) { this.credentialsManager = credentialsManager; } diff --git a/Assets/Plugins/UniGit/Editor/Settings/GitSettingsTab.cs b/Assets/Plugins/UniGit/Editor/Settings/GitSettingsTab.cs index 4f817ac..4f1f73c 100644 --- a/Assets/Plugins/UniGit/Editor/Settings/GitSettingsTab.cs +++ b/Assets/Plugins/UniGit/Editor/Settings/GitSettingsTab.cs @@ -15,9 +15,16 @@ public abstract class GitSettingsTab : IDisposable protected readonly GUIContent name; protected readonly UniGitData data; protected readonly GitCallbacks gitCallbacks; + protected readonly GitInitializer initializer; [UniGitInject] - internal GitSettingsTab(GUIContent name,GitManager gitManager, GitSettingsWindow settingsWindow,UniGitData data,GitSettingsJson gitSettings,GitCallbacks gitCallbacks) + internal GitSettingsTab(GUIContent name, + GitManager gitManager, + GitSettingsWindow settingsWindow, + UniGitData data, + GitSettingsJson gitSettings, + GitCallbacks gitCallbacks, + GitInitializer initializer) { this.name = name; this.gitManager = gitManager; @@ -25,6 +32,7 @@ internal GitSettingsTab(GUIContent name,GitManager gitManager, GitSettingsWindow this.data = data; this.gitSettings = gitSettings; this.gitCallbacks = gitCallbacks; + this.initializer = initializer; gitCallbacks.EditorUpdate += OnEditorUpdateInternal; gitCallbacks.UpdateRepository += OnGitManagerUpdateInternal; } @@ -56,7 +64,7 @@ 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; + if (!initilized || !initializer.IsValidRepo) return; OnGitUpdate(status, paths); } @@ -68,7 +76,7 @@ private void OnEditorUpdateInternal() if (data.Initialized) { initilized = true; - if (!gitManager.IsValidRepo) return; + if (!initializer.IsValidRepo) return; OnInitialize(); OnGitManagerUpdateInternal(data.RepositoryStatus, null); } diff --git a/Assets/Plugins/UniGit/Editor/UniGitLoader.cs b/Assets/Plugins/UniGit/Editor/UniGitLoader.cs index 62f9d69..ad8cf3f 100644 --- a/Assets/Plugins/UniGit/Editor/UniGitLoader.cs +++ b/Assets/Plugins/UniGit/Editor/UniGitLoader.cs @@ -37,6 +37,7 @@ static UniGitLoader() string logPath = UniGitPath.Combine(repoPath, ".git", "UniGit", "log.txt"); uniGitData = CreateUniGitData(); //data must be created manually to not call unity methods from constructors + injectionHelper.Bind().NonLazy(); injectionHelper.Bind().FromInstance(repoPath).WithId("repoPath"); injectionHelper.Bind().FromInstance(settingsPath).WithId("settingsPath"); injectionHelper.Bind().FromInstance(logPath).WithId("logPath"); @@ -67,10 +68,7 @@ static UniGitLoader() injectionHelper.Bind(); injectionHelper.Bind().NonLazy(); - if (Repository.IsValid(repoPath)) - { - Rebuild(injectionHelper); - } + Rebuild(injectionHelper); } finally { @@ -80,28 +78,32 @@ static UniGitLoader() private static void Rebuild(InjectionHelper injectionHelper) { - var settingsManager = injectionHelper.GetInstance(); - settingsManager.LoadGitSettings(); + injectionHelper.InjectStatic(typeof(GitUnityMenu)); - //delayed called must be used for serialized properties to be loaded - EditorApplication.delayCall += () => + if (Repository.IsValid(injectionHelper.GetInstance("repoPath"))) { - settingsManager.LoadOldSettingsFile(); - }; + var settingsManager = injectionHelper.GetInstance(); + settingsManager.LoadGitSettings(); + + //delayed called must be used for serialized properties to be loaded + EditorApplication.delayCall += () => + { + settingsManager.LoadOldSettingsFile(); + }; - GitManager = injectionHelper.GetInstance(); - GitCallbacks = injectionHelper.GetInstance(); - ReflectionHelper = injectionHelper.GetInstance(); - GitSettings = injectionHelper.GetInstance(); + GitManager = injectionHelper.GetInstance(); + GitCallbacks = injectionHelper.GetInstance(); + ReflectionHelper = injectionHelper.GetInstance(); + GitSettings = injectionHelper.GetInstance(); - GitCallbacks.RepositoryCreate += OnRepositoryCreate; - GitCallbacks.OnLogEntry += OnLogEntry; - GitCallbacks.OnBeforeAssemblyReload += OnBeforeAssemblyReload; + GitCallbacks.RepositoryCreate += OnRepositoryCreate; + GitCallbacks.OnLogEntry += OnLogEntry; + GitCallbacks.OnBeforeAssemblyReload += OnBeforeAssemblyReload; - injectionHelper.CreateNonLazy(); + injectionHelper.CreateNonLazy(); - injectionHelper.InjectStatic(typeof(GitProjectContextMenus)); - injectionHelper.InjectStatic(typeof(GitUnityMenu)); + injectionHelper.InjectStatic(typeof(GitProjectContextMenus)); + } } private static void OnWindowAdded(EditorWindow editorWindow) @@ -113,7 +115,7 @@ private static void OnWindowAdded(EditorWindow editorWindow) //emulate Unity's delayed call private static void OnEditorUpdate() { - GitCallbacks.IssueDelayCall(true); + if(GitCallbacks != null) GitCallbacks.IssueDelayCall(true); } private static void OnRepositoryCreate()