Files
SCM-Manager/docs/en/known-issues.md
2020-05-06 15:41:14 +02:00

62 lines
1.9 KiB
Markdown

---
title: Known Issues
---
## Asnychronous PreReceiveRepositoryHooks do not work with subversion
The following example will fail to log the changesets.
```java
import com.github.legman.Subscribe;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.plugin.Extension;
import sonia.scm.repository.Changeset;
import sonia.scm.repository.PreReceiveRepositoryHookEvent;
import sonia.scm.repository.api.HookChangesetBuilder;
@Extension
@EagerSingleton
public class DemoHook {
private static final Logger LOG = LoggerFactory.getLogger(DemoHook.class);
@Subscribe
public void handleEvent(PreReceiveRepositoryHookEvent event) {
HookChangesetBuilder changesetProvider = event.getContext().getChangesetProvider();
for (Changeset c : changesetProvider.getChangesets()) {
LOG.warn("received {} hook for changeset: {}", event.getType(), c.getId());
}
}
}
```
This is because of the transaction management of subversion. The scm-manager subversion provider becomes a transaction id for the changes of the current push, but the transaction has finished before scm-manager can resolve the incoming commit. To solve the issue, we could use a synchronous subscription instead e.g.:
```java
import com.github.legman.Subscribe;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.plugin.Extension;
import sonia.scm.repository.Changeset;
import sonia.scm.repository.PreReceiveRepositoryHookEvent;
import sonia.scm.repository.api.HookChangesetBuilder;
@Extension
@EagerSingleton
public class DemoHook {
private static final Logger LOG = LoggerFactory.getLogger(DemoHook.class);
@Subscribe(async = false)
public void handleEvent(PreReceiveRepositoryHookEvent event) {
HookChangesetBuilder changesetProvider = event.getContext().getChangesetProvider();
for (Changeset c : changesetProvider.getChangesets()) {
LOG.warn("received {} hook for changeset: {}", event.getType(), c.getId());
}
}
}
```