1
0
Просмотр исходного кода

fix: 当用户已经fork过项目后再次fork时返回之前fork的id

Azure 2 лет назад
Родитель
Сommit
06b5496a04

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

@@ -100,6 +100,9 @@ public class ProjectServiceImpl implements ProjectService {
         Integer namespaceId=gitlabUser.getNamespaceId();
         Project project;
         log.info("trying to fork project {} to user {} (whose gitlab id is {})", projectId, userId, gitlabUser.getGitlabUserId());
+        Integer existProjectId=searchForkedProject(namespaceId, projectId);
+        if(existProjectId!=-1)
+            return existProjectId;
         try{
             gitlabApi.setSudoAsId((long) gitlabUser.getGitlabUserId());
             project=gitlabApi.getProjectApi().forkProject(new Long(projectId), String.valueOf(namespaceId));
@@ -108,10 +111,21 @@ public class ProjectServiceImpl implements ProjectService {
         }finally {
             gitlabApi.unsudo();
         }
-
         return Math.toIntExact(project != null ? project.getId() : null);
     }
 
+    public Integer searchForkedProject(int namespaceId, int projectId) throws GitLabApiException {
+        try {
+            Project forkedProject = gitlabApi.getProjectApi().getProject(new Long(projectId));
+            Project project=gitlabApi.getProjectApi().getProject(String.valueOf(namespaceId),forkedProject.getName());
+            return Math.toIntExact(project.getId());
+        } catch (GitLabApiException e){
+            // 404 project not found
+            return  -1;
+        }
+    }
+
+
     @Override
     public Integer forkGroupProject(GroupForkDTO groupForkDTO) throws GitLabApiException {
         int groupId=groupForkDTO.getGroupId();