diff --git a/application/src/main/java/org/thingsboard/server/service/install/ProjectInfo.java b/application/src/main/java/org/thingsboard/server/service/install/ProjectInfo.java index 44f73f00a8..128ca5578a 100644 --- a/application/src/main/java/org/thingsboard/server/service/install/ProjectInfo.java +++ b/application/src/main/java/org/thingsboard/server/service/install/ProjectInfo.java @@ -19,14 +19,17 @@ import lombok.RequiredArgsConstructor; import org.springframework.boot.info.BuildProperties; import org.springframework.stereotype.Component; +import java.util.Optional; + @Component @RequiredArgsConstructor public class ProjectInfo { - private final BuildProperties buildProperties; + private final Optional buildProperties; public String getProjectVersion() { - return buildProperties.getVersion().replaceAll("[^\\d.]", ""); + return buildProperties.orElseThrow(() -> new IllegalStateException("Build properties are missing. Please rebuild the project with maven")) + .getVersion().replaceAll("[^\\d.]", ""); } public String getProductType() { diff --git a/application/src/main/java/org/thingsboard/server/service/sync/DefaultGitSyncService.java b/application/src/main/java/org/thingsboard/server/service/sync/DefaultGitSyncService.java index 3f405e145b..4ffb0940b6 100644 --- a/application/src/main/java/org/thingsboard/server/service/sync/DefaultGitSyncService.java +++ b/application/src/main/java/org/thingsboard/server/service/sync/DefaultGitSyncService.java @@ -48,7 +48,7 @@ public class DefaultGitSyncService implements GitSyncService { private final Map repositories = new ConcurrentHashMap<>(); private final Map updateListeners = new ConcurrentHashMap<>(); - private RevCommit lastCommit; + private final Map lastCommits = new ConcurrentHashMap<>(); @Override public void registerSync(String key, String repoUri, String branch, long fetchFrequencyMs, Runnable onUpdate) { @@ -87,7 +87,7 @@ public class DefaultGitSyncService implements GitSyncService { @Override public List listFiles(String key, String path, int depth, FileType type) { GitRepository repository = getRepository(key); - return repository.listFilesAtCommit(lastCommit, path, depth).stream() + return repository.listFilesAtCommit(getLastCommit(key), path, depth).stream() .filter(file -> type == null || file.type() == type) .toList(); } @@ -96,7 +96,7 @@ public class DefaultGitSyncService implements GitSyncService { @Override public byte[] getFileContent(String key, String path) { GitRepository repository = getRepository(key); - return repository.getFileContentAtCommit(path, lastCommit); + return repository.getFileContentAtCommit(path, getLastCommit(key)); } @Override @@ -143,7 +143,7 @@ public class DefaultGitSyncService implements GitSyncService { GitRepository repository = getRepository(key); String branchRef = getBranchRef(repository); try { - lastCommit = repository.resolveCommit(branchRef); + lastCommits.put(key, repository.resolveCommit(branchRef)); } catch (Throwable e) { log.error("[{}] Failed to resolve commit for ref {}", key, branchRef, e); return; @@ -166,6 +166,14 @@ public class DefaultGitSyncService implements GitSyncService { return Path.of(repositoriesFolder, name); } + private RevCommit getLastCommit(String key) { + RevCommit commit = lastCommits.get(key); + if (commit == null) { + throw new IllegalStateException(key + " repository has no resolved commit"); + } + return commit; + } + private String getBranchRef(GitRepository repository) { return "refs/remotes/origin/" + repository.getSettings().getDefaultBranch(); }