diff options
| author | shizhendong <[email protected]> | 2024-11-15 18:07:01 +0800 |
|---|---|---|
| committer | shizhendong <[email protected]> | 2024-11-15 18:07:01 +0800 |
| commit | b368080eafbd775d5b83fb2df9551bae7c6eb8d7 (patch) | |
| tree | 8eba6fa77ee9fddb48b29d0f705541708fab8f0a | |
| parent | 19369da30b8eaaa79261bb2412ba48e117a28d11 (diff) | |
fix: diff commit 遇到 merge 时,parentId 取 parent[0] 当作 oldCommit
| -rw-r--r-- | src/main/java/net/geedge/asw/module/app/service/impl/GitServiceImpl.java | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/src/main/java/net/geedge/asw/module/app/service/impl/GitServiceImpl.java b/src/main/java/net/geedge/asw/module/app/service/impl/GitServiceImpl.java index d0436cb..3a14315 100644 --- a/src/main/java/net/geedge/asw/module/app/service/impl/GitServiceImpl.java +++ b/src/main/java/net/geedge/asw/module/app/service/impl/GitServiceImpl.java @@ -323,8 +323,8 @@ public class GitServiceImpl implements IGitService { while (iterator.hasNext()) { RevCommit currentCommit = iterator.next(); if (currentCommit.getId().getName().equals(commitId)) { - if (iterator.hasNext()) { - parentCommitId = iterator.next().getName(); + if (currentCommit.getParentCount() > 0) { + parentCommitId = currentCommit.getParent(0).getName(); } break; } @@ -370,23 +370,33 @@ public class GitServiceImpl implements IGitService { * 获取 commitIdA -> commitIdB 文件差异 * * @param workspaceId - * @param commitIdA - * @param commitIdB + * @param newCommitId + * @param oldCommitId * @return */ @Override - public List<Map<Object, Object>> getDiffFileListInCommits(String workspaceId, String commitIdA, String commitIdB) { - log.info("[getDiffFileListInCommits] [begin] [workspaceId: {}] [commitIdA: {}] [commitIdB: {}]", workspaceId, commitIdA, commitIdB); + public List<Map<Object, Object>> getDiffFileListInCommits(String workspaceId, String newCommitId, String oldCommitId) { + log.info("[getDiffFileListInCommits] [begin] [workspaceId: {}] [newCommitId: {}] [oldCommitId: {}]", workspaceId, newCommitId, oldCommitId); try (Git git = this.getGitInstance(workspaceId); Repository repository = git.getRepository(); RevWalk revWalk = new RevWalk(repository); DiffFormatter diffFormatter = new DiffFormatter(null)) { - CanonicalTreeParser oldTree = new CanonicalTreeParser(); - oldTree.reset(repository.newObjectReader(), revWalk.parseCommit(repository.resolve(commitIdB)).getTree()); + RevCommit oldCommit = revWalk.parseCommit(repository.resolve(oldCommitId)); + RevCommit newCommit = revWalk.parseCommit(repository.resolve(newCommitId)); + + if (newCommit.getParentCount() > 0) { + final RevWalk rw = new RevWalk(repository); + oldCommit = rw.parseCommit(newCommit.getParent(0).getId()); + rw.dispose(); + } + // oldTree + CanonicalTreeParser oldTree = new CanonicalTreeParser(); + oldTree.reset(repository.newObjectReader(), oldCommit.getTree()); + // newTree CanonicalTreeParser newTree = new CanonicalTreeParser(); - newTree.reset(repository.newObjectReader(), revWalk.parseCommit(repository.resolve(commitIdA)).getTree()); + newTree.reset(repository.newObjectReader(), newCommit.getTree()); // diff List<Map<Object, Object>> files = T.ListUtil.list(true); @@ -462,7 +472,7 @@ public class GitServiceImpl implements IGitService { } return files; } catch (IOException e) { - log.error(e, "[getDiffFileListInCommits] [error] [workspaceId: {}] [newCommitId: {}] [oldCommitId: {}]", workspaceId, commitIdA, commitIdB); + log.error(e, "[getDiffFileListInCommits] [error] [workspaceId: {}] [newCommitId: {}] [oldCommitId: {}]", workspaceId, newCommitId, oldCommitId); throw new RuntimeException(e); } } |
