From 70d688e9f953b2eb07b136311f29720ff2c1d377 Mon Sep 17 00:00:00 2001 From: liaozan <378024053@qq.com> Date: Sun, 9 Jul 2023 03:09:52 +0800 Subject: [PATCH] Avoid create file everytime --- .../initializer/service/ArchetypeService.java | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/initializer-backend/src/main/java/com/schbrain/archetype/initializer/service/ArchetypeService.java b/initializer-backend/src/main/java/com/schbrain/archetype/initializer/service/ArchetypeService.java index 7711c8d..ba307a5 100644 --- a/initializer-backend/src/main/java/com/schbrain/archetype/initializer/service/ArchetypeService.java +++ b/initializer-backend/src/main/java/com/schbrain/archetype/initializer/service/ArchetypeService.java @@ -1,11 +1,15 @@ package com.schbrain.archetype.initializer.service; import cn.hutool.cache.impl.TimedCache; +import cn.hutool.core.io.file.PathUtil; import cn.hutool.core.util.ZipUtil; +import cn.hutool.system.SystemUtil; import com.schbrain.archetype.initializer.maven.MavenUtils; import com.schbrain.archetype.initializer.param.ArchetypeGenerateParam; import com.schbrain.archetype.initializer.response.PreviewFileTree; +import com.schbrain.common.exception.BaseException; import com.schbrain.common.web.utils.ServletUtils; +import lombok.extern.slf4j.Slf4j; import org.springframework.http.ContentDisposition; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; @@ -31,11 +35,16 @@ import java.util.stream.Collectors; * @author liaozan * @since 2022/3/20 */ +@Slf4j @Service public class ArchetypeService { + private static final String GITKEEP = ".gitkeep"; + private final TimedCache archetypeNameCache = new TimedCache<>(Duration.ofHours(1).toMillis()); + private final Path gitKeepFile = createGitKeepFile(SystemUtil.getUserInfo().getTempDir()); + public String generate(ArchetypeGenerateParam param) { String generateId = MavenUtils.generate(param); archetypeNameCache.put(generateId, param.getArtifactId()); @@ -59,10 +68,8 @@ public class ArchetypeService { private PreviewFileTree buildFileTree(File root) { File[] fileItems = Optional.ofNullable(root.listFiles()).orElse(new File[0]); if (fileItems.length == 0) { - File gitKeepFile = createGitKeepFile(root); - if (gitKeepFile != null) { - fileItems = new File[]{gitKeepFile}; - } + Path target = Path.of(root.getPath(), GITKEEP); + fileItems = new File[]{PathUtil.copy(gitKeepFile, target).toFile()}; } List children = Arrays.stream(fileItems) .map(fileItem -> { @@ -79,13 +86,13 @@ public class ArchetypeService { return new PreviewFileTree(root, children); } - private File createGitKeepFile(File root) { + private Path createGitKeepFile(String directory) { try { - Path created = Files.createFile(Path.of(root.getPath(), ".gitkeep")); + Path created = Files.createFile(Path.of(directory, GITKEEP)); Files.writeString(created, "This file is used to keep an empty folder when git uploads, If you put other files in the folder, delete this file please"); - return created.toFile(); - } catch (IOException ignore) { - return null; + return created; + } catch (IOException e) { + throw new BaseException("Failed to create .gitkeep file", e); } } -- GitLab