bitbucket-server - 如何创建一个拒绝使用错误文件名推送的 BitBucket 挂钩?
问题描述
我正在尝试制作一个 BitBucket 挂钩,如果它包含与命名约定不匹配的文件,它将拒绝推送。到目前为止,我已经能够创建注册以下回调的 PreRepositoryHook 实现。
public class MyPreRepositoryHook implements PreRepositoryHook<RepositoryHookRequest> {
public MyPreRepositoryHook () {
}
@Nonnull
@Override
public RepositoryHookResult preUpdate(@Nonnull PreRepositoryHookContext context,
@Nonnull RepositoryHookRequest request) {
// hook only wants commits added to the repository
context.registerCommitCallback(
new MyPreCommitCallback(),
RepositoryHookCommitFilter.ADDED_TO_REPOSITORY);
// return accepted() here, the callback gets a chance to reject the change when getResult() is called
return RepositoryHookResult.accepted();
}
在 MyPreCommitCallback 中:
@Override
public boolean onCommitAdded(@Nonnull CommitAddedDetails commitDetails) {
Commit commit = commitDetails.getCommit();
SimpleChangeset.Builder builder = new SimpleChangeset.Builder(commit);
SimpleChangeset simpleChangeset = builder.build();
Page<Change> changes = simpleChangeset.getChanges();
}
但是我无法获取文件列表,因为对 simpleChangeset.getChanges 的调用总是返回 null。
获取文件名列表的任何帮助将不胜感激。谢谢你。
解决方案
@Component
public class AltresPreRepositoryHook implements PreRepositoryHook<RepositoryHookRequest> {
private final CommitService commitService;
@Autowired
public AltresPreRepositoryHook(@ComponentImport CommitService commitService) {
this.commitService = commitService;
}
private static class AltresPreCommitCallback implements PreRepositoryHookCommitCallback {
private final RepositoryHookRequest request;
private final CommitService commitService;
private RepositoryHookResult result = RepositoryHookResult.accepted();
public AltresPreCommitCallback(RepositoryHookRequest request, CommitService commitService) {
this.request = request;
this.commitService = commitService;
}
@Nonnull
@Override
public RepositoryHookResult getResult() {
return result;
}
@Override
public boolean onCommitAdded(@Nonnull CommitAddedDetails commitDetails) {
Commit commit = commitDetails.getCommit();
ChangesRequest.Builder builder = new ChangesRequest.Builder(commit.getRepository(), commit.getId());
ChangesRequest changesRequest = builder.build();
final ChangedPathsCollector changedPathsCollector = new ChangedPathsCollector();
commitService.streamChanges(changesRequest, changedPathsCollector);
Collection<String> changedPaths = changedPathsCollector.getChangedPaths();
推荐阅读
- android - 如果初始选项卡选择为索引 0,为什么不触发 myTabSelectedListener?
- python - Pandas left join - 如何用 NaN 替换第二个 df 中不存在的值
- java - Logback 无法按时间拆分日志
- scrapy - 当错误的请求号码到达我设置的号码时停止爬虫的最佳实践
- jquery - 如何在 Django 中正确执行 AJAX 请求
- django - 为简单视图验证 JSON
- python - Python:使用BeautifulSoup抓取数据时如何在excel xlsx文件上方添加列
- ios - swift中可选绑定的含义是什么
- machine-learning - 基于无监督方面的情感分析中的问题
- javascript - 获得 Cookie 同意后如何加载 Adsense?