public async Task <IActionResult> GetMergePolicies([Required] string repository, [Required] string branch) { if (string.IsNullOrEmpty(repository)) { ModelState.TryAddModelError(nameof(repository), "The repository parameter is required"); } if (string.IsNullOrEmpty(branch)) { ModelState.TryAddModelError(nameof(branch), "The branch parameter is required"); } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } Data.Models.RepositoryBranch repoBranch = await Context.RepositoryBranches.FindAsync(repository, branch); if (repoBranch == null) { return(NotFound()); } List <Data.Models.MergePolicyDefinition> policies = repoBranch.PolicyObject?.MergePolicies ?? new List <Data.Models.MergePolicyDefinition>(); return(Ok(policies.Select(p => new MergePolicy(p)))); }
public async Task <IActionResult> GetHistory(string repository, string branch) { if (string.IsNullOrEmpty(repository)) { ModelState.TryAddModelError(nameof(repository), "The repository parameter is required"); } if (string.IsNullOrEmpty(branch)) { ModelState.TryAddModelError(nameof(branch), "The branch parameter is required"); } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } Data.Models.RepositoryBranch repoBranch = await Context.RepositoryBranches.FindAsync(repository, branch); if (repoBranch == null) { return(NotFound()); } IOrderedQueryable <RepositoryBranchUpdateHistoryEntry> query = Context.RepositoryBranchUpdateHistory .Where(u => u.Repository == repository && u.Branch == branch) .OrderByDescending(u => u.Timestamp); return(Ok(query)); }
public async Task <IActionResult> SetMergePolicies( [Required] string repository, [Required] string branch, [FromBody] IImmutableList <MergePolicy> policies) { if (string.IsNullOrEmpty(repository)) { ModelState.TryAddModelError(nameof(repository), "The repository parameter is required"); } if (string.IsNullOrEmpty(branch)) { ModelState.TryAddModelError(nameof(branch), "The branch parameter is required"); } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } Data.Models.RepositoryBranch repoBranch = await GetRepositoryBranch(repository, branch); Data.Models.RepositoryBranch.Policy policy = repoBranch.PolicyObject ?? new Data.Models.RepositoryBranch.Policy(); policy.MergePolicies = policies?.Select(p => p.ToDb()).ToList() ?? new List <Data.Models.MergePolicyDefinition>(); repoBranch.PolicyObject = policy; await Context.SaveChangesAsync(); return(Ok()); }
public async Task <IActionResult> RetryActionAsync([Required] string repository, [Required] string branch, long timestamp) { if (string.IsNullOrEmpty(repository)) { ModelState.TryAddModelError(nameof(repository), "The repository parameter is required"); } if (string.IsNullOrEmpty(branch)) { ModelState.TryAddModelError(nameof(branch), "The branch parameter is required"); } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } DateTime ts = DateTimeOffset.FromUnixTimeSeconds(timestamp).UtcDateTime; Data.Models.RepositoryBranch repoBranch = await Context.RepositoryBranches.FindAsync(repository, branch); if (repoBranch == null) { return(NotFound()); } RepositoryBranchUpdateHistoryEntry update = await Context.RepositoryBranchUpdateHistory .Where(u => u.Repository == repository && u.Branch == branch) .FirstOrDefaultAsync(u => Math.Abs(EF.Functions.DateDiffSecond(u.Timestamp, ts)) < 1); if (update == null) { return(NotFound()); } if (update.Success) { return(StatusCode( (int)HttpStatusCode.NotAcceptable, new ApiError("That action was successful, it cannot be retried."))); } Queue.Post( async() => { IPullRequestActor actor = PullRequestActorFactory(PullRequestActorId.Create(update.Repository, update.Branch)); await actor.RunActionAsync(update.Method, update.Arguments); }); return(Accepted()); }
private async Task <Data.Models.RepositoryBranch> GetRepositoryBranch(string repository, string branch) { Data.Models.RepositoryBranch repoBranch = await Context.RepositoryBranches.FindAsync(repository, branch); if (repoBranch == null) { Context.RepositoryBranches.Add( repoBranch = new Data.Models.RepositoryBranch { RepositoryName = repository, BranchName = branch }); } else { Context.RepositoryBranches.Update(repoBranch); } return(repoBranch); }
public RepositoryBranch(Data.Models.RepositoryBranch other) { Repository = other.RepositoryName; Branch = other.BranchName; MergePolicies = (other.PolicyObject?.MergePolicies ?? new List <Data.Models.MergePolicyDefinition>()).Select(p => new MergePolicy(p)).ToImmutableList(); }