Search in sources :

Example 11 with MergeRequestApi

use of org.gitlab4j.api.MergeRequestApi in project legend-sdlc by finos.

the class GitLabReviewApi method revokeReviewApproval.

@Override
public Review revokeReviewApproval(String projectId, String reviewId) {
    LegendSDLCServerException.validateNonNull(projectId, "projectId may not be null");
    LegendSDLCServerException.validateNonNull(reviewId, "reviewId may not be null");
    GitLabProjectId gitLabProjectId = parseProjectId(projectId);
    MergeRequestApi mergeRequestApi = getGitLabApi(gitLabProjectId.getGitLabMode()).getMergeRequestApi();
    MergeRequest mergeRequest = getReviewMergeRequest(mergeRequestApi, gitLabProjectId, reviewId);
    try {
        MergeRequest revokeApprovalMergeRequest = mergeRequestApi.unapproveMergeRequest(gitLabProjectId.getGitLabId(), mergeRequest.getIid());
        // The MergeRequest that comes back from the unapproveMergeRequest call is not adequate
        // for creating a Review, as most relevant properties are null. The only useful thing we
        // get from it is the last update time.
        mergeRequest.setUpdatedAt(revokeApprovalMergeRequest.getUpdatedAt());
        return fromGitLabMergeRequest(projectId, mergeRequest);
    } catch (Exception e) {
        throw buildException(e, () -> "User " + getCurrentUser() + " is not allowed to revoke approval of review " + reviewId + " in project " + projectId, () -> "Unknown review in project " + projectId + ": " + reviewId, () -> "Error revoking review approval " + reviewId + " in project " + projectId);
    }
}
Also used : MergeRequest(org.gitlab4j.api.models.MergeRequest) GitLabProjectId(org.finos.legend.sdlc.server.gitlab.GitLabProjectId) MergeRequestApi(org.gitlab4j.api.MergeRequestApi) LegendSDLCServerException(org.finos.legend.sdlc.server.error.LegendSDLCServerException) GitLabApiException(org.gitlab4j.api.GitLabApiException)

Example 12 with MergeRequestApi

use of org.gitlab4j.api.MergeRequestApi in project legend-sdlc by finos.

the class GitLabReviewApi method editReview.

@Override
public Review editReview(String projectId, String reviewId, String title, String description, List<String> labels) {
    LegendSDLCServerException.validateNonNull(projectId, "projectId may not be null");
    LegendSDLCServerException.validateNonNull(reviewId, "reviewId may not be null");
    LegendSDLCServerException.validateNonNull(title, "title may not be null");
    LegendSDLCServerException.validateNonNull(description, "description may not be null");
    GitLabProjectId gitLabProjectId = parseProjectId(projectId);
    GitLabApi gitLabApi = getGitLabApi(gitLabProjectId.getGitLabMode());
    MergeRequestApi mergeRequestApi = gitLabApi.getMergeRequestApi();
    MergeRequest mergeRequest = getReviewMergeRequest(mergeRequestApi, gitLabProjectId, reviewId);
    if (!isOpen(mergeRequest)) {
        throw new LegendSDLCServerException("Only open reviews can be edited: state of review " + mergeRequest.getIid() + " in project " + gitLabProjectId.toString() + " is " + getReviewState(mergeRequest));
    }
    try {
        MergeRequestParams mergeRequestParams = new MergeRequestParams().withTitle(title).withDescription(description);
        if (labels != null) {
            mergeRequestParams.withLabels(labels);
        }
        MergeRequest editedRequest = mergeRequestApi.updateMergeRequest(gitLabProjectId.getGitLabId(), mergeRequest.getIid(), mergeRequestParams);
        return fromGitLabMergeRequest(projectId, editedRequest);
    } catch (Exception e) {
        throw buildException(e, () -> "User " + getCurrentUser() + " is not allowed to edit review " + reviewId + " in project " + projectId, () -> "Unknown review in project " + projectId + ": " + reviewId, () -> "Error editing review " + reviewId + " in project " + projectId);
    }
}
Also used : GitLabApi(org.gitlab4j.api.GitLabApi) LegendSDLCServerException(org.finos.legend.sdlc.server.error.LegendSDLCServerException) MergeRequest(org.gitlab4j.api.models.MergeRequest) MergeRequestParams(org.gitlab4j.api.models.MergeRequestParams) GitLabProjectId(org.finos.legend.sdlc.server.gitlab.GitLabProjectId) MergeRequestApi(org.gitlab4j.api.MergeRequestApi) LegendSDLCServerException(org.finos.legend.sdlc.server.error.LegendSDLCServerException) GitLabApiException(org.gitlab4j.api.GitLabApiException)

Example 13 with MergeRequestApi

use of org.gitlab4j.api.MergeRequestApi in project legend-sdlc by finos.

the class GitLabReviewApi method closeReview.

