代码之家  ›  专栏  ›  技术社区  ›  sam schonstal

如何在Atlassian Stash预接收存储库挂钩中从refChanges获取提交列表

  •  2
  • sam schonstal  · 技术社区  · 9 年前

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

    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中找到GetCommitsBetbetween参数。

    我走的路对吗?

    2 回复  |  直到 9 年前
        1
  •  4
  •   reduckted    7 年前

    尽管 CommitsBetweenRequest Atlassian 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");
    }
    
        2
  •  -2
  •   ajitksharma    9 年前

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

    我使用组件定位器使其工作。

    CommitService commitService = ComponentLocator.getComponent(CommitService.class);