使用 API 调用来检索在还原 Gerrit 更改时生成的提交 ID

Using API calls to retrieve commit ID that is generated when you revert a Gerrit change

我一直在尝试使用 https://github.com/uwolfer/gerrit-rest-java-client 从还原的 Gerrit 更改中检索生成的提交 ID,但未能找到这样做的方法。

我一直试图获取此 ID 的方法之一是尝试获取相关更改列表的访问权限。
REST API documentation 表明您可以使用查询来检索此列表。
如何使用 API 调用检索此列表?
还有另一种方法来检索此提交 ID 吗?

我想用它来跟踪还原并能够分析此还原对项目可能产生的影响。

找到了解决这个问题的方法。我所做的是在查询中添加一个“&o=MESSAGES”标签以检索完整的更改历史列表,其中还原消息为您提供目标提交 ID。

然后我将返回的 Collection<> 传输到列表中,这样我就可以轻松访问所有消息。

Collection<ChangeMessageInfo> messageColl = gerritClient.changes().query("commit:<commitID>&o=MESSAGES").get().get(0).messages;
final List<ChangeMessageInfo> messageList = new ArrayList<>(messageColl);

还原消息通常是更改历史记录的最后一个条目。
可以找到可以以类似方式使用的标签列表 here。您需要向下滚动一点才能找到标签。

更新:
找到了一种更有效的方法来查找还原的提交。
使用下面的代码,您可以在 Gerrit 上检索主题下方的正文消息,这反过来又可以查询该字段中显示的提交 ID。

List<String> revertedCommits = new ArrayList<>();
revertedCommits.add(<commitID>);
String revertedCommit = "unknown";
Map<String, RevisionInfo> revisionInfo = gerritClient.changes().query("commit:" + revertedCommits.get(revertedCommits.size() - 1) + "&o=CURRENT_REVISION&o=COMMIT_FOOTERS").get().get(0).revisions;
Pattern p = Pattern.compile(Pattern.quote("This reverts commit ") + "(.*?)" + Pattern.quote("."));
Matcher m = p.matcher(revisionInfo.values().iterator().next().commitWithFooters);
while (m.find()) {
    revertedCommit = m.group(1);
}

然后可以对其进行迭代以找到与第一个提交相关的所有还原。
请注意,我在查询中使用“&o=CURRENT_REVISION”和“&o=COMMIT_FOOTERS”标记来访问此信息。没有这些标签,您只会得到一个空数组。