@Override
public Review closeReview(String projectId, String reviewId) {
    LegendSDLCServerException.validateNonNull(projectId, "projectId may not be null");
    LegendSDLCServerException.validateNonNull(reviewId, "reviewId may not be null");
    GitLabProjectId gitLabProjectId = parseProjectId(projectId);
    MergeRequestApi mergeRequestApi = getGitLabApi(gitLabProjectId.getGitLabMode()).getMergeRequestApi();
    MergeRequest mergeRequest = getReviewMergeRequest(mergeRequestApi, gitLabProjectId, reviewId);
    validateMergeRequestReviewState(mergeRequest, ReviewState.OPEN);
    try {
        MergeRequest closeMergeRequest = updateMergeRequestState(mergeRequestApi, gitLabProjectId, mergeRequest, StateEvent.CLOSE);
        return fromGitLabMergeRequest(projectId, closeMergeRequest);
    } catch (Exception e) {
        throw buildException(e, () -> "User " + getCurrentUser() + " is not allowed to close review " + reviewId + " in project " + projectId, () -> "Unknown review in project " + projectId + ": " + reviewId, () -> "Error closing review " + reviewId + " in project " + projectId);
    }
}
Also used : MergeRequest(org.gitlab4j.api.models.MergeRequest) GitLabProjectId(org.finos.legend.sdlc.server.gitlab.GitLabProjectId) MergeRequestApi(org.gitlab4j.api.MergeRequestApi) LegendSDLCServerException(org.finos.legend.sdlc.server.error.LegendSDLCServerException) GitLabApiException(org.gitlab4j.api.GitLabApiException)

Example 14 with MergeRequestApi

use of org.gitlab4j.api.MergeRequestApi in project legend-sdlc by finos.

the class GitlabWorkflowApi method getReviewWorkflowAccessContext.

@Override
public WorkflowAccessContext getReviewWorkflowAccessContext(String projectId, String reviewId) {
    LegendSDLCServerException.validateNonNull(projectId, "projectId may not be null");
    LegendSDLCServerException.validateNonNull(reviewId, "reviewId may not be null");
    GitLabProjectId gitLabProjectId = parseProjectId(projectId);
    MergeRequestApi mergeRequestApi = getGitLabApi(gitLabProjectId.getGitLabMode()).getMergeRequestApi();
    MergeRequest mergeRequest = getReviewMergeRequest(mergeRequestApi, gitLabProjectId, reviewId, true);
    WorkspaceInfo workspaceInfo = parseWorkspaceBranchName(mergeRequest.getSourceBranch());
    if (workspaceInfo == null) {
        throw new LegendSDLCServerException("Unknown review in project " + projectId + ": " + reviewId, Response.Status.NOT_FOUND);
    }
    return new GitLabWorkflowAccessContext(gitLabProjectId) {

        @Override
        protected String getRef() {
            return "refs/merge-requests/" + reviewId + "/head";
        }

        @Override
        protected String getRefInfoForException() {
            return "review " + reviewId + " of project " + projectId;
        }

        @Override
        protected ProjectFileAccessProvider.RevisionAccessContext getRevisionAccessContext() {
            return getProjectFileAccessProvider().getWorkspaceRevisionAccessContext(projectId, workspaceInfo.getWorkspaceId(), workspaceInfo.getWorkspaceType(), workspaceInfo.getWorkspaceAccessType());
        }
    };
}
Also used : ProjectFileAccessProvider(org.finos.legend.sdlc.server.project.ProjectFileAccessProvider) LegendSDLCServerException(org.finos.legend.sdlc.server.error.LegendSDLCServerException) MergeRequest(org.gitlab4j.api.models.MergeRequest) GitLabProjectId(org.finos.legend.sdlc.server.gitlab.GitLabProjectId) MergeRequestApi(org.gitlab4j.api.MergeRequestApi)

Aggregations

GitLabProjectId (org.finos.legend.sdlc.server.gitlab.GitLabProjectId)14 MergeRequestApi (org.gitlab4j.api.MergeRequestApi)14 MergeRequest (org.gitlab4j.api.models.MergeRequest)14 GitLabApiException (org.gitlab4j.api.GitLabApiException)13 LegendSDLCServerException (org.finos.legend.sdlc.server.error.LegendSDLCServerException)10 RepositoryApi (org.gitlab4j.api.RepositoryApi)5 List (java.util.List)4 Entity (org.finos.legend.sdlc.domain.model.entity.Entity)4 Project (org.finos.legend.sdlc.domain.model.project.Project)4 ProjectType (org.finos.legend.sdlc.domain.model.project.ProjectType)4 Workspace (org.finos.legend.sdlc.domain.model.project.workspace.Workspace)4 Review (org.finos.legend.sdlc.domain.model.review.Review)4 GitLabApi (org.gitlab4j.api.GitLabApi)3 ProjectFileAccessProvider (org.finos.legend.sdlc.server.project.ProjectFileAccessProvider)2 Branch (org.gitlab4j.api.models.Branch)1 MergeRequestParams (org.gitlab4j.api.models.MergeRequestParams)1