Add logging for url and dump import

This commit is contained in:
René Pfeuffer
2021-02-22 17:11:55 +01:00
parent 468b37f725
commit 33cddda172
2 changed files with 24 additions and 5 deletions

View File

@@ -40,6 +40,7 @@ import sonia.scm.repository.RepositoryPermission;
import sonia.scm.repository.api.Command;
import sonia.scm.repository.api.RepositoryService;
import sonia.scm.repository.api.RepositoryServiceFactory;
import sonia.scm.repository.work.WorkdirProvider;
import sonia.scm.util.IOUtil;
import javax.inject.Inject;
@@ -59,12 +60,16 @@ public class FromBundleImporter {
private final RepositoryManager manager;
private final RepositoryServiceFactory serviceFactory;
private final ScmEventBus eventBus;
private final WorkdirProvider workdirProvider;
private final RepositoryImportLoggerFactory loggerFactory;
@Inject
public FromBundleImporter(RepositoryManager manager, RepositoryServiceFactory serviceFactory, ScmEventBus eventBus) {
public FromBundleImporter(RepositoryManager manager, RepositoryServiceFactory serviceFactory, ScmEventBus eventBus, WorkdirProvider workdirProvider, RepositoryImportLoggerFactory loggerFactory) {
this.manager = manager;
this.serviceFactory = serviceFactory;
this.eventBus = eventBus;
this.workdirProvider = workdirProvider;
this.loggerFactory = loggerFactory;
}
public Repository importFromBundle(boolean compressed, InputStream inputStream, Repository repository) {
@@ -89,17 +94,23 @@ public class FromBundleImporter {
@VisibleForTesting
Consumer<Repository> unbundleImport(InputStream inputStream, boolean compressed) {
return repository -> {
File file = null;
RepositoryImportLogger logger = loggerFactory.createLogger();
logger.start(RepositoryImportLog.ImportType.DUMP, repository);
File workdir = workdirProvider.createNewWorkdir(repository.getId());
try (RepositoryService service = serviceFactory.create(repository)) {
file = File.createTempFile("scm-import-", ".bundle");
logger.step("writing temporary dump file");
File file = File.createTempFile("scm-import-", ".bundle", workdir);
long length = Files.asByteSink(file).writeFrom(inputStream);
LOG.info("copied {} bytes to temp, start bundle import", length);
logger.step("importing repository data from dump file");
service.getUnbundleCommand().setCompressed(compressed).unbundle(file);
logger.finished();
} catch (IOException e) {
logger.failed(e);
throw new InternalRepositoryException(repository, "Failed to import from bundle", e);
} finally {
try {
IOUtil.delete(file);
IOUtil.delete(workdir);
} catch (IOException ex) {
LOG.warn("could not delete temporary file", ex);
}

View File

@@ -60,12 +60,14 @@ public class FromUrlImporter {
private final RepositoryManager manager;
private final RepositoryServiceFactory serviceFactory;
private final ScmEventBus eventBus;
private final RepositoryImportLoggerFactory loggerFactory;
@Inject
public FromUrlImporter(RepositoryManager manager, RepositoryServiceFactory serviceFactory, ScmEventBus eventBus) {
public FromUrlImporter(RepositoryManager manager, RepositoryServiceFactory serviceFactory, ScmEventBus eventBus, RepositoryImportLoggerFactory loggerFactory) {
this.manager = manager;
this.serviceFactory = serviceFactory;
this.eventBus = eventBus;
this.loggerFactory = loggerFactory;
}
public Repository importFromUrl(RepositoryImportParameters parameters, Repository repository) {
@@ -93,16 +95,22 @@ public class FromUrlImporter {
@VisibleForTesting
Consumer<Repository> pullChangesFromRemoteUrl(RepositoryImportParameters parameters) {
return repository -> {
RepositoryImportLogger logger = loggerFactory.createLogger();
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())) {
logger.step("setting username and password for pull");
pullCommand
.withUsername(parameters.getUsername())
.withPassword(parameters.getPassword());
}
logger.step("pulling repository from " + parameters.getImportUrl());
pullCommand.pull(parameters.getImportUrl());
logger.finished();
} catch (IOException e) {
logger.failed(e);
throw new InternalRepositoryException(repository, "Failed to import from remote url", e);
}
};