Как создать ловушку BitBucket, которая отклоняет нажатия с неверным именем файла? - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь создать хук BitBucket, который бы отклонял push, если он содержал файл, не соответствующий соглашению об именах.Пока что я могу создать реализацию 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 всегда возвращается ноль.

Любая помощьв получении списка имен файлов будет приветствоваться.Спасибо.

1 Ответ

0 голосов
/ 07 ноября 2018
@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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...