use of org.gitlab4j.api.models.MergeRequest 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);
}
}
use of org.gitlab4j.api.models.MergeRequest 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);
}
}
use of org.gitlab4j.api.models.MergeRequest in project legend-sdlc by finos.
the class GitLabReviewApi method createReview.
@Override
public Review createReview(String projectId, String workspaceId, WorkspaceType workspaceType, String title, String description, List<String> labels) {
LegendSDLCServerException.validateNonNull(projectId, "projectId may not be null");
LegendSDLCServerException.validateNonNull(workspaceId, "workspaceId may not be null");
LegendSDLCServerException.validateNonNull(workspaceType, "workspaceType may not be null");
LegendSDLCServerException.validateNonNull(title, "title may not be null");
LegendSDLCServerException.validateNonNull(description, "description may not be null");
ProjectFileAccessProvider.WorkspaceAccessType workspaceAccessType = ProjectFileAccessProvider.WorkspaceAccessType.WORKSPACE;
try {
GitLabProjectId gitLabProjectId = parseProjectId(projectId);
String workspaceBranchName = getWorkspaceBranchName(workspaceId, workspaceType, workspaceAccessType);
// TODO should we check for other merge requests for this workspace?
MergeRequest mergeRequest = getGitLabApi(gitLabProjectId.getGitLabMode()).getMergeRequestApi().createMergeRequest(gitLabProjectId.getGitLabId(), workspaceBranchName, MASTER_BRANCH, title, description, null, null, (labels == null || labels.isEmpty()) ? null : labels.toArray(new String[0]), null, true);
return fromGitLabMergeRequest(projectId, mergeRequest);
} catch (Exception e) {
throw buildException(e, () -> "User " + getCurrentUser() + " is not allowed to submit changes from " + workspaceType.getLabel() + " " + workspaceAccessType.getLabel() + " " + workspaceId + " in project " + projectId + " for review", () -> "Unknown " + workspaceType.getLabel() + " " + workspaceAccessType.getLabel() + " (" + workspaceId + ") or project (" + projectId + ")", () -> "Error submitting changes from " + workspaceType.getLabel() + " " + workspaceAccessType.getLabel() + " " + workspaceId + " in project " + projectId + " for review");
}
}
use of org.gitlab4j.api.models.MergeRequest 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());
}
};
}
use of org.gitlab4j.api.models.MergeRequest in project legend-sdlc by finos.
the class GitLabComparisonApi method getReviewComparison.
@Override
public Comparison getReviewComparison(String projectId, String reviewId) {
LegendSDLCServerException.validateNonNull(projectId, "projectId may not be null");
LegendSDLCServerException.validateNonNull(reviewId, "reviewId may not be null");
GitLabProjectId gitLabProjectId = parseProjectId(projectId);
RepositoryApi repositoryApi = getGitLabApi(gitLabProjectId.getGitLabMode()).getRepositoryApi();
MergeRequest mergeRequest = getReviewMergeRequest(getGitLabApi(gitLabProjectId.getGitLabMode()).getMergeRequestApi(), gitLabProjectId, reviewId);
WorkspaceInfo workspaceInfo = parseWorkspaceBranchName(mergeRequest.getSourceBranch());
if (workspaceInfo == null) {
throw new LegendSDLCServerException("Unknown review in project " + projectId + ": " + reviewId, Response.Status.NOT_FOUND);
}
DiffRef diffRef = mergeRequest.getDiffRefs();
if ((diffRef == null) || (diffRef.getStartSha() == null) || (diffRef.getHeadSha() == null)) {
throw new LegendSDLCServerException("Unable to get revision info for review " + reviewId + " in project " + projectId);
}
String fromRevisionId = diffRef.getStartSha();
String toRevisionId = diffRef.getHeadSha();
ProjectStructure fromProjectStructure = getProjectStructure(projectId, workspaceInfo.getWorkspaceId(), fromRevisionId, workspaceInfo.getWorkspaceType(), workspaceInfo.getWorkspaceAccessType());
ProjectStructure toProjectStructure = getProjectStructure(gitLabProjectId.toString(), null, toRevisionId, null, null);
return getComparisonResult(gitLabProjectId, repositoryApi, fromRevisionId, toRevisionId, fromProjectStructure, toProjectStructure);
}
Aggregations