2

我正在尝试编写一个存储插件,该插件将遍历推送到存储在预接收存储库挂钩中的更改集中的提交。

API 在 onReceive 方法中传递一个 refChange 集合。

public boolean onReceive(RepositoryHookContext context, Collection<RefChange> refChanges, HookResponse hookResponse)

如果我进行 3 次提交,然后推送,我会得到一个 RefChange,它看起来像这样

refId = refs/heads/master
fromHash = ded3e4583653f14892cc3e8a898ba74ee75e1a58 // First Commit in change set
toHash = ae017dcdadf7ca69617fb05f6905cccfe2aa4229 // Most recent commit
type = "UPDATE"

我想获取所有提交的集合,以便我可以获得所有提交消息。

我正在查看 com.atlassian.stash.commit.CommitService getCommit 和 getCommits。我想我需要 getCommitsBetween 但不能完全弄清楚如何从我拥有的 RefChange 中创建所需的 GetCommitsBetween 参数。

我什至走在正确的道路上吗?

4

2 回答 2

3

尽管CommitsBetweenRequestAtlassian Stash API 文档上的页面是为数不多的有解释的页面之一,但还是需要反复试验才能弄清楚这一点。GetCommitsBetween有效,但这是诀窍......

将 设置commitsBetweenBuilder.exclude为更改集中的开始提交和commitsBetweenBuilder.include结束提交哈希。

CommitsBetweenRequest.Builder commitsBetweenBuilder = new CommitsBetweenRequest.Builder(context.getRepository() );
commitsBetweenBuilder.exclude(refChange.getFromHash()); //Starting with
commitsBetweenBuilder.include(refChange.getToHash()); // ending with

PageRequest pageRequest = new PageRequestImpl(0,6);

Page<Commit> commits = commitService.getCommitsBetween(commitsBetweenBuilder.build(), pageRequest);

//TODO: handle Pages
for (Commit commit : commits.getValues()) {
   hookResponse.out().println("Message = " + commit.getMessage() + "\n");
}
于 2015-03-14T20:54:21.637 回答
-2

我无法让依赖注入为 CommitService 工作。尝试在本地运行时,Spring由于某种原因无法找到它???

我确实使用组件定位器让它工作。

CommitService commitService = ComponentLocator.getComponent(CommitService.class);
于 2015-10-28T22:49:11.000 回答