public void Update(SinglePluginUpdateSettings plugin) { if (!plugin.Enable) { DebugWindow.LogMsg($"{plugin.Name?.Value}: Update disabled in settings!"); return; } var sw = Stopwatch.StartNew(); DebugWindow.LogDebug($"{plugin.Name?.Value}: Start update."); var repositoryPath = Path.Combine(SourceDirectory, plugin.Name?.Value); if (!Repository.IsValid(repositoryPath)) { DebugWindow.LogMsg($"{plugin.Name?.Value}: No valid repository at: {repositoryPath}. Starting to clone..."); try { Clone(plugin.SourceUrl?.Value, repositoryPath); sw.Stop(); DebugWindow.LogMsg($"{plugin.Name?.Value}: Clone successful in {sw.ElapsedMilliseconds} ms.", 5, Color.Green); return; } catch (Exception e) { DebugWindow.LogError($"{plugin.Name?.Value} -> Clone failed. Make sure the folder Plugins/Source/{plugin.Name?.Value} does not exist. Skipped!"); DebugWindow.LogDebug($"{plugin.Name?.Value} -> {e.Message}"); return; } } var repository = new Repository(repositoryPath); try { var status = Pull(repository); sw.Stop(); if (status == MergeStatus.UpToDate) { DebugWindow.LogMsg($"{plugin.Name?.Value}: Already up to date, checked in {sw.ElapsedMilliseconds} ms."); return; } else if (status == MergeStatus.FastForward || status == MergeStatus.NonFastForward) { DebugWindow.LogMsg($"{plugin.Name?.Value}: Update successful in {sw.ElapsedMilliseconds} ms.", 5, Color.Green); return; } else { throw new Exception(status.ToString()); } } catch (Exception e) { DebugWindow.LogError($"{plugin.Name?.Value}: Update failed. Skipped!"); DebugWindow.LogDebug($"{plugin.Name?.Value} -> {e.Message}"); } }
private List <PluginWrapper> UpdateSinglePlugin( SinglePluginUpdateSettings plugin, PluginSourceDownloader pluginSourceDownloader, PluginFilter pluginFilter, IPluginCompiler pluginCompiler, string rootDirectory, PluginLoader pluginLoader ) { pluginSourceDownloader.Update(plugin); var sourcePluginDirectory = new DirectoryInfo(Path.Combine(SourcePluginsDirectory, plugin.Name?.Value)); var compiledPluginDirectory = new DirectoryInfo(Path.Combine(CompiledPluginsDirectory, plugin.Name?.Value)); if (!pluginFilter.ShouldCompilePlugin(sourcePluginDirectory, compiledPluginDirectory)) { return(null); } var dependencyTasks = PluginCopyFiles.CopyDependencies(sourcePluginDirectory, compiledPluginDirectory); var settingsTasks = PluginCopyFiles.CopySettings(sourcePluginDirectory, compiledPluginDirectory); var staticFilesTasks = PluginCopyFiles.CopyStaticFiles(sourcePluginDirectory, compiledPluginDirectory); /*var txtJsonFilesTask = PluginCopyFiles.CopyTxtAndJsonFromRoot(sourcePluginDirectory, compiledPluginDirectory);*/ if (dependencyTasks != null) { Task.WaitAll(dependencyTasks.ToArray()); } var csProjFiles = sourcePluginDirectory .GetFiles("*.csproj", SearchOption.AllDirectories) .Where(f => f.Extension == ".csproj"); foreach (var csProjFile in csProjFiles) { pluginCompiler.CompilePlugin( csProjFile, compiledPluginDirectory.FullName, new DirectoryInfo(rootDirectory) ); } if (settingsTasks != null) { Task.WaitAll(settingsTasks.ToArray()); } if (staticFilesTasks != null) { Task.WaitAll(staticFilesTasks.ToArray()); } /*txtJsonFilesTask.Wait();*/ var pluginWrapper = pluginLoader.Load(compiledPluginDirectory); return(pluginWrapper); }
public void Update(SinglePluginUpdateSettings plugin) { DebugWindow.LogMsg($"{plugin.Name?.Value} -> Update... started"); var repository = CloneHelper(plugin); if (repository == null) { return; } PullHelper(plugin, repository); CheckOutHelper(plugin, repository); DebugWindow.LogMsg($"{plugin.Name?.Value} -> Update... done", 5, Color.Green); }
private void PullHelper(SinglePluginUpdateSettings plugin, Repository repository) { try { DebugWindow.LogMsg($"{plugin.Name?.Value} -> Checkout master/main branch... started"); var masterBranch = repository .Branches .Where(b => b.FriendlyName == "master" || b.FriendlyName == "main") .SingleOrDefault(); if (masterBranch == null) { DebugWindow.LogError($"{plugin.Name?.Value} -> master/main branch does not exist"); return; } Commands.Checkout(repository, masterBranch); DebugWindow.LogMsg($"{plugin.Name?.Value} -> Checkout master/main branch... done", 5, Color.Green); DebugWindow.LogMsg($"{plugin.Name?.Value} -> Pull... started"); var status = Pull(repository); if (status == MergeStatus.UpToDate) { DebugWindow.LogMsg($"{plugin.Name?.Value} -> Pull... done, already up to date", 5, Color.Green); return; } else if (status == MergeStatus.FastForward || status == MergeStatus.NonFastForward) { DebugWindow.LogMsg($"{plugin.Name?.Value} -> Pull... done", 5, Color.Green); return; } else { throw new Exception(status.ToString()); } } catch (Exception e) { DebugWindow.LogError($"{plugin.Name?.Value} -> Pull... failed"); DebugWindow.LogDebug($"{plugin.Name?.Value} -> {e.Message}"); } }
private void CheckOutHelper(SinglePluginUpdateSettings plugin, Repository repository) { plugin.CommitShaLatest = repository.Head.Tip.Sha; if (!plugin.Enable && plugin.CommitShaCurrentIsValid) { try { DebugWindow.LogMsg($"{plugin.Name?.Value} -> Check out commit {plugin.CommitShaCurrent?.Value}... started"); Commands.Checkout(repository, plugin.CommitShaCurrent.Value); DebugWindow.LogMsg($"{plugin.Name?.Value} -> Check out commit {plugin.CommitShaCurrent?.Value}... done", 5, Color.Green); } catch (Exception e) { DebugWindow.LogError($"{plugin.Name?.Value} -> Check out commit {plugin.CommitShaCurrent?.Value}... failed"); DebugWindow.LogDebug($"{plugin.Name?.Value} -> {e.Message}"); } } plugin.CommitShaCurrent.Value = repository.Head.Tip.Sha; }
private List <PluginWrapper> UpdateSinglePlugin( SinglePluginUpdateSettings plugin, PluginSourceDownloader pluginSourceDownloader, PluginFilter pluginFilter, PluginCompiler pluginCompiler, PluginLoader pluginLoader ) { pluginSourceDownloader.Update(plugin); var sourcePluginDirectory = new DirectoryInfo(Path.Combine(SourcePluginsDirectory, plugin.Name?.Value)); var compiledPluginDirectory = new DirectoryInfo(Path.Combine(CompiledPluginsDirectory, plugin.Name?.Value)); if (!pluginFilter.ShouldCompilePlugin(sourcePluginDirectory, compiledPluginDirectory)) { return(null); } var dependencyTasks = PluginCopyFiles.CopyDependencies(sourcePluginDirectory, compiledPluginDirectory); var settingsTasks = PluginCopyFiles.CopySettings(sourcePluginDirectory, compiledPluginDirectory); var staticFilesTasks = PluginCopyFiles.CopyStaticFiles(sourcePluginDirectory, compiledPluginDirectory); /*var txtJsonFilesTask = PluginCopyFiles.CopyTxtAndJsonFromRoot(sourcePluginDirectory, compiledPluginDirectory);*/ if (dependencyTasks != null) { Task.WaitAll(dependencyTasks.ToArray()); } var assembly = pluginCompiler.CompilePlugin(sourcePluginDirectory, compiledPluginDirectory.FullName); if (settingsTasks != null) { Task.WaitAll(settingsTasks.ToArray()); } if (staticFilesTasks != null) { Task.WaitAll(staticFilesTasks.ToArray()); } /*txtJsonFilesTask.Wait();*/ var pluginWrapper = pluginLoader.Load(compiledPluginDirectory, assembly); return(pluginWrapper); }
private Repository CloneHelper(SinglePluginUpdateSettings plugin) { var repositoryPath = Path.Combine(SourceDirectory, plugin.Name?.Value); if (Repository.IsValid(repositoryPath)) { return(new Repository(repositoryPath)); } DebugWindow.LogMsg($"{plugin.Name?.Value} -> No valid repository at: {repositoryPath}. Clone from {plugin.SourceUrl?.Value}... started"); try { Clone(plugin.SourceUrl?.Value, repositoryPath); DebugWindow.LogMsg($"{plugin.Name?.Value} -> Clone... done", 5, Color.Green); return(new Repository(repositoryPath)); } catch (Exception e) { DebugWindow.LogError($"{plugin.Name?.Value} -> Clone... failed"); DebugWindow.LogDebug($"{plugin.Name?.Value} -> {e.Message}"); return(null); } }
private List <PluginWrapper> UpdateSinglePlugin( SinglePluginUpdateSettings plugin, PluginSourceDownloader pluginSourceDownloader, PluginFilter pluginFilter, IPluginCompiler pluginCompiler, string rootDirectory, PluginLoader pluginLoader ) { var sourcePluginDirectory = new DirectoryInfo(Path.Combine(SourcePluginsDirectory, plugin.Name?.Value)); var compiledPluginDirectory = new DirectoryInfo(Path.Combine(CompiledPluginsDirectory, plugin.Name?.Value)); try { pluginSourceDownloader.Update(plugin); if (!pluginFilter.ShouldCompilePlugin(sourcePluginDirectory, compiledPluginDirectory)) { return(null); } var dependencyTasks = PluginCopyFiles.CopyDependencies(sourcePluginDirectory, compiledPluginDirectory); var settingsTasks = PluginCopyFiles.CopySettings(sourcePluginDirectory, compiledPluginDirectory); var staticFilesTasks = PluginCopyFiles.CopyStaticFiles(sourcePluginDirectory, compiledPluginDirectory); var txtJsonFilesTask = PluginCopyFiles.CopyTxtAndJsonFromRoot(sourcePluginDirectory, compiledPluginDirectory); var txtJsonDefaultFilesTask = PluginCopyFiles.CopyTxtAndJsonDefaultFiles(sourcePluginDirectory, compiledPluginDirectory); if (dependencyTasks != null) { Task.WaitAll(dependencyTasks.ToArray()); } var csProjFiles = sourcePluginDirectory .GetFiles("*.csproj", SearchOption.AllDirectories) .Where(f => f.Extension == ".csproj"); foreach (var csProjFile in csProjFiles) { pluginCompiler.CompilePlugin( csProjFile, compiledPluginDirectory.FullName, new DirectoryInfo(rootDirectory) ); } var remainingTasks = new List <Task>(); remainingTasks.AddRange(settingsTasks); remainingTasks.AddRange(staticFilesTasks); remainingTasks.AddRange(txtJsonFilesTask); remainingTasks.AddRange(txtJsonDefaultFilesTask); if (remainingTasks != null) { Task.WaitAll(remainingTasks.ToArray()); } } catch (Exception e) { DebugWindow.LogError($"PluginUpdater -> UpdateSinglePlugin \"{plugin.Name?.Value}\" failed."); DebugWindow.LogError($"PluginUpdater -> {e}"); } var pluginWrapper = pluginLoader.Load(compiledPluginDirectory); return(pluginWrapper); }