Exemplo n.º 1
0
        private async Task <List <Version> > InstallingVersion(IEnumerable <IVersion> versions, ToolsContext toolsContext)
        {
            var effectivePortalVersions = new List <Version>();
            var dicVersions             = new Dictionary <string, List <string> >();

            var availableGroupVersions = versions.Select(a => a.VersionNumber).Distinct();

            IPatchProcessor patchProcessor = new PatchProcessor();

            foreach (var groupVersion in availableGroupVersions)
            {
                Console.WriteLine("");
                Console.WriteLine("----------------------------------------------------------------");
                Console.WriteLine($"------------------Installing Version: {groupVersion}---------------------");
                Console.WriteLine("----------------------------------------------------------------");
                var matchingVersions = versions.Where(a => a.VersionNumber == groupVersion);

                var executingVersions = new List <string>();
                foreach (var version in matchingVersions)
                {
                    var executionName = version.GetType().GetTypeInfo().Name;
                    await version.Upgrade(toolsContext.VersionContext);

                    executingVersions.Add(executionName);
                    Console.WriteLine(string.Format("Installing {0} Version {1} Completely!", executionName, version.VersionNumber));
                }

                if (toolsContext.AllowPatch)
                {
                    var result = await patchProcessor.Proceed(Path.Combine(toolsContext.PatchesFolder, groupVersion), toolsContext.VersionContext.DatabaseOptions as DatabaseOptions);

                    if (result.Any())
                    {
                        foreach (var file in result)
                        {
                            Console.WriteLine(string.Format("Patched file: {0}", file));
                        }
                    }
                }

                dicVersions.Add(groupVersion, executingVersions);
            }
            foreach (var kvp in dicVersions)
            {
                effectivePortalVersions.Add(new Version
                {
                    Id             = DataUtil.GenerateUniqueId(),
                    AppName        = toolsContext.Arguments.App,
                    VersionNumber  = kvp.Key,
                    AffectiveFiles = ConvertUtil.SerializeObject(kvp.Value),
                    CreatedDate    = DateTime.UtcNow
                });
            }

            return(effectivePortalVersions);
        }