Browse Source

Merge pull request #10321 from dashevchenko/vc_fix

Fix git repository initialization after repo directory deletion
pull/10345/head
Viacheslav Klimov 3 years ago
committed by GitHub
parent
commit
57a4ac52c7
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 47
      common/version-control/src/main/java/org/thingsboard/server/service/sync/vc/DefaultGitRepositoryService.java

47
common/version-control/src/main/java/org/thingsboard/server/service/sync/vc/DefaultGitRepositoryService.java

@ -157,12 +157,10 @@ public class DefaultGitRepositoryService implements GitRepositoryService {
@Override @Override
public void fetch(TenantId tenantId) throws GitAPIException { public void fetch(TenantId tenantId) throws GitAPIException {
var repository = repositories.get(tenantId); var repository = checkRepository(tenantId);
if (repository != null) { log.debug("[{}] Fetching tenant repository.", tenantId);
log.debug("[{}] Fetching tenant repository.", tenantId); repository.fetch();
repository.fetch(); log.debug("[{}] Fetched tenant repository.", tenantId);
log.debug("[{}] Fetched tenant repository.", tenantId);
}
} }
@Override @Override
@ -195,8 +193,17 @@ public class DefaultGitRepositoryService implements GitRepositoryService {
} }
private GitRepository checkRepository(TenantId tenantId) { private GitRepository checkRepository(TenantId tenantId) {
return Optional.ofNullable(repositories.get(tenantId)) GitRepository gitRepository = Optional.ofNullable(repositories.get(tenantId))
.orElseThrow(() -> new IllegalStateException("Repository is not initialized")); .orElseThrow(() -> new IllegalStateException("Repository is not initialized"));
if (!Files.exists(Path.of(gitRepository.getDirectory()))) {
try {
return cloneRepository(tenantId, gitRepository.getSettings());
} catch (Exception e) {
throw new IllegalStateException("Could not initialize the repository: " + e.getMessage(), e);
}
}
return gitRepository;
} }
@Override @Override
@ -229,17 +236,7 @@ public class DefaultGitRepositoryService implements GitRepositoryService {
testRepository(tenantId, settings); testRepository(tenantId, settings);
clearRepository(tenantId); clearRepository(tenantId);
log.debug("[{}] Init tenant repository started.", tenantId); cloneRepository(tenantId, settings);
Path repositoryDirectory = Path.of(repositoriesFolder, tenantId.getId().toString());
GitRepository repository;
if (Files.exists(repositoryDirectory)) {
FileUtils.forceDelete(repositoryDirectory.toFile());
}
Files.createDirectories(repositoryDirectory);
repository = GitRepository.clone(settings, repositoryDirectory.toFile());
repositories.put(tenantId, repository);
log.debug("[{}] Init tenant repository completed.", tenantId);
} }
@Override @Override
@ -276,4 +273,18 @@ public class DefaultGitRepositoryService implements GitRepositoryService {
String entityId = StringUtils.substringBetween(path, "/", ".json"); String entityId = StringUtils.substringBetween(path, "/", ".json");
return EntityIdFactory.getByTypeAndUuid(entityType, entityId); return EntityIdFactory.getByTypeAndUuid(entityType, entityId);
} }
private GitRepository cloneRepository(TenantId tenantId, RepositorySettings settings) throws Exception {
log.debug("[{}] Init tenant repository started.", tenantId);
Path repositoryDirectory = Path.of(repositoriesFolder, tenantId.getId().toString());
if (Files.exists(repositoryDirectory)) {
FileUtils.forceDelete(repositoryDirectory.toFile());
}
Files.createDirectories(repositoryDirectory);
GitRepository repository = GitRepository.clone(settings, repositoryDirectory.toFile());
repositories.put(tenantId, repository);
log.debug("[{}] Init tenant repository completed.", tenantId);
return repository;
}
} }

Loading…
Cancel
Save