mirror of
https://github.com/scm-manager/scm-manager.git
synced 2026-05-06 15:07:25 +02:00
Use repository id as id for import log
This commit is contained in:
@@ -39,12 +39,10 @@ import sonia.scm.event.Event;
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class RepositoryImportEvent extends RepositoryEvent {
|
||||
|
||||
private final String logId;
|
||||
private final boolean failed;
|
||||
|
||||
public RepositoryImportEvent(HandlerEventType eventType, Repository repository, String logId, boolean failed) {
|
||||
public RepositoryImportEvent(HandlerEventType eventType, Repository repository, boolean failed) {
|
||||
super(eventType, repository);
|
||||
this.logId = logId;
|
||||
this.failed = failed;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -86,21 +86,21 @@ public class FromBundleImporter {
|
||||
RepositoryImportLogger logger = loggerFactory.createLogger();
|
||||
|
||||
try {
|
||||
logger.start(DUMP, repository);
|
||||
repository = manager.create(repository, unbundleImport(inputStream, compressed, logger));
|
||||
logger.finished();
|
||||
} catch (Exception e) {
|
||||
logger.failed(e);
|
||||
eventBus.post(new RepositoryImportEvent(HandlerEventType.CREATE, repository, logger.getLogId(), true));
|
||||
eventBus.post(new RepositoryImportEvent(HandlerEventType.CREATE, repository, true));
|
||||
throw e;
|
||||
}
|
||||
|
||||
eventBus.post(new RepositoryImportEvent(HandlerEventType.CREATE, repository, logger.getLogId(), false));
|
||||
eventBus.post(new RepositoryImportEvent(HandlerEventType.CREATE, repository, false));
|
||||
return repository;
|
||||
}
|
||||
|
||||
private Consumer<Repository> unbundleImport(InputStream inputStream, boolean compressed, RepositoryImportLogger logger) {
|
||||
return repository -> {
|
||||
logger.start(DUMP, repository);
|
||||
File workdir = workdirProvider.createNewWorkdir(repository.getId());
|
||||
try (RepositoryService service = serviceFactory.create(repository)) {
|
||||
logger.step("writing temporary dump file");
|
||||
|
||||
@@ -81,25 +81,24 @@ public class FromUrlImporter {
|
||||
repository.setPermissions(singletonList(new RepositoryPermission(SecurityUtils.getSubject().getPrincipal().toString(), "OWNER", false)));
|
||||
|
||||
RepositoryImportLogger logger = loggerFactory.createLogger();
|
||||
logger.start(RepositoryImportLog.ImportType.URL, repository);
|
||||
Repository createdRepository;
|
||||
try {
|
||||
logger.step("creating repository");
|
||||
createdRepository = manager.create(
|
||||
repository,
|
||||
pullChangesFromRemoteUrl(parameters, logger)
|
||||
);
|
||||
} catch (Exception e) {
|
||||
logger.failed(e);
|
||||
eventBus.post(new RepositoryImportEvent(HandlerEventType.CREATE, repository, logger.getLogId(), true));
|
||||
eventBus.post(new RepositoryImportEvent(HandlerEventType.CREATE, repository, true));
|
||||
throw new ImportFailedException(noContext(), "Could not import repository from url " + parameters.getImportUrl(), e);
|
||||
}
|
||||
eventBus.post(new RepositoryImportEvent(HandlerEventType.CREATE, createdRepository, logger.getLogId(), false));
|
||||
eventBus.post(new RepositoryImportEvent(HandlerEventType.CREATE, createdRepository, false));
|
||||
return createdRepository;
|
||||
}
|
||||
|
||||
private Consumer<Repository> pullChangesFromRemoteUrl(RepositoryImportParameters parameters, RepositoryImportLogger logger) {
|
||||
return repository -> {
|
||||
logger.start(RepositoryImportLog.ImportType.URL, repository);
|
||||
try (RepositoryService service = serviceFactory.create(repository)) {
|
||||
PullCommandBuilder pullCommand = service.getPullCommand();
|
||||
if (!Strings.isNullOrEmpty(parameters.getUsername()) && !Strings.isNullOrEmpty(parameters.getPassword())) {
|
||||
@@ -124,6 +123,5 @@ public class FromUrlImporter {
|
||||
private String importUrl;
|
||||
private String username;
|
||||
private String password;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,7 +77,6 @@ public class FullScmRepositoryImporter {
|
||||
|
||||
public Repository importFromStream(Repository repository, InputStream inputStream, String password) {
|
||||
RepositoryPermissions.create().check();
|
||||
RepositoryImportLogger logger = startLogger(repository);
|
||||
try {
|
||||
if (inputStream.available() > 0) {
|
||||
try (
|
||||
@@ -86,7 +85,7 @@ public class FullScmRepositoryImporter {
|
||||
GzipCompressorInputStream gcis = new GzipCompressorInputStream(cif);
|
||||
TarArchiveInputStream tais = createTarInputStream(gcis)
|
||||
) {
|
||||
return run(repository, tais, logger);
|
||||
return run(repository, tais);
|
||||
}
|
||||
} else {
|
||||
throw new ImportFailedException(
|
||||
@@ -117,8 +116,10 @@ public class FullScmRepositoryImporter {
|
||||
return logger;
|
||||
}
|
||||
|
||||
private Repository run(Repository repository, TarArchiveInputStream tais, RepositoryImportLogger logger) throws IOException {
|
||||
ImportState state = new ImportState(repositoryManager.create(repository), logger);
|
||||
private Repository run(Repository repository, TarArchiveInputStream tais) throws IOException {
|
||||
Repository createdRepository = repositoryManager.create(repository);
|
||||
RepositoryImportLogger logger = startLogger(repository);
|
||||
ImportState state = new ImportState(createdRepository, logger);
|
||||
logger.repositoryCreated(state.getRepository());
|
||||
try {
|
||||
TarArchiveEntry tarArchiveEntry;
|
||||
@@ -127,10 +128,10 @@ public class FullScmRepositoryImporter {
|
||||
handle(tais, state, tarArchiveEntry);
|
||||
}
|
||||
stream(importSteps).forEach(step -> step.finish(state));
|
||||
logger.finished();
|
||||
state.getLogger().finished();
|
||||
return state.getRepository();
|
||||
} catch (RuntimeException | IOException e) {
|
||||
logger.failed(e);
|
||||
state.getLogger().failed(e);
|
||||
throw e;
|
||||
} finally {
|
||||
stream(importSteps).forEach(step -> step.cleanup(state));
|
||||
@@ -140,7 +141,7 @@ public class FullScmRepositoryImporter {
|
||||
} else {
|
||||
// Delete the repository if any error occurs during the import
|
||||
repositoryManager.delete(state.getRepository());
|
||||
eventBus.post(new RepositoryImportEvent(HandlerEventType.CREATE, repository, logger.getLogId(), true));
|
||||
eventBus.post(new RepositoryImportEvent(HandlerEventType.CREATE, repository, true));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ class RepositoryImportLogger {
|
||||
|
||||
private final DataStore<RepositoryImportLog> logStore;
|
||||
private RepositoryImportLog log;
|
||||
private String logId;
|
||||
private String repositoryId;
|
||||
|
||||
RepositoryImportLogger(DataStore<RepositoryImportLog> logStore) {
|
||||
this.logStore = logStore;
|
||||
@@ -42,6 +42,7 @@ class RepositoryImportLogger {
|
||||
|
||||
void start(ImportType importType, Repository repository) {
|
||||
User user = SecurityUtils.getSubject().getPrincipals().oneByType(User.class);
|
||||
repositoryId = repository.getId();
|
||||
log = new RepositoryImportLog();
|
||||
log.setType(importType);
|
||||
log.setUserId(user.getId());
|
||||
@@ -50,14 +51,10 @@ class RepositoryImportLogger {
|
||||
log.setNamespace(repository.getNamespace());
|
||||
log.setName(repository.getName());
|
||||
log.setRepositoryType(repository.getType());
|
||||
logId = logStore.put(log);
|
||||
logStore.put(repositoryId, log);
|
||||
addLogEntry(new RepositoryImportLog.Entry("import started"));
|
||||
}
|
||||
|
||||
public String getLogId() {
|
||||
return logId;
|
||||
}
|
||||
|
||||
public void finished() {
|
||||
log.setSuccess(true);
|
||||
step("import finished successfully");
|
||||
@@ -83,7 +80,7 @@ class RepositoryImportLogger {
|
||||
}
|
||||
|
||||
private void writeLog() {
|
||||
logStore.put(logId, log);
|
||||
logStore.put(repositoryId, log);
|
||||
}
|
||||
|
||||
private void addLogEntry(RepositoryImportLog.Entry entry) {
|
||||
|
||||
@@ -28,7 +28,6 @@ import com.google.common.io.Resources;
|
||||
import org.apache.shiro.authz.AuthorizationException;
|
||||
import org.apache.shiro.subject.Subject;
|
||||
import org.apache.shiro.util.ThreadContext;
|
||||
import org.assertj.core.api.InstanceOfAssertFactories;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Nested;
|
||||
import org.junit.jupiter.api.Test;
|
||||
@@ -62,6 +61,7 @@ import java.io.InputStream;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Collection;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
@@ -239,15 +239,20 @@ class FullScmRepositoryImporterTest {
|
||||
@Test
|
||||
void shouldSendImportedEventForImportedRepository() throws IOException {
|
||||
InputStream stream = Resources.getResource("sonia/scm/repository/import/scm-import.tar.gz").openStream();
|
||||
when(unbundleCommandBuilder.setPostEventSink(any())).thenAnswer(
|
||||
invocation -> {
|
||||
invocation.getArgument(0, Consumer.class).accept(new RepositoryHookEvent(null, REPOSITORY, null));
|
||||
return null;
|
||||
}
|
||||
);
|
||||
|
||||
fullImporter.importFromStream(REPOSITORY, stream, null);
|
||||
|
||||
verify(eventBus).post(argThat(
|
||||
event -> {
|
||||
assertThat(event).isInstanceOf(RepositoryImportEvent.class);
|
||||
RepositoryImportEvent repositoryImportEvent = (RepositoryImportEvent) event;
|
||||
assertThat(repositoryImportEvent.getItem()).isEqualTo(REPOSITORY);
|
||||
assertThat(repositoryImportEvent.isFailed()).isFalse();
|
||||
assertThat(event).isInstanceOf(ImportRepositoryHookEvent.class);
|
||||
ImportRepositoryHookEvent repositoryImportEvent = (ImportRepositoryHookEvent) event;
|
||||
assertThat(repositoryImportEvent.getRepository()).isEqualTo(REPOSITORY);
|
||||
return true;
|
||||
}
|
||||
));
|
||||
|
||||
Reference in New Issue
Block a user