/// <summary> /// Конструктор по умолчанию /// </summary> /// <param name="gitlabProject">Проект в GitLab</param> /// <param name="remoteBranchProvider">Провайдер удаленных ветвей</param> /// <param name="branchInfoProvider">Провайдер информации о ветвях</param> public GitlabDefaultBranchProvider( Holder <Project> gitlabProject, IRemoteBranchProvider remoteBranchProvider, IBranchInfoProvider branchInfoProvider) { ValueGetter = () => { var project = gitlabProject.Value; var defaultBranchInfo = project == null ? BranchInfo.Develop : branchInfoProvider.GetBranchInfo(project.DefaultBranch); return(new DefaultBranchInfo(defaultBranchInfo, remoteBranchProvider)); }; }
public MergeJob(RepositoryHolder repository, ConfigurationHolder configuration, IRemoteBranchProvider remoteBranches, ILocalBranchProvider localBranches, IMergeApprovalService userApproval) { Prepare = data => { BranchesToMerge = data.BranchesToMerge.Select(remoteBranches.GetBranch); TargetBranch = localBranches.GetBranch(data.TargetBranch); Commands.Checkout(repository.Value, TargetBranch); }; Process = () => { var mergeSignature = new Signature("parovoz", "*****@*****.**", DateTimeOffset.Now); var mergeOptions = new MergeOptions { MergeFileFavor = Enum.TryParse(configuration["Merge", "FileFavor"], out MergeFileFavor favor) ? favor : MergeFileFavor.Normal, SkipReuc = true }; foreach (var sourceBranch in BranchesToMerge) { var tip = repository.Head.Tip; var result = repository.Value.Merge(sourceBranch, mergeSignature, mergeOptions); if (result.Status == MergeStatus.Conflicts) { Log.Warn($"Unable to merge {sourceBranch.FriendlyName} into {TargetBranch.FriendlyName} automatically"); Log.Error($"{repository.Index.Conflicts.Count()} conflict(s) found:"); foreach (var conflict in repository.Value.Index.Conflicts) { Log.Info(conflict.Ancestor.Path); } Log.Info("Resolve all the conflicts and press any key to continue..."); if (userApproval.RequstApprove("perform union merge").IsSuccess) { repository.Value.Reset(ResetMode.Hard, tip); result = repository.Value.Merge(sourceBranch, mergeSignature, new MergeOptions { MergeFileFavor = MergeFileFavor.Union }); } } else { Log.Info($"Merged successfully {sourceBranch.FriendlyName} into {TargetBranch.FriendlyName}"); } } return("OK"); }; } }