我有一个开始提交,我想从中找到所有分支,直到我到达另一个没有找到提交的注释。
commit 1
|
commit 2
| commit5
commit3 /
| /
commit 4
|
commit 6
在这种情况下,假设来自提交 1-5 的所有提交都有注释“查找分支”,而提交 6 没有带有该值的 not。
所以我将从提交 1 开始查找所有父项(即:提交 2)并尝试检查是否有此提交的分支(即:子项的数量大于 1)。如果有超过 1 个孩子
- 该
getChildren()
方法仅适用于 PlotCommit 对象,但该方法parentCommit.getParents()
仅返回RevCommit
Object。 - 我想找到特定提交中存在的分支名称
然后当提交上没有更多注释时(即提交 6 没有注释),逻辑将停在那里并返回分支名称的集合
Repository repo;//will be set as part of some other logic
private Set findBranchesForCommit(PlotCommit parentCommit, String note) throws ExecutionException, MissingObjectException, IncorrectObjectTypeException, IOException {
Set branches = new HashSet();
PlotCommit[] parents = (PlotCommit[]) parentCommit.getParents();//XXX will throw exception as this return RevCommit[]
for (int i = 0; i < parents .length; i++) {
PlotCommit commit = parents[i];
String result = extractExistingMessage(repo, "refs/notes", commit);//will return the if the note available for particular commit
if (result.trim().length() > 0 && result.equalsIgnoreCase(note)) {
System.out.println("#########"+commit.getChildCount());
//TODO need to add logic to find the branch of the particular commit
branches.add(""); //add the branches available for the commit
branches.addAll(findBranchesForCommit(commit, note));
}
}
return branches;
}
预期结果
我想找到包含特定 git note 的提交的分支名称。在上面的示例中,将返回 Commit 1 和 commit 5 的分支名称