コミットのメモが見つからない別のブランチに到達するまで、すべてのブランチを見つけたい開始コミットがあります。
commit 1
|
commit 2
| commit5
commit3 /
| /
commit 4
|
commit 6
この場合、コミット 1 ~ 5 のすべてのコミットに「find branch」というメモがあり、コミット 6 にはその値の not がないと言います。
したがって、コミット 1 から始めて、すべての親を検索し (つまり、コミット 2)、このコミットのブランチがあるかどうかを確認しようとします (つまり、子の数が 1 より大きい)。子が複数いる場合
getChildren()
メソッドは PlotCommit オブジェクトに対してのみ存在しますが、メソッドはObjectparentCommit.getParents()
のみを返しますRevCommit
。- 特定のコミットに存在するブランチ名を見つけたい
その後、コミットに関するメモがなくなると (つまり、コミット 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 ノートを含むコミットのブランチ名を見つけたいです。上記の例では、コミット 1 とコミット 5 のブランチ名が返されます