public void TestInstaller(string installCode, string installerCode) { var installScheme = GithubSchemeDecoder.DecodeShort(installCode); this.FetchInstallsRegistry(); var install = Installs.FirstOrDefault(_ => _.RepositoryName == installScheme.Name && _.AuthorName == installScheme.Owner); if (install == null) { Logger.LogProblem("No install found matching: " + installCode); return; } var regex = new Regex("(?<type>[^\\.]*)\\.(?<method>[^\\.]*)"); var mathc = regex.Match(installerCode); if (!mathc.Success) { Logger.LogProblem("Code should be in format: <InstallerType>.<Method>"); return; } var typeName = mathc.Groups["type"].Value; var methodName = mathc.Groups["method"].Value; var type = AppDomain.CurrentDomain.GetAssemblies() .Select(_ => _.GetType(typeName)) .FirstOrDefault(_ => _ != null); if (type == null) { Logger.LogProblem("Installer type not found: " + typeName); return; } var method = type.GetMethod(methodName); if (method == null) { Logger.LogProblem("Method not found: " + methodName); return; } var result = false; var installer = (Installer)Activator.CreateInstance(type, new object[] { CliFrontend }); result = (bool)method.Invoke(installer, new object[] { install }); if (result) { Logger.Log("Install Test Finished"); } else { Logger.Log("Install Not Finished"); } }
public void Update(string[] args) { if (args.Length > 1 && !string.IsNullOrEmpty(args[1])) { var installScheme = GithubSchemeDecoder.DecodeShort(args[1]); var install = KoinoniaApplication.Instance.FetchInstallsRegistry().Installs.FirstOrDefault(_ => _.RepositoryName == installScheme.Name && _.AuthorName == installScheme.Owner); KoinoniaApplication.Instance.Update(install); } }
public void Uninstall(string[] args) { var installScheme = GithubSchemeDecoder.DecodeShort(args[1]); var install = KoinoniaApplication.Instance.FetchInstallsRegistry().Installs.FirstOrDefault(_ => _.RepositoryName == installScheme.Name && _.AuthorName == installScheme.Owner); if (install != null) { KoinoniaApplication.Instance.UninstallNode(install); } }
public void ListDownloadables(string[] args) { var shc = GithubSchemeDecoder.DecodeShort(args[1]); var host = new DownloadablesHost() { AuthorName = shc.Owner, RepositoryName = shc.Name }; host.FetchDownloadables(); foreach (var downloadable in host.Downloadables) { Terminal.Log(downloadable.ToString()); } }
public IEnumerable <GithubRepositoriesRegistryEntry> GetGithubRepositoriesRegistry(string url) { var jsonString = _commonWebRequestManager.GetText(url); var json = JSON.Parse(jsonString).AsArray; foreach (var child in json.Childs) { var title = child["title"].AsString; var code = child["code"]; var s = GithubSchemeDecoder.DecodeShort(code); yield return(new GithubRepositoriesRegistryEntry() { Title = title, RepositoryName = s.Name, AuthorName = s.Owner }); } }
public void Install(string[] args) { GithubRepositoryEntry dec = GithubSchemeDecoder.Decode(args[1]); Terminal.Log(string.Format("Will install {0} from {1} at {2}", dec.Name, dec.Owner, dec.Tag)); var downloadableHost = new DownloadablesHost() { AuthorName = dec.Owner, RepositoryName = dec.Name }; Terminal.Log("Fetching downloadables..."); downloadableHost.FetchDownloadables(); Terminal.Log(string.Format("{0}/{1} contains {2} downloadable entries...", dec.Owner, dec.Name, downloadableHost.Downloadables.Count)); Downloadable d = downloadableHost.Downloadables.FirstOrDefault(); if (!string.IsNullOrEmpty(dec.Tag)) { d = downloadableHost.Downloadables.FirstOrDefault(_ => _.Name == dec.Tag); } if (d == null) { throw new Exception("Downloadable Entry not found"); } Terminal.Log(string.Format("Installing {0}/{1} @ {2} # {3}...", d.AuthorName, d.RepositoryName, d.Name, d.CommitSha)); KoinoniaApplication.Instance.InstallNode(d); }
private void AnalyzePackage(InstallPlanEntry entry) { _logger.Log("Checking dependencies in " + entry); if (entry.ConfigData.Dependencies.Any()) { foreach (var dependency in entry.ConfigData.Dependencies) { _logger.Log(" Processing " + dependency.Key + " @ " + dependency.Value); var depData = GithubSchemeDecoder.DecodeShort(dependency.Key); // See if this package is already planned to be installed var depEntry = PlanInstall.FirstOrDefault(_ => depData.Owner == _.AuthorName && depData.Name == _.RepositoryName); if (depEntry != null) { continue; //Already been processed } // See if we got this package registered var host = _hostsRegistry.DownloadablesHosts.FirstOrDefault(_ => depData.Owner == _.AuthorName && depData.Name == _.RepositoryName); // If not, create it locally if (host == null) { host = new DownloadablesHost() { AuthorName = depData.Owner, RepositoryName = depData.Name, }; } if (_installsRegistry.Installs.Where(i => i.IsInstallOf(host)).Any()) { _logger.Log(dependency.Key + " is already installed."); continue; } host.FetchDownloadables(); var downloadable = host.Downloadables.FirstOrDefault(); //TODO: need version here if (!string.IsNullOrEmpty(dependency.Value)) { downloadable = host.Downloadables.FirstOrDefault(_ => _.Name == dependency.Value); } if (downloadable == null) { throw new Exception("No Downloadables found for " + host); } var newEntry = Add(downloadable); AnalyzePackage(newEntry); } } else { _logger.Log(" Seeing no dependencies for " + entry); } }