Skip to content

Commit

Permalink
GitInitializer now handles repository initialization
Browse files Browse the repository at this point in the history
  • Loading branch information
simeonradivoev committed Jan 31, 2018
1 parent bf1fb95 commit 124df94
Show file tree
Hide file tree
Showing 24 changed files with 230 additions and 165 deletions.
4 changes: 2 additions & 2 deletions Assets/Editor/Tests/GitDiffWindowTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public void OnCommit_CommitChangesWithFileCommitMessage()
injectionHelper.GetInstance<GitSettingsJson>().ReadFromFile = true;

const string commitText = "First Commit from File Commit Message";
File.WriteAllText(gitManager.GitCommitMessageFilePath, commitText);
File.WriteAllText(injectionHelper.GetInstance<GitInitializer>().GitCommitMessageFilePath, commitText);
diffWindow.Commit();
Assert.AreEqual(1,gitManager.Repository.Commits.Count());
Assert.AreEqual(commitText,gitManager.Repository.Commits.First().Message);
Expand All @@ -62,7 +62,7 @@ public void OnOpen_ReadCommitFileContents()

const string commitText = "Test Message";
diffWindow2.Focus();
File.WriteAllText(gitManager.GitCommitMessageFilePath, commitText);
File.WriteAllText(injectionHelper.GetInstance<GitInitializer>().GitCommitMessageFilePath, commitText);
diffWindow.Focus();
Assert.AreEqual(commitText, diffWindow.GitDiffSettings.commitMessageFromFile);
}
Expand Down
2 changes: 1 addition & 1 deletion Assets/Editor/Tests/GitManagerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public void RepositoryHandlesLockedFileWhileRetrivingStatus()
[UnityTest]
public IEnumerator RepositoryHandlesLockedFileWhenWithIgnoreStatus()
{
File.AppendAllText(gitManager.GitIgnoreFilePath, "testFile.txt");
File.AppendAllText(injectionHelper.GetInstance<GitInitializer>().GitIgnoreFilePath, "testFile.txt");
string lockedFilePathName = "testFile.txt";
string lockedFilePath = UniGitPath.Combine(gitManager.RepoPath, lockedFilePathName);
using (var lockFileStream = File.CreateText(lockedFilePath))
Expand Down
7 changes: 4 additions & 3 deletions Assets/Editor/Tests/InitializationTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using System.IO;
using LibGit2Sharp;
using NUnit.Framework;
using UniGit;
using UniGit.Utils;
using UnityEditor;

Expand All @@ -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<GitInitializer>().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<GitInitializer>().GitIgnoreFilePath));
Assert.AreEqual(File.ReadAllText(injectionHelper.GetInstance<GitInitializer>().GitIgnoreFilePath),GitIgnoreTemplate.Template);
}

/*[Test]
Expand Down
3 changes: 2 additions & 1 deletion Assets/Editor/Tests/TestRepoFixture.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,10 @@ public void Setup()
injectionHelper.Bind<IGitResourceManager>().To<GitResourceManagerMock>();
injectionHelper.Bind<ILogger>().FromInstance(Debug.unityLogger);
injectionHelper.Bind<UniGitData>();
injectionHelper.Bind<GitInitializer>();

gitManager = injectionHelper.GetInstance<GitManager>();
gitManager.InitializeRepository();
injectionHelper.GetInstance<GitInitializer>().InitializeRepository();
gitCallbacks = injectionHelper.GetInstance<GitCallbacks>();
signature = new Signature("Test", "[email protected]", DateTime.Now);
data = injectionHelper.GetInstance<UniGitData>();
Expand Down
7 changes: 5 additions & 2 deletions Assets/Plugins/UniGit/Editor/GitAutoFetcher.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,20 +14,23 @@ public class GitAutoFetcher : IDisposable
private readonly GitCallbacks gitCallbacks;
private readonly GitSettingsJson gitSettings;
private readonly ILogger logger;
private readonly GitInitializer initializer;
private bool needsFetch;

[UniGitInject]
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;
}
Expand All @@ -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");
Expand Down
8 changes: 5 additions & 3 deletions Assets/Plugins/UniGit/Editor/GitConflictsHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<Blob>(conflict.Ours.Id).IsBinary;
}

public void ResolveConflicts(string path, MergeFileFavor favor)
{
if(!gitManager.IsValidRepo) return;
if(!initializer.IsValidRepo) return;

if (favor == MergeFileFavor.Normal)
{
Expand Down
32 changes: 16 additions & 16 deletions Assets/Plugins/UniGit/Editor/GitDiffWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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;
Expand All @@ -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;
}

Expand Down Expand Up @@ -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);
}
Expand Down Expand Up @@ -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);
}
}

Expand Down Expand Up @@ -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
{
Expand Down Expand Up @@ -1157,7 +1157,7 @@ private void SaveCommitMessageToFile()
{
try
{
SaveCommitMessageToFile(gitManager, settings.commitMessageFromFile);
SaveCommitMessageToFile(initializer, settings.commitMessageFromFile);
}
catch (Exception e)
{
Expand All @@ -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)
{
Expand All @@ -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);
}
Expand Down
16 changes: 7 additions & 9 deletions Assets/Plugins/UniGit/Editor/GitHistoryWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -317,9 +317,9 @@ private void OnGUI()
{
CreateStyles();

if (gitManager == null || !gitManager.IsValidRepo)
if (gitManager == null || !initializer.IsValidRepo)
{
InvalidRepoGUI(gitManager);
InvalidRepoGUI(initializer);
return;
}

Expand Down Expand Up @@ -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))
{
Expand Down Expand Up @@ -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..."));
Expand All @@ -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();
Expand Down
85 changes: 85 additions & 0 deletions Assets/Plugins/UniGit/Editor/GitInitializer.cs
Original file line number Diff line number Diff line change
@@ -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"); }
}
}
}
3 changes: 3 additions & 0 deletions Assets/Plugins/UniGit/Editor/GitInitializer.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 124df94

Please sign in to comment.