/// <summary>
        /// method tries to push to repository
        /// </summary>
        /// <param name="committerName">committer name</param>
        /// <param name="committerEmail">committer detail</param>
        /// <param name="authorEmail">author email id</param>
        /// <param name="solutionFile">solution file info</param>
        /// <param name="solutionFilePath">path of file that contains list of solution to be released</param>
        /// <param name="hashSet">hash set to store release solution</param>
        private static void TryPushToRepository(
            string committerName,
            string committerEmail,
            string authorEmail,
            SolutionFileInfo solutionFile,
            string solutionFilePath,
            HashSet <string> hashSet)
        {
            RepositoryConfigurationConstants.ResetLocalDirectory();

            solutionFile.Solution[Constants.SourceControlQueueAttributeNameForStatus] = Constants.SourceControlQueuemPushingToStatus;
            solutionFile.Update();

            GitDeploy.GitRepositoryManager gitRepositoryManager = GetRepositoryManager(committerName, committerEmail, authorEmail, solutionFile);

            gitRepositoryManager.UpdateRepository();

            PopulateHashset(solutionFilePath, hashSet);

            if (!hashSet.Contains(solutionFile.SolutionFileZipName) && solutionFile.IncludeInRelease)
            {
                hashSet.Add(solutionFile.SolutionFileZipName);
            }

            SaveHashSet(solutionFilePath, hashSet);
            gitRepositoryManager.CommitAllChanges(solutionFile, solutionFilePath);

            gitRepositoryManager.PushCommits();

            solutionFile.Solution[Constants.SourceControlQueueAttributeNameForStatus] = Constants.SourceControlQueuemPushToRepositorySuccessStatus;
            solutionFile.Update();
        }
        /// <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)
        {
            try
            {
                string             solutionFilePath  = string.Empty;
                ICrmSolutionHelper crmSolutionHelper = new CrmSolutionHelper(
                    Singleton.RepositoryConfigurationConstantsInstance.RepositoryUrl,
                    Singleton.RepositoryConfigurationConstantsInstance.BranchName,
                    Singleton.RepositoryConfigurationConstantsInstance.RepositoryRemoteName,
                    Singleton.CrmConstantsInstance.SolutionPackagerPath);

                int timeOut       = Convert.ToInt32(Singleton.CrmConstantsInstance.SleepTimeoutInMillis);
                var solutionFiles = crmSolutionHelper.DownloadSolutionFile(solutionUniqueName);
                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);
            }
        }
        /// <summary>
        /// method tries to push to repository
        /// </summary>
        /// <param name="committerName">committer name</param>
        /// <param name="committerEmail">committer detail</param>
        /// <param name="authorEmail">author email id</param>
        /// <param name="solutionFile">solution file info</param>
        /// <param name="solutionFilePath">path of file that contains list of solution to be released</param>
        /// <param name="hashSet">hash set to store release solution</param>
        /// <param name="gitRepositoryManager">object initialization for class RepositoryManager</param>
        private void TryPushToRepository(
            string committerName,
            string committerEmail,
            string authorEmail,
            SolutionFileInfo solutionFile,
            string solutionFilePath,
            HashSet <string> hashSet,
            GitDeploy.GitRepositoryManager gitRepositoryManager)
        {
            ////RepositoryConfigurationConstants.ResetLocalDirectory();

            solutionFile.Solution[Constants.SourceControlQueueAttributeNameForStatus] = Constants.SourceControlQueuemPushingToStatus;
            solutionFile.Solution.Attributes["syed_webjobs"] = Singleton.SolutionFileInfoInstance.WebJobs();
            solutionFile.Update();
            Workspace workspace = null;

            ////GitDeploy.GitRepositoryManager gitRepositoryManager = GetRepositoryManager(committerName, committerEmail, authorEmail, solutionFile);

            if (solutionFile.Repository != Constants.SourceControlAzureDevOpsServer)
            {
                gitRepositoryManager.UpdateRepository();
            }


            ////433710000 value for Yes
            if (solutionFile.SolutionsTxt == 433710000 && File.Exists(solutionFilePath))
            {
                File.WriteAllText(solutionFilePath, string.Empty);
                hashSet.Clear();
            }

            this.PopulateHashset(solutionFilePath, hashSet);
            if (!hashSet.Contains(solutionFile.SolutionFileZipName) && solutionFile.IncludeInRelease)
            {
                hashSet.Add(solutionFile.SolutionFileZipName);
            }

            if (solutionFile.Repository == Constants.SourceControlAzureDevOpsServer)
            {
                workspace = gitRepositoryManager.ConnectTFSMap(solutionFile, solutionFilePath, hashSet);
            }
            else
            {
                this.SaveHashSet(solutionFilePath, hashSet);
                gitRepositoryManager.CommitAllChanges(solutionFile, solutionFilePath, null);
                gitRepositoryManager.PushCommits();
            }



            solutionFile.Solution[Constants.SourceControlQueueAttributeNameForStatus] = Constants.SourceControlQueuemPushToRepositorySuccessStatus;
            solutionFile.Solution.Attributes["syed_webjobs"] = Singleton.SolutionFileInfoInstance.WebJobs();
            solutionFile.Update();
        }
        private static void TryPushToRepository(string committerName, string committerEmail, string authorEmail,
                                                SolutionFileInfo solutionFile, string solutionFilePath)
        {
            GitDeploy.GitRepositoryManager gitRepositoryManager = new GitDeploy.GitRepositoryManager(
                ConfigurationManager.AppSettings["UserName"],
                ConfigurationManager.AppSettings["GitPassword"],
                ConfigurationManager.AppSettings["RepositoryUrl"],
                ConfigurationManager.AppSettings["RepositoryLocalDirectory"],
                solutionFile.OwnerName ?? committerName, authorEmail, committerName, committerEmail);

            //GitDeploy.GitRepositoryManager gitRepositoryManager = new GitDeploy.GitRepositoryManager(
            //    ConfigurationManager.AppSettings["UserName"],
            //    ConfigurationManager.AppSettings["GitPassword"],
            //    ConfigurationManager.AppSettings["RepositoryUrl"],
            //    ConfigurationManager.AppSettings["RepositoryLocalDirectory"],
            //    authorName, authorEmail, committerName, committerEmail);

            gitRepositoryManager.CommitAllChanges(solutionFile.Message, solutionFile.SolutionFilePath, solutionFilePath);
            gitRepositoryManager.PushCommits(ConfigurationManager.AppSettings["RemoteName"],
                                             ConfigurationManager.AppSettings["BranchName"]);
        }
        /// <summary>
        /// Method tries to configure repository
        /// </summary>
        /// <param name="solutionFiles">solution files</param>
        /// <param name="committerName">committer name</param>
        /// <param name="committerEmail">committer email</param>
        /// <param name="authorEmail">author email</param>
        /// <param name="solutionFilePath">solution file path</param>
        /// <returns> returns repository manager</returns>
        public GitDeploy.GitRepositoryManager ConfigureRepository(SolutionFileInfo solutionFiles, string committerName, string committerEmail, string authorEmail, string solutionFilePath)
        {
            int timeOut = Convert.ToInt32(Singleton.CrmConstantsInstance.SleepTimeoutInMillis);

            GitDeploy.GitRepositoryManager gitRepositoryManager = null;
            try
            {
                // todo: enable solutions file clear from crm portal
                this.PopulateHashset(solutionFilePath, new HashSet <string>());
                gitRepositoryManager = this.GetRepositoryManager(committerName, committerEmail, authorEmail, solutionFiles);
            }
            catch (Exception ex)
            {
                Console.Write(ex.Message);
                Singleton.SolutionFileInfoInstance.WebJobsLog.AppendLine(" " + ex.Message + "<br>");
                solutionFiles.Solution[Constants.SourceControlQueueAttributeNameForStatus] = "Error +" + ex.Message;
                solutionFiles.Solution.Attributes["syed_webjobs"] = Singleton.SolutionFileInfoInstance.WebJobs();
                solutionFiles.Update();
                Singleton.SolutionFileInfoInstance.UploadFiletoDynamics(Singleton.CrmConstantsInstance.ServiceProxy, solutionFiles.Solution);
                System.Threading.Thread.Sleep(timeOut);
            }

            return(gitRepositoryManager);
        }
 /// <summary>
 /// Method tries to push it to repository
 /// </summary>
 /// <param name="solutionFiles">solution files</param>
 /// <param name="committerName">committer name</param>
 /// <param name="committerEmail">committer email</param>
 /// <param name="authorEmail">author email</param>
 /// <param name="solutionFilePath">solution file path</param>
 /// <param name="gitRepositoryManager"> repository manager</param>
 public void PushRepository(List <SolutionFileInfo> solutionFiles, string committerName, string committerEmail, string authorEmail, string solutionFilePath, GitDeploy.GitRepositoryManager gitRepositoryManager)
 {
     foreach (var solutionFile in solutionFiles)
     {
         try
         {
             if (solutionFile.CheckInSolution)
             {
                 Singleton.SolutionFileInfoInstance.WebJobsLog.Clear();
                 Singleton.SolutionFileInfoInstance.WebJobsLog.Append(solutionFile.Solution.GetAttributeValue <string>("syed_webjobs"));
                 HashSet <string> hashSet = new HashSet <string>();
                 this.TryPushToRepository(committerName, committerEmail, authorEmail, solutionFile, solutionFilePath, hashSet, gitRepositoryManager);
                 Singleton.SolutionFileInfoInstance.UploadFiletoDynamics(Singleton.CrmConstantsInstance.ServiceProxy, solutionFile.Solution);
             }
         }
         catch (Exception ex)
         {
             Console.Write(ex.Message);
             Singleton.SolutionFileInfoInstance.WebJobsLog.AppendLine(" " + ex.Message + "<br>");
             solutionFile.Solution[Constants.SourceControlQueueAttributeNameForStatus] = "Error +" + ex.Message;
             solutionFile.Solution.Attributes["syed_webjobs"] = Singleton.SolutionFileInfoInstance.WebJobs();
             solutionFile.Update();
             Singleton.SolutionFileInfoInstance.UploadFiletoDynamics(Singleton.CrmConstantsInstance.ServiceProxy, solutionFile.Solution);
         }
     }
 }