/// <summary> /// Initializes a new instance of the <see cref="SolutionFileInfo" /> class /// </summary> /// <param name="solution">solution entity</param> /// <param name="organizationServiceProxy">Organization proxy</param> /// <param name="uniqueSolutionName">unique solution name</param> public SolutionFileInfo(Entity solution, OrganizationServiceProxy organizationServiceProxy, string uniqueSolutionName) { this.OrganizationServiceProxy = organizationServiceProxy; this.SolutionsToBeMerged = new List <string>(); this.SolutionUniqueName = uniqueSolutionName; // solution.GetAttributeValue<string>(Constants.SourceControlQueueAttributeNameForSolutionName); this.Message = solution.GetAttributeValue <string>(Constants.SourceControlQueueAttributeNameForComment); this.OwnerName = solution.GetAttributeValue <EntityReference>(Constants.SourceControlQueueAttributeNameForOwnerId).Name; this.IncludeInRelease = solution.GetAttributeValue <bool>(Constants.SourceControlQueueAttributeNameForIncludeInRelease); this.CheckInSolution = solution.GetAttributeValue <bool>(Constants.SourceControlQueueAttributeNameForCheckinSolution); this.MergeSolution = solution.GetAttributeValue <bool>(Constants.SourceControlQueueAttributeNameForMergeSolution); var solutions = solution.GetAttributeValue <string>(Constants.SourceControlQueueAttributeNameForSourceSolutions); if (this.CheckInSolution) { this.SolutionExtractionPath = Path.GetTempPath() + this.SolutionUniqueName; this.BranchName = solution.GetAttributeValue <string>(Constants.SourceControlQueueAttributeNameForBranch); CrmSolutionHelper.CreateEmptyFolder(this.SolutionExtractionPath); } if (!string.IsNullOrEmpty(solutions) && this.MergeSolution) { foreach (var s in solutions.Split(new string[] { "," }, System.StringSplitOptions.RemoveEmptyEntries)) { this.SolutionsToBeMerged.Add(s); } } this.Solution = solution; }
/// <summary> /// method resets local directory /// </summary> public static void ResetLocalDirectory() { // LocalDirectory = @"\\?\" + Path.GetTempFileName().Replace(".","") + "devopsTmp\\"; LocalDirectory = Path.GetTempFileName().Replace(".", string.Empty) + "devopsTmp\\"; CrmSolutionHelper.CreateEmptyFolder(LocalDirectory); SubstTempDirectory(); }
/// <summary> /// Method tries to update repository /// </summary> /// <param name="solutionUniqueName">unique solution name</param> /// <param name="committerName">committer name</param> /// <param name="committerEmail">committer email</param> /// <param name="authorEmail">author email</param> public static void TryUpdateToRepository(string solutionUniqueName, string committerName, string committerEmail, string authorEmail) { ICrmSolutionHelper crmSolutionHelper = new CrmSolutionHelper( RepositoryConfigurationConstants.RepositoryUrl, RepositoryConfigurationConstants.BranchName, CrmConstants.OrgServiceUrl, CrmConstants.DynamicsUserName, CrmConstants.DynamicsPassword, CrmConstants.SolutionPackagerPath); int timeOut = Convert.ToInt32(CrmConstants.SleepTimeoutInMillis); // while (true) { HashSet <string> hashSet = new HashSet <string>(); try { var solutionFiles = crmSolutionHelper.DownloadSolutionFile(solutionUniqueName); if (!crmSolutionHelper.CanPush) { System.Threading.Thread.Sleep(timeOut); // continue; } ////if (!Directory.Exists(ConfigurationManager.AppSettings["RepositoryLocalDirectory"])) ////{ //// Console.WriteLine("Repository local directory doesnt exists " + ConfigurationManager.AppSettings["RepositoryLocalDirectory"]); ////} ////else { string solutionFilePath = RepositoryConfigurationConstants.LocalDirectory + "solutions.txt"; // todo: enable solutions file clear from crm portal PopulateHashset(solutionFilePath, new HashSet <string>()); foreach (var solutionFile in solutionFiles) { if (solutionFile.CheckInSolution) { TryPushToRepository(committerName, committerEmail, authorEmail, solutionFile, solutionFilePath, hashSet); } } } } catch (Exception ex) { Console.Write(ex); System.Threading.Thread.Sleep(timeOut); } System.Threading.Thread.Sleep(timeOut); } }
/// <summary> /// Method tries to update repository /// </summary> /// <param name="solutionUniqueName">unique solution name</param> /// <param name="committerName">committer name</param> /// <param name="committerEmail">committer email</param> /// <param name="authorEmail">author email</param> public void TryUpdateToRepository(string solutionUniqueName, string committerName, string committerEmail, string authorEmail, string mode) { try { string solutionFilePath = string.Empty; ICrmSolutionHelper crmSolutionHelper = new CrmSolutionHelper( Singleton.RepositoryConfigurationConstantsInstance.RepositoryUrl, Singleton.RepositoryConfigurationConstantsInstance.BranchName, Singleton.RepositoryConfigurationConstantsInstance.RepositoryRemoteName, Singleton.CrmConstantsInstance.OrgServiceUrl, Singleton.CrmConstantsInstance.DynamicsUserName, Singleton.CrmConstantsInstance.DynamicsPassword, Singleton.CrmConstantsInstance.SolutionPackagerPath); int timeOut = Convert.ToInt32(Singleton.CrmConstantsInstance.SleepTimeoutInMillis); var solutionFiles = crmSolutionHelper.DownloadSolutionFile(solutionUniqueName, mode); if (!crmSolutionHelper.CanPush) { System.Threading.Thread.Sleep(timeOut); //// continue; } if (solutionFiles.Count > 0) { solutionFilePath = Singleton.RepositoryConfigurationConstantsInstance.LocalDirectory + "solutions.txt"; GitDeploy.GitRepositoryManager gitRepositoryManager = this.ConfigureRepository(solutionFiles[0], committerName, committerEmail, authorEmail, solutionFilePath); this.PushRepository(solutionFiles, committerName, committerEmail, authorEmail, solutionFilePath, gitRepositoryManager); System.Threading.Thread.Sleep(timeOut); } } catch (Exception ex) { Singleton.SolutionFileInfoInstance.WebJobsLog.AppendLine(ex.Message); Console.WriteLine(ex.Message); } }