Пример #1
0
        protected override IEnumerable <IMergeableChangeSet> GetMergeChangeSets(ComponentsFolder targetComponentsFolder)
        {
            try
            {
                var result = new List <IMergeableChangeSet>();

                var targetGameFolder = GetTargetGameFolder(targetComponentsFolder);


                if (targetGameFolder.Math.Exists() && Location.Math.Exists())
                {
                    result.AddRange(Location.Math.GetMergeChangeSets(targetGameFolder.Math));
                }

                if (targetGameFolder.Limits.Exists() && Location.Math.Exists())
                {
                    result.AddRange(Location.Limits.GetMergeChangeSets(targetGameFolder.Limits));
                }

                return(result);
            }
            catch (Exception ex)
            {
                throw new ApplicationException($"Failed to get Merge Sets for game {this.Name}; SourceBranch = {this.Location}; TargetBranch = {GetTargetGameFolder(targetComponentsFolder)}", ex);
            }
        }
Пример #2
0
 public GGPSolutionParser(ComponentsFolder componentsFolder, IBuildCustomizationProvider customizationProvider)
 {
     _componentsFolder      = componentsFolder;
     _solutionFile          = SolutionFile.Parse(GetSolutionFile(componentsFolder));
     _customizationProvider = customizationProvider;
     LoadComponents();
 }
Пример #3
0
        private static IComponentBuilderFactory GetBuildersFactory(ComponentsFolder componentsFolder)
        {
            IBuildCustomizationProvider buildCustomizationProvider = new VoidCustomizationProvider();

            if (componentsFolder.BuildCustomizationXml.Exists())
            {
                buildCustomizationProvider = new BuildCustomizationProvider(componentsFolder.BuildCustomizationXml.ToSourceControlFile());
            }

            return(new ComponentBuilderFactory(new GGPSolutionParser(componentsFolder, buildCustomizationProvider)));
        }
Пример #4
0
        public IEnumerable <ILogicalComponent> ReadComponents(ComponentsFolder componentsFolder)
        {
            var installerContent = ReadInstallerContent();

            var components = new List <ILogicalComponent>();

            foreach (var coreComponent in installerContent.CoreComponents)
            {
                if (coreComponent.Name == Folders.PackagesFolder.WellKnownName)
                {
                    components.Add(_componentsFactory.CreatePackagesComponent(componentsFolder.Packages,
                                                                              new MemoryBasedComponentUniqueID(coreComponent.ComponentUniqueId)));
                }
                else
                {
                    components.Add(_componentsFactory.CreateCoreComponent(componentsFolder.Core.CoreComponent(coreComponent.Name),
                                                                          new MemoryBasedComponentUniqueID(coreComponent.ComponentUniqueId)));
                }
            }

            foreach (var gameEngine in installerContent.GameEngines)
            {
                components.Add(_componentsFactory.CreateGameEngineComponent(componentsFolder.EnginesAndGames.GameEngine(gameEngine.Name).Engine,
                                                                            new MemoryBasedComponentUniqueID(gameEngine.ComponentUniqueId)));
            }



            var gameLimits = installerContent.GamesLimits.ToDictionary(item => new GameKey(new GameEngineName(item.EngineName), item.Name));

            foreach (var gameMath in installerContent.GamesMaths)
            {
                var gameKey        = new GameKey(new GameEngineName(gameMath.EngineName), gameMath.Name);
                var mathUniqueId   = new MemoryBasedComponentUniqueID(gameMath.ComponentUniqueId);
                var limitsUniqueId = new MemoryBasedComponentUniqueID();
                if (gameLimits.ContainsKey(gameKey))
                {
                    limitsUniqueId = new MemoryBasedComponentUniqueID(gameLimits[gameKey].ComponentUniqueId);
                }


                components.Add(_componentsFactory.CreateGameComponent(componentsFolder.EnginesAndGames
                                                                      .GameEngine(gameMath.EngineName)
                                                                      .Games
                                                                      .Game(gameMath.Name),
                                                                      mathUniqueId,
                                                                      limitsUniqueId));
            }


            return(components);
        }
Пример #5
0
        public override MergeResult Merge(ComponentsFolder targetComponentsFolder)
        {
            var targetGameFolder = GetTargetGameFolder(targetComponentsFolder);

            var mergeResult = new MergeResult(0);

            if (targetGameFolder.Math.Exists() && Location.Math.Exists())
            {
                mergeResult = mergeResult.Combine(Location.Math.Merge(targetGameFolder.Math));
            }

            if (targetGameFolder.Limits.Exists() && Location.Math.Exists())
            {
                mergeResult = mergeResult.Combine(Location.Limits.Merge(targetGameFolder.Limits));
            }

            return(mergeResult);
        }
