Bitbucket API PostRepositoryHook не вызывается при слиянии запроса на вытягивание

Я использую PostRepositoryHook для разработки плагина для прослушивания всех толчков, сделанных разработчиком. Во время тестирования я понял, что это работает, когда я тестирую его с помощью командной строки для запуска команды git push. Однако это не работает, когда я делаю PR и сливаю свой PR.

Ниже приведены сведения о коде.

// LoggingPostRepositoryHook.java

import com.atlassian.bitbucket.hook.repository.PostRepositoryHook;
import com.atlassian.bitbucket.hook.repository.PostRepositoryHookContext;
import com.atlassian.bitbucket.hook.repository.RepositoryHookRequest;
import com.atlassian.bitbucket.hook.repository.SynchronousPreferred;


import javax.annotation.Nonnull;

/**
 * Example hook that logs what changes have been made to a set of refs
 */
@SynchronousPreferred(asyncSupported = false)
public class LoggingPostRepositoryHook implements PostRepositoryHook<RepositoryHookRequest> {

    @Override
    public void postUpdate(@Nonnull PostRepositoryHookContext context,
                           @Nonnull RepositoryHookRequest hookRequest) {

        String message = hookRequest.getRepository().getProject()+" "+ hookRequest.getRepository().getName();
        PostMessage postMessage = new PostMessage();
        postMessage.send(message);
        hookRequest.getScmHookDetails().ifPresent(scmDetails -> {
            hookRequest.getRefChanges().forEach(refChange -> {
                scmDetails.out().println("Thank you for pusing code! "+ message);
            });
        });


    }
}

// atlassian-plugin.xml
<repository-hook key="logging-hook" name="Logging Post Hook"
                   i18n-name-key="hook.guide.logginghook.name"
                   configurable="false"
                   class="com.myapp.impl.LoggingPostRepositoryHook">
    <description key="hook.guide.logginghook.description" />
  </repository-hook>


// PostMessage.java
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClientBuilder;

public class PostMessage {
    public void send(String message) {

        HttpClient httpClient = HttpClientBuilder.create().build(); //Use this instead

        try {

            HttpPost request = new HttpPost("http://localhost:3008/git-hooks");
            StringEntity params =new StringEntity("details={\"message\":\""+message+"\"} ");
            request.addHeader("content-type", "application/x-www-form-urlencoded");
            request.setEntity(params);
            HttpResponse response = httpClient.execute(request);

            //handle response here...

        }catch (Exception ex) {

            //handle exception here
            System.out.println(ex);

        }
    }
}

Пожалуйста помоги.


person joy    schedule 04.05.2018    source источник
comment
откуда ты знаешь, что хук не работает?   -  person Yuri G.    schedule 04.05.2018
comment
Я отправляю message в REST API для тестирования. Когда я тестировал с командной строкой git push, я вижу сообщение, полученное REST API. Однако, когда я тестировал то же самое с PR, я не вижу никаких сообщений, полученных REST API.   -  person joy    schedule 04.05.2018
comment
PostMessage postMessage = new PostMessage(); postMessage.send(message); это позаботится об отправке образца сообщения.   -  person joy    schedule 04.05.2018


Ответы (1)


Почитав больше про битбакет апи, я понял, что @SynchronousPreferred(asyncSupported = false) не нужен, как только я его убрал, теперь RepositoryHookRequest работает для всех трех категорий

  1. Нажмите на репо
  2. Онлайн редактирование
  3. PR слияние >> Этот триггер два, один для слияния PR и второй для отправки в целевой репозиторий

Ниже приведен код для справки.

import com.atlassian.bitbucket.hook.repository.PostRepositoryHook;
import com.atlassian.bitbucket.hook.repository.PostRepositoryHookContext;
import com.atlassian.bitbucket.hook.repository.RepositoryHookRequest;

import javax.annotation.Nonnull;

public class PostCommitGlobalHook implements PostRepositoryHook<RepositoryHookRequest> {
    @Override
    public void postUpdate(@Nonnull PostRepositoryHookContext context,
                           @Nonnull RepositoryHookRequest hookRequest) {
        // Pass request to handler
        PostHookHandler handler = new PostHookHandler();
        handler.handleRequest(hookRequest);
    }
}
person joy    schedule 01.06.2018