diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/integration/impl/GitServiceIntegrationImpl.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/integration/impl/GitServiceIntegrationImpl.java index 397b2820..e9df702f 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/integration/impl/GitServiceIntegrationImpl.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/integration/impl/GitServiceIntegrationImpl.java @@ -30,7 +30,6 @@ import java.util.stream.Collectors; public class GitServiceIntegrationImpl implements IGitServiceIntegration { private final RestTemplate restTemplate = new RestTemplate(); - private static final DateTimeFormatter GITLAB_DATE_FORMATTER = DateTimeFormatter.ISO_DATE_TIME; @Override public boolean testConnection(ExternalSystem system) { @@ -38,14 +37,14 @@ public class GitServiceIntegrationImpl implements IGitServiceIntegration { String url = system.getUrl() + "/api/v4/version"; HttpHeaders headers = createHeaders(system); HttpEntity entity = new HttpEntity<>(headers); - + ResponseEntity response = restTemplate.exchange( url, HttpMethod.GET, entity, String.class ); - + return response.getStatusCode() == HttpStatus.OK; } catch (Exception e) { log.error("Git connection test failed for system: {}", system.getName(), e); @@ -64,7 +63,8 @@ public class GitServiceIntegrationImpl implements IGitServiceIntegration { url, HttpMethod.GET, entity, - new ParameterizedTypeReference<>() {} + new ParameterizedTypeReference<>() { + } ); return response.getBody() != null ? response.getBody() : Collections.emptyList(); @@ -85,7 +85,8 @@ public class GitServiceIntegrationImpl implements IGitServiceIntegration { url, HttpMethod.GET, entity, - new ParameterizedTypeReference<>() {} + new ParameterizedTypeReference<>() { + } ); return response.getBody() != null ? response.getBody() : Collections.emptyList(); @@ -106,7 +107,8 @@ public class GitServiceIntegrationImpl implements IGitServiceIntegration { url, HttpMethod.GET, entity, - new ParameterizedTypeReference<>() {} + new ParameterizedTypeReference<>() { + } ); return response.getBody() != null ? response.getBody() : Collections.emptyList(); @@ -122,27 +124,18 @@ public class GitServiceIntegrationImpl implements IGitServiceIntegration { String url = String.format("%s/api/v4/projects/%d/repository/branches?per_page=100", system.getUrl(), projectId); HttpHeaders headers = createHeaders(system); HttpEntity entity = new HttpEntity<>(headers); - - // 先获取原始响应以便调试 - ResponseEntity rawResponse = restTemplate.exchange( - url, - HttpMethod.GET, - entity, - String.class - ); - log.info("GitLab API response for branches: {}", rawResponse.getBody()); - // 然后解析为对象 ResponseEntity> response = restTemplate.exchange( url, HttpMethod.GET, entity, - new ParameterizedTypeReference<>() {} + new ParameterizedTypeReference<>() { + } ); List branches = response.getBody(); if (branches != null && !branches.isEmpty()) { - log.info("Found {} branches, first branch: {}", branches.size(), branches.get(0).getName()); + log.info("Found {} branches, first branch: {}", branches.size(), branches.getFirst().getName()); } else { log.warn("No branches found for project: {}", projectId); } @@ -160,7 +153,7 @@ public class GitServiceIntegrationImpl implements IGitServiceIntegration { private HttpHeaders createHeaders(ExternalSystem system) { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); - + // 根据认证类型设置认证信息 switch (system.getAuthType()) { case BASIC -> { @@ -180,93 +173,7 @@ public class GitServiceIntegrationImpl implements IGitServiceIntegration { } default -> throw new RuntimeException("Unsupported authentication type: " + system.getAuthType()); } - + return headers; } -} - -/** - * GitLab事件响应对象 - */ -class GitlabEvent { - private String action; - private String targetType; - private String targetBranch; - private LocalDateTime createdAt; - - // Getters and setters - public String getAction() { - return action; - } - - public void setAction(String action) { - this.action = action; - } - - public String getTargetType() { - return targetType; - } - - public void setTargetType(String targetType) { - this.targetType = targetType; - } - - public String getTargetBranch() { - return targetBranch; - } - - public void setTargetBranch(String targetBranch) { - this.targetBranch = targetBranch; - } - - public LocalDateTime getCreatedAt() { - return createdAt; - } - - public void setCreatedAt(LocalDateTime createdAt) { - this.createdAt = createdAt; - } -} - -/** - * GitLab仓库事件响应对象 - */ -class GitlabRepositoryEvent { - private String actionName; - private String refType; - private String ref; - private LocalDateTime createdAt; - - // Getters and setters - public String getActionName() { - return actionName; - } - - public void setActionName(String actionName) { - this.actionName = actionName; - } - - public String getRefType() { - return refType; - } - - public void setRefType(String refType) { - this.refType = refType; - } - - public String getRef() { - return ref; - } - - public void setRef(String ref) { - this.ref = ref; - } - - public LocalDateTime getCreatedAt() { - return createdAt; - } - - public void setCreatedAt(LocalDateTime createdAt) { - this.createdAt = createdAt; - } } \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/RepositoryBranchServiceImpl.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/RepositoryBranchServiceImpl.java index a24c91ea..49197a48 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/RepositoryBranchServiceImpl.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/RepositoryBranchServiceImpl.java @@ -17,7 +17,6 @@ import com.qqchen.deploy.backend.framework.enums.ResponseCode; import com.qqchen.deploy.backend.framework.exception.BusinessException; import com.qqchen.deploy.backend.framework.service.impl.BaseServiceImpl; import com.qqchen.deploy.backend.deploy.dto.RepositorySyncHistoryDTO; -import com.qqchen.deploy.backend.deploy.entity.RepositorySyncHistory; import com.qqchen.deploy.backend.deploy.service.IRepositorySyncHistoryService; import com.qqchen.deploy.backend.deploy.repository.IRepositorySyncHistoryRepository; import jakarta.annotation.Resource; @@ -32,15 +31,14 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.ArrayList; -import java.util.Collections; import java.util.Set; import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; import java.util.stream.Collectors; -import java.time.LocalDateTime; + +import java.util.Objects; /** * Git仓库分支服务实现 @@ -65,9 +63,6 @@ public class RepositoryBranchServiceImpl extends BaseServiceImpl projectBranches = existingBranchMap.getOrDefault(remoteBranch.getName(), new HashMap<>()); RepositoryBranch branch = projectBranches.getOrDefault(project.getId(), new RepositoryBranch()); - // 更新分支信息 - updateBranchInfo(branch, externalSystemId, project.getId(), project.getProjectId(), remoteBranch); - branchesToUpdate.add(branch); + // 检查分支是否有更新 + if (isBranchChanged(branch, remoteBranch)) { + // 更新分支信息 + updateBranchInfo(branch, externalSystemId, project.getId(), project.getProjectId(), remoteBranch); + branchesToUpdate.add(branch); + log.debug("Branch {} has changes, will be updated", remoteBranch.getName()); + } else { + log.debug("Branch {} has no changes, skipping update", remoteBranch.getName()); + } + processedBranches.add(remoteBranch.getName()); totalSyncedBranches.incrementAndGet(); } @@ -223,6 +225,41 @@ public class RepositoryBranchServiceImpl extends BaseServiceImpl