瀏覽代碼

feat: add getCommitByHash API

claws 4 年之前
父節點
當前提交
4705c822fb

+ 4 - 0
seecoder-gitlab-client/src/main/java/com.nju.edu.gitlab/SeecoderGitlabApi.java

@@ -56,6 +56,10 @@ public interface SeecoderGitlabApi{
 
     public List<CommitVO> getAllCommitMessage(int projectId, String commitHash) throws SeecoderGitlabException;
 
+    public List<CommitVO> getCommitsByBranch(int projectId, String branchName) throws SeecoderGitlabException;
+
+    public CommitVO getCommitByHash(int projectId, String hash) throws SeecoderGitlabException;
+
     public List<BranchVO> getProjectBranches(int projectId) throws SeecoderGitlabException;
 
     public boolean addAuthorization(int projectId, int userId, AccessLevelForm accessLevel) throws GitLabApiException, SeecoderGitlabException;

+ 47 - 0
seecoder-gitlab-client/src/main/java/com.nju.edu.gitlab/SeecoderGitlabClient.java

@@ -650,6 +650,53 @@ public class SeecoderGitlabClient implements SeecoderGitlabApi {
         }
     }
 
+    @Override
+    public List<CommitVO> getCommitsByBranch(int projectId, String branchName) throws SeecoderGitlabException {
+        try {
+            ObjectMapper objectMapper = new ObjectMapper();
+            Request.Builder builder = new Request.Builder()
+                    .addHeader("Authorization", token);
+            builder = builder
+                    .url(host + "/api/project/" + projectId + "/branch-commit/" + branchName)
+                    .get();
+            Request request = builder.build();
+            final Call call = client.newCall(request);
+            Response response = call.execute();
+            List<CommitVO> commitVOList = new ArrayList<>();
+            commitVOList = processResponse(objectMapper, response, new TypeReference<List<CommitVO>>() {
+            });
+            return commitVOList;
+        } catch (JsonProcessingException e) {
+            logger.error("JSON writeValueAsString error", e);
+            throw SeecoderGitlabException.JSON_ERROR;
+        } catch (IOException e) {
+            logger.error("IOException", e);
+            throw SeecoderGitlabException.IO_ERROR;
+        }
+    }
+
+    @Override
+    public CommitVO getCommitByHash(int projectId, String hash) throws SeecoderGitlabException {
+        try {
+            ObjectMapper objectMapper = new ObjectMapper();
+            Request.Builder builder = new Request.Builder()
+                    .addHeader("Authorization", token);
+            builder = builder
+                    .url(host + "/api/project/" + projectId + "/branch-commit/" + hash)
+                    .get();
+            Request request = builder.build();
+            final Call call = client.newCall(request);
+            Response response = call.execute();
+            return processResponse(objectMapper, response, new TypeReference<CommitVO>() {});
+        } catch (JsonProcessingException e) {
+            logger.error("JSON writeValueAsString error", e);
+            throw SeecoderGitlabException.JSON_ERROR;
+        } catch (IOException e) {
+            logger.error("IOException", e);
+            throw SeecoderGitlabException.IO_ERROR;
+        }
+    }
+
     @Override
     public List<BranchVO> getProjectBranches(int projectId) throws SeecoderGitlabException {
         try {

+ 6 - 0
seecoder-gitlab-server/src/main/java/com/nju/edu/gitlab/controller/GitlabProjectController.java

@@ -96,6 +96,12 @@ public class GitlabProjectController {
         return new ResourceResponse(projectService.getCommitsByBranch(projectId, branchName));
     }
 
+    @GetMapping("{projectId}/commitInfo/{commitHash}")
+    public Response getCommitByHash(@PathVariable(name = "projectId") Integer projectId,
+                                  @PathVariable(name = "commitHash") String hash) throws GitLabApiException{
+        return new ResourceResponse(projectService.getCommitByHash(projectId, hash));
+    }
+
     @GetMapping("/{projectId}/branches")
     public Response getAllBranches(@PathVariable(name = "projectId") Integer projectId) throws GitLabApiException {
         return new ResourceResponse(projectService.getProjectBranches(projectId));

+ 2 - 0
seecoder-gitlab-server/src/main/java/com/nju/edu/gitlab/service/api/ProjectService.java

@@ -46,6 +46,8 @@ public interface ProjectService {
 
     public List<CommitVO> getAllCommitMessage(int projectId,String commitHash) throws GitLabApiException;
 
+    public CommitVO getCommitByHash(int projectId, String commitHash) throws GitLabApiException;
+
     public List<CommitVO> getCommitsByBranch(int projectId, String branchName) throws GitLabApiException;
 
     public List<BranchVO> getProjectBranches(int projectId) throws GitLabApiException;

+ 28 - 0
seecoder-gitlab-server/src/main/java/com/nju/edu/gitlab/service/impl/ProjectServiceImpl.java

@@ -219,6 +219,12 @@ public class ProjectServiceImpl implements ProjectService {
         return Collections.emptyList();
     }
 
+    @Override
+    public CommitVO getCommitByHash(int projectId, String commitHash) throws GitLabApiException {
+        Commit commit=gitlabApi.getCommitsApi().getCommit(projectId,commitHash);
+        return castCommitToVO(commit);
+    }
+
     @Override
     public List<CommitVO> getCommitsByBranch(int projectId, String branchName) throws GitLabApiException {
         List<Commit> commits=gitlabApi.getCommitsApi().getCommits(projectId, branchName,null,null);
@@ -253,6 +259,28 @@ public class ProjectServiceImpl implements ProjectService {
                 .build();
     }
 
+    private CommitVO castCommitToVO(Commit commit){
+        return CommitVO.builder()
+//                .author(String.valueOf(commit.getAuthor().getId())) //todo 好像没这些属性
+                .authoredDate(commit.getAuthoredDate())
+                .authorEmail(commit.getAuthorEmail())
+                .authorName(commit.getAuthorName())
+                .committedDate(commit.getCommittedDate())
+                .committerEmail(commit.getCommitterEmail())
+                .committerName(commit.getCommitterName())
+                .createdAt(commit.getCreatedAt())
+                .id(commit.getId())
+                .message(commit.getMessage())
+                .parentIds(commit.getParentIds())
+                .shortId(commit.getShortId())
+//                .stats(new CommitStatsVO(commit.getStats()))
+//                .status(commit.getStatus())
+//                .timestamp(commit.getTimestamp())
+                .title(commit.getTitle())
+//                .url(commit.getUrl())
+                .build();
+    }
+
     @Override
     public List<BranchVO> getProjectBranches(int projectId) throws GitLabApiException {
         return gitlabApi.getRepositoryApi().getBranches(projectId).stream()