Esempio n. 1
0
        public void Start()
        {
            _logger.LogSeperateLine();
            BuildResult initialRebuildResult = RebuildAtStart();

            if (initialRebuildResult.IsSuccess == false)
            {
                _logger.Log("Failed to initial rebuild");
                return;
            }
            if (StopMarker.StopRequested)
            {
                return;
            }
            _logger.Log("Build configuration: " + initialRebuildResult.GetBuildSolutionConfiguration());
            _logger.LogSeperateLine();
            List <string> sourceFilenames = CompileFileListExtractor.GetFilenames(initialRebuildResult.Outputs);

            sourceFilenames = Util.FilterOut(sourceFilenames, _config.FilenameFilters);
            if (sourceFilenames.Count <= 0)
            {
                _logger.Log("Cannot extract any file");
                return;
            }
            _logger.Log("Collected source file count: " + sourceFilenames.Count);
            if (string.IsNullOrEmpty(_config.CheckingDirectory) == false)
            {
                List <string> filteredFilenames = new List <string>();
                foreach (string filename in sourceFilenames)
                {
                    if (filename.Contains(_config.CheckingDirectory))
                    {
                        filteredFilenames.Add(filename);
                    }
                }
                _logger.Log($"Collected source file count after CheckingDirectory({_config.CheckingDirectory}): {filteredFilenames.Count}");
                sourceFilenames = filteredFilenames;
            }
            _logger.LogSeperateLine();

            if (_config.RandomSequenceTest)
            {
                Util.Shuffle(sourceFilenames);
            }

            NeedlessIncludeLines needlessIncludeLines = TryRemoveIncludeAndCollectChanges(sourceFilenames);

            if (StopMarker.StopRequested)
            {
                return;
            }
            _logger.LogSeperateLine();
            if (needlessIncludeLines.IncludeLineInfos.Count == 0)
            {
                _logger.Log("There is no needless include. Nice project!!!!!!!!!!!");
                return;
            }

            needlessIncludeLines.Print(_logger);

            _logger.LogSeperateLine();
            _logger.LogSeperateLine();
            _logger.Log(" Start of final integrated build test");
            _logger.LogSeperateLine();
            _logger.LogSeperateLine();

            needlessIncludeLines = FinalIntegrationTest(needlessIncludeLines);
            if (StopMarker.StopRequested)
            {
                return;
            }
            _logger.LogSeperateLine();

            foreach (var info in needlessIncludeLines.IncludeLineInfos)
            {
                string filename    = info.Filename;
                string includeLine = info.IncludeLine;

                if (string.IsNullOrEmpty(_config.ExecCmdPath) == false)
                {
                    _logger.Log(string.Format("Executing {0}:{1}", filename, includeLine));
                    string argument  = string.Format(@"""{0}"" ""{1}""", filename, includeLine);
                    var    runResult = CommandExecutor.Run(".", _config.ExecCmdPath, argument);
                    _logger.Log("----------------------------------------------------",
                                runResult.outputs, runResult.errors);
                }
                if (_config.ApplyChange)
                {
                    _logger.Log(string.Format("Applying {0}:{1}", filename, includeLine));
                    using (FileModifier fileModifier = new FileModifier(filename, _config.ApplyChangeEncoding))
                    {
                        fileModifier.RemoveAndWrite(includeLine);
                        fileModifier.SetApplyPermanently();
                    }
                }
            }
            // Some changes can break the rebuild. So rebuild again
            BuildResult lastBuildResult = RebuildAtLast();

            if (lastBuildResult.IsSuccess)
            {
                _logger.Log("Final rebuild is successful");
            }
            else
            {
                _logger.Log("Final rebuild is failed!!!!!!!!!!!!!!!!!!!!!!!");
            }
        }