Ejemplo n.º 1
0
        /*public void Execute(PerformContext hangfireContext, Container container)
         * {
         *  if (!container.IsTriggrProject())
         *      return;
         *
         *  var probes = container.CheckForProbes();
         *  hangfireContext.WriteLine($"Executing ProbeControl");
         *
         *  var codeChangeProbes = probes.Where(i => i.ProbeType == ProbeType.CodeChanges).ToList();
         *
         *  var oldFiles = new Dictionary<Probe, string>();
         *  if (codeChangeProbes.Count > 0)
         *  {
         *      foreach (var probe in codeChangeProbes)
         *      {
         *          var tempFile = Path.GetTempFileName();
         *
         *          var objectPath = Path.Combine(container.Folder, probe.Object.Path);
         *          if (File.Exists(objectPath))
         *          {
         *              hangfireContext.WriteLine($"Probe {probe.Object.Path}");
         *
         *              File.Copy(objectPath, tempFile, true);
         *
         *              oldFiles.Add(probe, tempFile);
         *          }
         *      }
         *  }
         *
         *  var provider = _providerFactory.GetProvider(container.Repository.Provider);
         *  var updatedPath = provider.Update(container.Repository);
         *
         *  if (!string.IsNullOrEmpty(updatedPath))
         *  {
         *      foreach (var probe in probes)
         *      {
         *          if (probe.ProbeType == ProbeType.CodeChanges)
         *          {
         *              var tempFile = oldFiles[probe];
         *              var objectPath = Path.Combine(container.Folder, probe.Object.Path);
         *              var language = _languageService.Define(probe.Object.Path);
         *
         *              var result = _scriptExecutor.Execute(probe.ProbeType, language.FolderName,
         *                              objectPath, tempFile, probe.Object.Type, probe.Object.Name);
         *
         *              hangfireContext.WriteLine($"Result of comparision {result}");
         *
         *              // it will changed with executing shell script
         *          }
         *      }
         *  }
         *  hangfireContext.WriteLine($"Finished ProbeControl");
         *
         * }
         */
        public void Execute(PerformContext hangfireContext, string probeId, string repoId)
        {
            var repository = _dbContext.Repositories.Find(repoId); // get the repository

            if (repository != null)
            {
                var container = _containerService.GetContainer(repoId); // get the container

                // get all probes and look for probeId
                var probes = container.CheckForProbes();
                var probe  = probes.FirstOrDefault(i => i.Id.Equals(probeId));

                if (probe != null)
                {
                    hangfireContext?.WriteLine(ConsoleTextColor.Gray, $"{probe.Object.Path} is found.");
                    // define the language
                    var language = _languageService.Define(probe.Object.Path);
                    // get the provider
                    var provider = _providerFactory.GetProvider(repository.Provider);
                    // restore to previous file
                    if (provider.Restore(repository, probe.Object.Path, true))
                    {
                        hangfireContext?.WriteLine(ConsoleTextColor.Gray, $"{probe.Object.Path} is restored to old.");
                        // get the file path
                        var objectPath = Path.Combine(container.Folder, probe.Object.Path);

                        // look for the object
                        var ast1 = _scriptExecutor.Execute("AST", language.FolderName, objectPath, probe.Object.Type, probe.Object.Name);

                        hangfireContext?.WriteLine(ConsoleTextColor.Gray, $"{probe.Object.Path} old version is loaded.");

                        var temp1 = WriteToTemp(ast1);

                        // restore to original file
                        if (provider.Restore(repository, probe.Object.Path, false))
                        {
                            // look for the object
                            var ast2 = _scriptExecutor.Execute("AST", language.FolderName, objectPath, probe.Object.Type, probe.Object.Name);

                            var temp2 = WriteToTemp(ast2);

                            hangfireContext?.WriteLine(ConsoleTextColor.Gray, $"{probe.Object.Path} new version is loaded.");

                            Control(hangfireContext, probe, repository, temp1, temp2, language.FolderName);
                        }
                    }
                }
            }
        }