mirror of
https://github.com/scm-manager/scm-manager.git
synced 2026-01-28 02:09:09 +01:00
Add logging for url and dump import
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user