Пример #6
0
        public override void Branch(ComponentsFolder targetComponentsFolder)
        {
            var targetGameFolder = GetTargetGameFolder(targetComponentsFolder);

            if (targetGameFolder.Math.Exists())
            {
                throw new InvalidOperationException($"Target branch folder {targetGameFolder.Math.GetServerPath()} already exists!");
            }

            if (targetGameFolder.Limits.Exists())
            {
                throw new InvalidOperationException($"Target branch folder {targetGameFolder.Limits.GetServerPath()} already exists!");
            }


            Location.Math.Branch(targetGameFolder.Math);

            if (Location.Limits.Exists())
            {
                Location.Limits.Branch(targetGameFolder.Limits);
            }
        }
Пример #7
0
        public virtual Optional <IMergeSet> GetMergeSet(ComponentsFolder targetComponentsFolder)
        {
            try
            {
                if (!GetTargetFolder(targetComponentsFolder).Exists())
                {
                    return(Optional <IMergeSet> .Some(new NewComponentMergeSet(this, targetComponentsFolder)));
                }

                var changeSets = GetMergeChangeSets(targetComponentsFolder);

                if (changeSets.Any())
                {
                    return(Optional <IMergeSet> .Some(new ExistingComponentMergeSet(this, changeSets, targetComponentsFolder)));
                }

                return(Optional <IMergeSet> .None());
            }
            catch (Exception ex)
            {
                throw new ApplicationException($"Failed to get Merge Sets for component {this.Name}; SourceBranch = {this.Location}; TargetBranch = {GetTargetFolder(targetComponentsFolder)}", ex);
            }
        }
Пример #8
0
        private IBuildConfiguration GetBuildConfiguration(ISourceControlAdapter sourceControlAdapter,
                                                          ComponentsFolder componentsFolder)
        {
            var buildOutputFolder = componentsFolder
                                    .Core
                                    .GGPBootstrapper
                                    .ToSourceControlFolder()
                                    .GetLocalPath()
                                    .Subpath("bin")
                                    .Subpath("Release");

            var distributionServerPath = sourceControlAdapter.CreateServerPath(_distributionFolderServerPath)
                                         .Subpath(_ggpBranchName.ToString());

            var distributionLocalPath = sourceControlAdapter.GetLocalPathFromServerPath(distributionServerPath);


            var solutionFile = componentsFolder.GGPGameServerSln.ToSourceControlFile().GetLocalPath();

            return(new BuildConfiguration(buildOutputFolder,
                                          distributionLocalPath,
                                          distributionServerPath,
                                          solutionFile));
        }
Пример #9
0
 protected override IFolderWithBranchingSupport GetTargetFolder(ComponentsFolder targetComponentsFolder)
 {
     return(targetComponentsFolder.EnginesAndGames.GameEngine(this.Name).Engine);
 }
Пример #10
0
 protected override IFolderWithBranchingSupport GetTargetFolder(ComponentsFolder targetComponentsFolder)
 {
     return(GetTargetGameFolder(targetComponentsFolder));
 }
Пример #11
0
 protected virtual IEnumerable <IMergeableChangeSet> GetMergeChangeSets(ComponentsFolder targetComponentsFolder)
 {
     return(Location.GetMergeChangeSets(GetTargetFolder(targetComponentsFolder)));
 }
Пример #12
0
        public IEnumerable <IComponentBuilder> GetBuilders(IPublishPayload publishPayload, ComponentsFolder componentsFolder)
        {
            var componentsBuilders = new List <IComponentBuilder>();

            var factory = GetBuildersFactory(componentsFolder);

            AppendCoreComponentsBuilders(publishPayload, componentsBuilders, factory);

            AppendGameEnginesBuilders(publishPayload, componentsBuilders, factory);

            return(componentsBuilders);
        }
Пример #13
0
 protected override IFolderWithBranchingSupport GetTargetFolder(ComponentsFolder targetComponentsFolder)
 {
     return(targetComponentsFolder.Packages);
 }
Пример #14
0
 private IEnumerable <IComponentBuilder> ReadComponentsBuilders(IPublishPayload publishPayload, ComponentsFolder componentsFolder)
 {
     _logger.Info("Reading components builders");
     return(_services.CreateComponentsBuildersReader().GetBuilders(publishPayload, componentsFolder));
 }
Пример #15
0
 protected override IFolderWithBranchingSupport GetTargetFolder(ComponentsFolder targetComponentsFolder)
 {
     return(targetComponentsFolder.Core.CoreComponent(this.Name));
 }
Пример #16
0
 public virtual MergeResult Merge(ComponentsFolder targetComponentsFolder)
 {
     return(Location.Merge(GetTargetFolder(targetComponentsFolder)));
 }
Пример #17
0
 private Folders.GameFolder GetTargetGameFolder(ComponentsFolder targetComponentsFolder)
 {
     return(targetComponentsFolder.EnginesAndGames.GameEngine(Location.Parent.Parent.Name)
            .Games
            .Game(this.Name));
 }
Пример #18
0
 private static string GetSolutionFile(ComponentsFolder componentsFolder)
 {
     return(componentsFolder.GGPGameServerSln.ToSourceControlFile().GetLocalPath().AsString());
 }
Пример #19
0
 protected override IFolderWithBranchingSupport GetTargetFolder(ComponentsFolder targetComponentsFolder)
 {
     return(targetComponentsFolder.NonDeployable);
 }